绘制 k-means 的结果

Plotting results of k-means

我有一个 229 行的 pandas 数据框。每行代表一个"strain"。数据来自4个站点。这些菌株使用站点代码进行编码。

Once upon a time,此数据已聚类并且

The 229 strains examined formed a large group at the S (similarity) 231% level, using the Jaccard similarity coefficient and unweighted average linkage. Within this group, 10 clusters, or phena, were distinguished at varying levels of similarity above 65%. Twenty-one strains did not fall into any one of these phenetic groups. No cluster with less than five members was considered further.

免责声明:我不是统计学家;我对超过均值和中位数的统计数据基本上一无所知。很久以前,我有一个统计学家可以一起工作。我对机器学习算法几乎一无所知,尽管我知道从一般角度来看聚类意味着什么。

我想尝试用更现代的方法重现聚类。我想我会尝试 k-means(如果这是一个错误的选择,请赐教)。

数据为布尔值。我已经转置它,以便每一列都是一个 "strain" 并且行是特征。 (对吗?)

代码:

In [106]: from sklearn.cluster import KMeans

          kmeans = KMeans(n_clusters=10)
          kmeans.fit(df_bool)

Out [106]:
KMeans(algorithm='auto', copy_x=True, init='k-means++', max_iter=300,
       n_clusters=10, n_init=10, n_jobs=None, precompute_distances='auto',
       random_state=None, tol=0.0001, verbose=0)

In [107]: labels = kmeans.predict(df_bool)
          centroids = kmeans.cluster_centers_

          labels

Out [107]: array([5, 5, 2, 2, 0, 4, 9, 8, 1, 6, 1, 1, 7, 1, 3, 1, 1, 1, 1, 1],
      dtype=int32)

问题 1:这个列表(我假设是簇编号)是我应该期待的吗?

问题 2:如何绘制部分或全部结果?

问题 3:我是否完全偏离了基地?即 K-means 对布尔数据有意义吗?我的 DataFrame 是否正确对齐?

我问的问题正确吗?

问题 1:是的,你描述的输出是你应该期望的,一个数字告诉你观察最有可能属于哪个集群。

问题 2:你不能绘制这个。人们在绘制 kmeans 时通常所做的是使用某种降​​维将其向量转换为二维,然后将它们绘制为 X 和 Y。然后您可以使用 kmeans 标签作为散点图的颜色。请参阅 ,我在其中更详细地描述了这个过程。

问题 3:kmeans 聚类可能无法很好地处理二进制数据。有关替代方案,请参阅 https://www.ibm.com/support/pages/clustering-binary-data-k-means-should-be-avoided。这主要取决于数据是否具有形成连贯分组的潜在模式,以及您使用的方法是否可以捕获这些模式。