Python 序列k-均值

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

我是否可以使用以前拟合的群集中心坐标作为初始参数,在新数据到达时按顺序更新群集中心坐标?这种方法有什么缺点吗

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.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