Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用scikit学习的序列k-均值聚类_Python_Machine Learning_Cluster Analysis_Scikit Learn - Fatal编程技术网

Python 使用scikit学习的序列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

有没有一种方法可以使用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=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))]