【问题标题】:K-means clustering using sklearn.cluster使用 sklearn.cluster 进行 K 均值聚类
【发布时间】:2016-03-10 21:18:57
【问题描述】:

我在Unsupervised Machine Learning: Flat Clustering 上看到了这个关于 K-means 聚类的教程,下面是代码:

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()

在这个例子中,数组只有 [1,2],[5,8],[1.5,1.8] 等 2 个特征。

我尝试将X 替换为存储在np.array() 中的10 x 750 矩阵(750 个特征)。 它创建的图表没有任何意义。

我怎样才能改变上面的代码来解决我的问题?

【问题讨论】:

  • 嗯,您正在对 750 维数据进行聚类并仅可视化前两个维度。可以预料,结果没有多大意义。
  • 10 个事件,每个事件有 750 个特征?在您没有做出像样的特征选择/特征生成之前,您不会对其进行分类。您认为如何在 750 维空间中聚集 10 个点?这不会发生。

标签: python scikit-learn cluster-analysis k-means


【解决方案1】:

可视化 750 维很难。

弄清楚独立的k-means如何可视化。

但不要指望 k-means 会在此类数据上返回有意义的结果...它对预处理和归一化非常敏感,而且很可能您的 750 个维度不在完全相同的连续数值尺度上。

【讨论】:

    【解决方案2】:

    实际上,直接可视化 750 维数据是不可能的。

    但是还有其他方法可以解决,例如,首先使用PCA 将维度减少到一个非常低的维度,例如 4。Scikit-learn 还提供了一个function for this

    然后你可以绘制一个 plot 矩阵,每个 plot 只有两个特征。使用Pandas 包,您可以使用scatter_matrix 函数非常轻松地绘制这些图。

    请注意,在您仅使用 PCA 进行可视化的情况下,您仍应在获取质心后对原始数据进行 K-means 聚类,然后使用您之前创建的 PCA 模型对质心进行 PCA。

    这是由scatter_matrix 函数创建的示例图:

    【讨论】:

    • scatter_matrix 不再受支持。您可以在替换中使用 Seaborn,只需执行 import seaborn as sns 之类的简单操作,然后创建您的数据框,然后执行 sns.pairplot(df) 来创建与此答案类似的视觉效果。效果很好。
    猜你喜欢
    • 2017-12-09
    • 2017-03-07
    • 1970-01-01
    • 2017-11-30
    • 2013-02-01
    • 2015-03-02
    • 2014-07-24
    • 2022-08-10
    相关资源
    最近更新 更多