Python 使用scikit学习的序列k-均值聚类
有没有一种方法可以使用scikit learn执行顺序k均值聚类?如果不重新拟合所有数据,我似乎找不到添加新数据的正确方法Python 使用scikit学习的序列k-均值聚类,python,machine-learning,cluster-analysis,scikit-learn,Python,Machine Learning,Cluster Analysis,Scikit Learn,有没有一种方法可以使用scikit learn执行顺序k均值聚类?如果不重新拟合所有数据,我似乎找不到添加新数据的正确方法 谢谢您可以使用init参数将质心的初始值传递给。那么你就可以做: centroids, labels, inertia = k_means(data, k) new_data = np.append(data, extra_pts) new_centroids, new_labels, new_inertia = k_means(new_data, k, init=cent
谢谢您可以使用init参数将质心的初始值传递给。那么你就可以做:
centroids, labels, inertia = k_means(data, k)
new_data = np.append(data, extra_pts)
new_centroids, new_labels, new_inertia = k_means(new_data, k, init=centroids)
假设您只是添加数据点,而不是更改k
我认为这有时意味着你会得到一个次优的结果,但通常应该更快。您可能希望偶尔使用(例如)10个随机种子重新进行拟合,并选择最佳种子。您可以使用init参数将质心的初始值传递给。那么你就可以做:
centroids, labels, inertia = k_means(data, k)
new_data = np.append(data, extra_pts)
new_centroids, new_labels, new_inertia = k_means(new_data, k, init=centroids)
假设您只是添加数据点,而不是更改k
我认为这有时意味着你会得到一个次优的结果,但通常应该更快。您可能希望偶尔使用(比如)10个随机种子重新进行拟合,并选择最好的种子。scikit learn的KMeans类有一个方法,可以在给定一些新点的情况下,确定这些点属于哪些簇。调用此方法不会更改群集质心
如果您确实希望通过添加新数据来改变质心,即,您希望在在线环境中进行聚类,请使用估计器及其部分拟合方法。scikit learn的KMeans类有一种方法,在给定一些新点的情况下,确定这些点属于哪些聚类。调用此方法不会更改群集质心
如果您确实希望通过添加新数据来改变质心,即您希望在在线设置中进行聚类,请使用估计器及其部分拟合方法。编写自己的函数,找出哪个质心最接近您正在考虑的点也相对容易。假设您有一些矩阵X可以用于kmeans:
centroids, labels, inertia = cluster.k_means(X, 5)
def pred(arr):
return np.argmin([np.linalg.norm(arr-b) for b in centroids])
您可以通过以下方式确认此功能是否有效:
[pred(X[i]) == labels[i] for i in range(len(X))]
编写自己的函数来找出哪个质心最接近您正在考虑的点也相对容易。假设您有一些矩阵X可以用于kmeans:
centroids, labels, inertia = cluster.k_means(X, 5)
def pred(arr):
return np.argmin([np.linalg.norm(arr-b) for b in centroids])
您可以通过以下方式确认此功能是否有效:
[pred(X[i]) == labels[i] for i in range(len(X))]