Scikit-learn kmeans 聚类
Posted
技术标签:
【中文标题】Scikit-learn kmeans 聚类【英文标题】:Scikit-learn kmeans clustering 【发布时间】:2015-02-20 01:54:31 【问题描述】:我应该对一些数据进行 kmeans 集群实现。我从http://glowingpython.blogspot.com/2012/04/k-means-clustering-with-scipy.html 看到的示例在 2 列中显示了他们的测试数据......但是,我给出的数据是 68 个具有 78 个特征的主题(所以 68x78 矩阵)。我应该如何为此创建适当的输入?
我基本上只是尝试输入矩阵,但它似乎没有做我想要的......我不知道为什么会这样。我很困惑该怎么做。
data = np.rot90(data)
centroids,_ = kmeans(data,2)
# assign each sample to a cluster
idx,_ = vq(data,centroids)
# some plotting using numpy's logical indexing
plot(data[idx==0,0],data[idx==0,1],'ob',
data[idx==1,0],data[idx==1,1],'or')
plot(centroids[:,0],centroids[:,1],'sg',markersize=8)
show()
老实说,我不知道要给你看什么样的代码。我告诉你的数据格式已经描述过了。否则和我链接的教程一样。
【问题讨论】:
显示您实际尝试过的代码。除了“似乎没有按照我的意愿行事”之外,您还看到了哪些具体的错误消息或意外行为? i.imgur.com/ILmPQS3.png 我不明白为什么一些更接近一个集群的人被标记为另一个......老实说,我有点希望他们会更加分离(但我想这是可能的他们不是)。 看起来您使用的是 scipy 而不是 scikit-learn。应该可能改变标签。我自己对kmeans还很陌生。话虽如此,78 个功能似乎很多。都是 78 个数字、非分类变量吗? 是的,他们是。话虽如此,我的数据是否组织正确?这个例子使它看起来像 x,y 坐标。我不知道我的数据是如何绘制的。我只有 68 个长度为 78 的向量。我觉得我真的错过了一些东西并变得沮丧。 您只绘制了 78 个维度中的 2 个。在这个 2 维 投影 中看起来更接近红色质心的蓝色点实际上更接近整个 78 维空间中的蓝色质心。 【参考方案1】:您的可视化仅使用前两个维度。
这就是为什么这些点看起来是“不正确的”——它们在不同的维度上更接近。
看看接下来的两个维度:
plot(data[idx==0,2],data[idx==0,3],'ob',
data[idx==1,2],data[idx==1,3],'or')
plot(centroids[:,2],centroids[:,3],'sg',markersize=8)
show()
...对所有剩余的 78 个维度重复...
在这么多特征下,(平方)欧几里得距离变得毫无意义,k-means 结果往往变得与随机凸分区一样好。
要获得更具代表性的视图,请考虑使用MDS 将数据投影到二维中以进行可视化。只需 68 个主题,它应该可以相当快地工作。
请在您的问题中包含可视化。我们没有您的数据。
【讨论】:
以上是关于Scikit-learn kmeans 聚类的主要内容,如果未能解决你的问题,请参考以下文章
是否可以在 Python(Scikit-Learn)中对 KMeans 中的非浮点数据进行聚类?
使用 Scikit-learn KMeans 对多维数组进行聚类