在这里阅读这篇关于k-means聚类中重复值的帖子后,我意识到我不能简单地使用唯一的点进行聚类。
我有超过10000,000点,但只有8000个独特点。因此,我最初认为为了加快速度,我只会使用独特的点数。似乎这是一个坏主意。
为了缩短计算时间,本文建议为每个点添加权重。如何在python中实现?
答案 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:操纵数据集很危险。如果计算成本是一个主要因素,我会对代码进行并行化。