k-means与选定的初始中心

lel*_*lel 8 python numpy k-means scikit-learn

我正在尝试使用选定的初始质心进行k均值聚类.它在这里 说明要指定你的初始中心:

init : {‘k-means++’, ‘random’ or an ndarray} 
Run Code Online (Sandbox Code Playgroud)

如果a ndarray通过,它应该是形状(n_clusters,n_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
Run Code Online (Sandbox Code Playgroud)

返回错误:

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

并返回相同的初始中心.知道如何形成初始中心以便可以接受吗?

ali*_*i_m 14

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

n_init:int,默认值:10

使用不同质心种子运行k-means算法的时间.n_init在惯性方面,最终结果将是连续运行的最佳输出 .

如果传递数组作为init=参数,则只使用数组中明确指定的质心执行单个初始化.你得到的是RuntimeWarning因为你仍然传递了默认值n_init=10(这里是相关的源代码行).

忽略这个警告实际上是完全正确的,但n_init=1如果你的init=参数是一个数组,你可以通过传递完全消失.