在Python中使用scipy kmeans和kmeans2集群时出现问题

在Python中使用scipy kmeans和kmeans2集群时出现问题,第1张

概述我有一个关于scipy的kmeans和kmeans2的问题.我有一组1700个lat-long数据点.我想在空间上将它们聚类成100个簇.但是,当使用kmeans vs kmeans2时,我得到了截然不同的结果.你能解释一下这是为什么吗?我的代码如下. 首先,我加载数据并绘制坐标.这看起来都很正确. import pandas as pd, numpy as np, matplotlib.pypl 我有一个关于scipy的kmeans和kmeans2的问题.我有一组1700个lat-long数据点.我想在空间上将它们聚类成100个簇.但是,当使用kmeans vs kmeans2时,我得到了截然不同的结果.你能解释一下这是为什么吗?我的代码如下.

首先,我加载数据并绘制坐标.这看起来都很正确.

import pandas as pd,numpy as np,matplotlib.pyplot as pltfrom scipy.cluster.vq import kmeans,kmeans2,whitendf = pd.read_csv('data.csv')df.head()coordinates = df.as_matrix(columns=['lon','lat'])plt.figure(figsize=(10,6),dpi=100)plt.scatter(coordinates[:,0],coordinates[:,1],c='c',s=100)plt.show()

接下来,我将数据白化并运行kmeans()和kmeans2().当我从kmeans()绘制质心时,它看起来是正确的 – 即大约100个点或多或少代表完整1700点数据集的位置.

N = len(coordinates)w = whiten(coordinates)k = 100i = 20cluster_centroIDs1,distortion = kmeans(w,k,iter=i)cluster_centroIDs2,closest_centroIDs = kmeans2(w,iter=i)plt.figure(figsize=(10,dpi=100)plt.scatter(cluster_centroIDs1[:,cluster_centroIDs1[:,c='r',s=100)plt.show()

然而,当我接下来从kmeans2()绘制质心时,它对我来说看起来很不稳定.我希望kmeans和kmeans2的结果非常相似,但它们完全不同.虽然kmeans的结果似乎只是表示我的完整数据集,但kmeans2的结果看起来几乎是随机的.

plt.figure(figsize=(10,dpi=100)plt.scatter(cluster_centroIDs2[:,cluster_centroIDs2[:,s=100)plt.show()

这是我的k和N的值,以及由kmeans()和kmeans2()产生的数组的大小:

print 'k =',kprint 'N =',Nprint len(cluster_centroIDs1)print len(cluster_centroIDs2)print len(closest_centroIDs)print len(np.unique(closest_centroIDs))

输出:

k = 100N = 175996100175917

>为什么len(cluster_centroIDs1)不等于k?
> len(nearest_centroIDs)等于N,这似乎是正确的.但为什么len(np.unique(nearest_centroIDs))不等于k?
> len(cluster_centroIDs2)等于k,但同样,当绘制时,cluster_centroIDs2似乎不像cluster_centroIDs1那样表示原始数据集.

最后,我绘制了我的全坐标数据集,由集群着色.

plt.figure(figsize=(10,c=closest_centroIDs,s=100)plt.show()

你可以在这里看到它:

@R_419_6120@ 感谢您提供示例代码和图片的好问题!这是一个很好的新手问题.

通过仔细阅读文档可以解决大多数特性.一些东西:

>当比较原始点集和生成的聚类中心时,您应该尝试在具有相同尺寸的相同图中绘制它们(即,w再次结果).例如,使用大点绘制聚类中心,并在其上绘制带有小点的原始数据.> kmeans和kmeans2从不同的情况开始. kmeans2从点的随机分布开始,并且由于您的数据不均匀分布,kmeans2会收敛到非理想的结果.您可以尝试添加关键字minit =’points’并查看结果是否发生变化.>由于初始质心选择不好,最初的100个质心中只有17个实际上有任何属于它们的点(这与图形的随机外观密切相关).>看起来kmeans中的某些质心可能会相互坍塌,如果它产生最小的失真. (这似乎没有记录.)因此,你将只获得96个质心.

总结

以上是内存溢出为你收集整理的在Python中使用scipy kmeans和kmeans2集群时出现问题全部内容,希望文章能够帮你解决在Python中使用scipy kmeans和kmeans2集群时出现问题所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1197129.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-03
下一篇2022-06-03

发表评论

登录后才能评论

评论列表(0条)

    保存