k-means与选定的初始中心

时间:2015-03-04 18:40:48

标签: python numpy scikit-learn k-means

我正在尝试使用选定的初始质心进行k-means聚类。 它说here  指定您的初始中心:

init : {‘k-means++’, ‘random’ or an ndarray} 

如果传递了ndarray,它应该是形状(n_clustersn_features)并给出初始中心。

我在Python中的代码:

X = np.array([[-19.07480000,  -8.536],
              [22.010800000,-10.9737],
              [12.659700000,19.2601]], np.float64)
km = KMeans(n_clusters=3,init=X).fit(data)
# print km
centers = km.cluster_centers_
print centers

返回错误:

RuntimeWarning: Explicit initial center position passed: performing only one init in k-means instead of n_init=10
  n_jobs=self.n_jobs)

并返回相同的初始中心。知道如何组建初始中心以便可以接受吗?

1 个答案:

答案 0 :(得分:13)

KMeans的默认行为是使用不同的随机质心(即Forgy method)多次初始化算法。然后,随机初始化的数量由n_init=参数(docs)控制:

  

n_init :int,默认值:10

     

k-means算法以不同的方式运行的次数   质心种子。最终的结果将是最好的输出   n_init在惯性方面连续运行。

如果将数组作为init=参数传递,则只使用数组中明确指定的质心执行初始化。您收到RuntimeWarning,因为您仍然传递默认值n_init=10here是相关的源代码行。)

忽略此警告实际上完全没问题,但如果您的n_init=1参数是数组,则可以通过传递init=来完全消失。