【发布时间】:2016-11-06 14:40:51
【问题描述】:
我正在阅读k-means 的文档,我看到它使用k++ 作为初始化。 sci-py中实现的k++初始化函数是否可以使用?
阅读他们的文档,我认为唯一的方法是使用 K-means 算法,但不要训练任何数量的迭代,如下所示:
N = 1000 #data set size
D = 2 # dimension
X = np.random.rand(N,D)
kmeans = sklearn.cluster.KMeans(n_clusters=8, init='k-means++', n_init=1, max_iter=0)
ceneters_k_plusplus = kmeans.fit(X)
这会起作用还是有直接的方法可以正确使用他们的库? (在他们的文档中找不到)
经过一番痛苦和流血后,我设法让它运行(认为不是 100% 正确,但它返回一个 numpy 数组):
import sklearn
import sklearn.cluster.k_means_
import numpy as np
#from ..utils.extmath import row_norms, squared_norm
from sklearn.utils.extmath import row_norms, squared_norm
from sklearn.utils import check_random_state
X = np.random.rand(10,3)
n_clusters = 4
random_state = None
random_state = check_random_state(random_state)
x_squared_norms = row_norms(X, squared=True)
centers = sklearn.cluster.k_means_._k_init(X, n_clusters, random_state=random_state,x_squared_norms=x_squared_norms)
print centers
【问题讨论】:
-
我会在 k_means_.py 文件中查看函数
_k_init,例如:github.com/scikit-learn/scikit-learn/blob/master/sklearn/… 或附近,因为我认为您最终会得到 init 的默认值...但是我可能错了,它是一个私有函数......所以“正确”使用会排除它;-) -
运行上述不允许我将迭代设置为零。我想这是意料之中的。
-
@Dilettant 大声笑,此时我不在乎,任何让我使用 K++ 的东西都可以:P
标签: python numpy machine-learning scipy scikit-learn