Python 序列k-均值
我是否可以使用以前拟合的群集中心坐标作为初始参数,在新数据到达时按顺序更新群集中心坐标?这种方法有什么缺点吗 Scikit学习K-means的更新在线版本:Python 序列k-均值,python,scikit-learn,cluster-analysis,k-means,online-machine-learning,Python,Scikit Learn,Cluster Analysis,K Means,Online Machine Learning,我是否可以使用以前拟合的群集中心坐标作为初始参数,在新数据到达时按顺序更新群集中心坐标?这种方法有什么缺点吗 Scikit学习K-means的更新在线版本: KM = KMeans(n_clusters=3, random_state = 200, n_init = 1) ni = 0 Until interrupted: for x in data: KM_updated = KM.fit(x) Updated_centroids(i) = KM_updated.cl
KM = KMeans(n_clusters=3, random_state = 200, n_init = 1)
ni = 0
Until interrupted:
for x in data:
KM_updated = KM.fit(x)
Updated_centroids(i) = KM_updated.cluster_centers_(i) + 1/len(KM_updated.labels_(i) + 1) * (x - KM_updated.cluster_centers_(i))
KM = KMeans(n_clusters=3, random_state = 200, init = Updated_centroids(i), n_init = 1)
是的,这是一个可能的解决办法。但是,您可以通过以下伪代码进一步改进实现(有关更多信息,请参阅本文): 按照此版本的在线算法,您只需记住每个簇的平均值和分配给簇的数据点的数量。一旦更新了这两个变量,就可以忘记新的数据点 与您的解决方案相比,此解决方案不需要保留过去的数据,因此计算效率更高
Scikit Learn中没有此确切实现。最接近的实现可能是使用部分拟合方法的估计器。谢谢!与您提到的方法相比,使用我提到的方法有哪些缺点?另外,是否有一种简洁的方法可以使用sci工具包learn Kmean API来实现您提到的方法?现在我用kmeans和以前计算的质心来拟合新的数据点。这个精确的实现在Scikit Learn中不可用。最接近的实现可能是MiniBatchKMeans()估计器和部分拟合方法。建议的解决方案和您的解决方案之间的区别在于,在在线k-means中,您不需要保留过去的数据,因此计算效率更高。欢迎您!如果你发现我的答案有用,请考虑选择它作为接受。这将帮助其他可能遇到类似问题的用户!
Make initial guesses for the means m1, m2, ..., mk
Set the counts n1, n2, ..., nk to zero
Until interrupted
Acquire the next example, x
If mi is closest to x
Increment ni
Replace mi by mi + (1/ni)*( x - mi)
end_if
end_until