【问题标题】:K-means clustering is not grouping around the centroidK-means 聚类未围绕质心分组
【发布时间】:2021-11-25 06:01:17
【问题描述】:

我对 ML 和 pandas/scipy 还很陌生,所以请多多包涵。我正在尝试使用 sklearn.cluster KMEANS 模块运行 K-means 聚类,但我的聚类没有得到预期的结果。

我正在使用的数据集是一个 64 x 6830 的基因组数据矩阵。行是特定的癌细胞系,列是表达值。

我对数据进行了标准化,使标准差为 1,均值为 0。

dataframe 中,数据如下所示:

                  0         1         2         3         4         5     \
Cancer Types                                                               
CNS           0.728671  1.607220  1.325688  1.355688 -0.604845 -0.220654   
CNS           1.596418  1.753544  0.441686  0.654119  0.911898  1.648748   
CNS           2.190290 -0.016217 -0.349092  0.266465 -1.311310 -0.019322   
RENAL         0.682995 -0.375502  1.628079 -0.444299  1.244434 -0.019322   
BREAST        1.151170 -0.581759  0.965145  1.138767  0.361351 -0.033703   
...                ...       ...       ...       ...       ...       ...   
MELANOMA     -0.024977 -0.601719  0.209168 -0.342761 -0.459396  1.159911   
MELANOMA     -0.573084  0.875343 -0.186266  1.318766  2.117127  0.210772   
MELANOMA      0.523130 -0.788015 -0.302571 -0.924296  0.039286 -1.169792   
MELANOMA     -0.070652  0.223307 -0.163005 -0.859681  0.039286 -0.019322   
MELANOMA      0.842860 -0.322275  0.092864 -0.831988 -1.539873 -0.997222   

这是我用来创建 KMEANS 集群的 python 代码

vals = standardize.values

from sklearn.cluster import KMeans
km = KMeans(n_clusters=4, n_init=150, random_state=123)
km.fit(vals)

fig, ax = plt.subplots(1, figsize=(14,5))

ax.scatter(vals[:,0], vals[:,1], c = km.labels_, cmap=plt.cm.plasma_r) 
ax.set_title('K-Means Clustering Results with K=4')
ax.scatter(km.cluster_centers_[:,0], km.cluster_centers_[:,1], marker='+', s=100, c='k', linewidth=2)

plt.show()

这是我的结果:

如您所见,我的所有情节点都没有正确聚集在质心周围

【问题讨论】:

  • 您的训练数据有 6 个特征,您只绘制了前两个特征。要绘制这样的 6 维空间,您必须将维度减少到 2。
  • 嗨迈克尔,知道如何在不使用前两个功能创建 KMEANS 集群的情况下将维度减少到 2 吗?

标签: python pandas k-means


【解决方案1】:

我认为问题在于您只代表 2 列数据,而聚类是在原始空间 64 * 6830 中完成的。

因此,每个质心都应该是一个 6830 维的向量,但您在图中仅使用了 2 个维度(在您的情况下为基因)。

要绘制您的数据,我建议您使用 PCA 或 UMAP 之类的东西将您的数据投影到可以轻松表示的 2D 空间中,而不是应用 k-means。这样,您的质心将只有 2 个维度,您可以轻松绘制,并且您的样本将由 2 个坐标表示。

此外,高维空间中的聚类非常复杂,尤其是使用欧几里得距离等度量。因此,将数据向下投影到较低维空间应该有助于聚类,而不仅有利于表示。 使用 PCA,您可以通过以下方式在 2D 中向下投影数据。 其他非线性模型可能会更好地投影数据。

from sklearn.decomposition import PCA
X = vals
Transformed_x = PCA(2).fit_transform(X)

不像你那样应用k-means

【讨论】:

  • 谢谢,PCA 降维正是我需要/想要的。
猜你喜欢
  • 2020-02-21
  • 2018-09-19
  • 1970-01-01
  • 2018-04-27
  • 2016-06-27
  • 2022-01-23
  • 2018-05-09
  • 2016-02-26
  • 2016-05-29
相关资源
最近更新 更多