使用sklearn.cluster进行K-means聚类

3
我在无监督机器学习:平面聚类上找到了关于K均值聚类的教程,下面是代码:
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import style
style.use("ggplot")

from sklearn.cluster import KMeans

X = np.array([[1,2],[5,8],[1.5,1.8],[1,0.6],[9,11]])

kmeans = KMeans(n_clusters=3)
kmeans.fit(X)

centroid = kmeans.cluster_centers_
labels = kmeans.labels_

print (centroid)
print(labels)

colors = ["g.","r.","c."]

for i in range(len(X)):
   print ("coordinate:" , X[i], "label:", labels[i])
   plt.plot(X[i][0],X[i][1],colors[labels[i]],markersize=10)

plt.scatter(centroid[:,0],centroid[:,1], marker = "x", s=150, linewidths = 5, zorder =10)

plt.show()

在这个例子中,该数组只有2个特征,如[1,2],[5,8],[1.5,1.8]等。
我试图用存储在np.array()中的10 x 750矩阵(750个特征)替换X。生成的图表毫无意义。
我该如何修改上述代码来解决我的问题?

5
你正在对750维数据进行聚类,并且只是可视化了其中的前两个维度。所以结果不太容易理解是可以预料的。 - jme
10个事件,每个事件有750个特征?在进行良好的特征选择/特征生成之前,你不可能对其进行分类。你怎么想能够在一个750维空间中聚类10个点呢?这是不可能的。 - MaxNoe
2个回答

3
实际上,直接可视化750维数据是不可能的。但有其他方法,例如首先使用PCA进行降维,降到比较低的维数,例如4维。Scikit-learn还提供了此功能。然后,您可以绘制一个矩阵图,每个图只有两个特征。使用Pandas包,您可以使用scatter_matrix函数轻松绘制这些图。请注意,在您的情况下,您仅使用PCA进行可视化,应该仍然在原始数据上进行K-means聚类,获取质心后,使用之前创建的PCA模型对质心进行PCA。
这里是由scatter_matrix函数创建的示例图表: enter image description here

1
scatter_matrix不再受支持。您可以使用Seaborn替代,只需执行简单的import seaborn as sns,然后创建数据框,然后执行sns.pairplot(df)以创建与此答案类似的可视化效果。效果很好。 - Fastidious

0

可视化750个维度很困难。

独立于k-means,找出如何进行可视化。

但是不要期望k-means在这样的数据上返回有意义的结果...它对预处理和归一化非常敏感,并且最可能你的750个维度不在完全相同的连续数值范围内。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接