python中的加权k-means

时间:2018-06-11 02:03:43

标签: python k-means

在这里阅读这篇关于k-means聚类中重复值的帖子后,我意识到我不能简单地使用唯一的点进行聚类。

https://stats.stackexchange.com/questions/152808/do-i-need-to-remove-duplicate-objects-for-cluster-analysis-of-objects

我有超过10000,000点,但只有8000个独特点。因此,我最初认为为了加快速度,我只会使用独特的点数。似乎这是一个坏主意。

为了缩短计算时间,本文建议为每个点添加权重。如何在python中实现?

2 个答案:

答案 0 :(得分:2)

使用Scikit库中的K-Means程序包,此处对11个集群执行集群。 数组Y包含已作为权重插入的数据,而X包含需要聚类的实际点。

from sklearn.cluster import KMeans  #For applying KMeans
##--------------------------------------------------------------------------------------------------------##
#Starting k-means clustering


kmeans = KMeans(n_clusters=11, n_init=10, random_state=0, max_iter=1000)

#Running k-means clustering and enter the ‘X’ array as the input coordinates and ‘Y’ 
array as sample weights
wt_kmeansclus = kmeans.fit(X,sample_weight = Y)
predicted_kmeans = kmeans.predict(X, sample_weight = Y)

#Storing results obtained together with respective city-state labels
kmeans_results = 
pd.DataFrame({"label":data_label,"kmeans_cluster":predicted_kmeans+1})


#Printing count of points alloted to each cluster and then the cluster centers
print(kmeans_results.kmeans_cluster.value_counts())

答案 1 :(得分:0)

我认为该帖子建议使用加权平均值。

您可以使用旧数据集创建新数据集,新数据集将为每个点提供额外的属性,即频率(即它的权重)。

每次计算每个聚类的新质心时,请取该聚类的所有点的加权平均值(而不是计算所有点的简单均值)。

PS:操纵数据集很危险。如果计算成本是一个主要因素,我会对代码进行并行化。