为什么权重不会改变 sci-kit 学习包中的 K 均值聚类中心位置?

Boh*_*dar 5 python k-means scikit-learn

我正在尝试使用权重选项计算簇的中心位置。但举重似乎不起作用。

这是代表问题的简单脚本

X = []
weights = []
for x in range(-10,10):
    for y in range(-10,10):
        X+= [[x,y]]
        if x>0 and y>0:
            weights += [10000]
        else:
            weights += [1]

X = np.array(X)
weights = np.array(weights)

kmeans = KMeans(n_clusters=1, random_state=0).fit(X,weights)
print kmeans.cluster_centers_
Run Code Online (Sandbox Code Playgroud)

第一季度打印的[[-0.5 -0.5]]权重为10000 。

我预计它大约是(5,5)

EDIT1:尝试将 fit() 调用为:

fit(X,sample_weight=weights)
Run Code Online (Sandbox Code Playgroud)

返回:

TypeError: fit() got an unexpected keyword argument 'sample_weight'
Run Code Online (Sandbox Code Playgroud)

添加第二个变量也没有帮助:

fit(X,None,weights)
Run Code Online (Sandbox Code Playgroud)

返回:

TypeError: fit() takes at most 3 arguments (4 given)
Run Code Online (Sandbox Code Playgroud)

Jan*_*n K 4

问题在于您调用该fit方法的方式。您需要将 theweights作为关键字参数传递

kmeans = KMeans(n_clusters=1, random_state=0).fit(X, sample_weight=weights)
Run Code Online (Sandbox Code Playgroud)

解释

该方法的签名fit如下:

KMeans.fit(self, X, y=None, sample_weight=None)
Run Code Online (Sandbox Code Playgroud)

通过KMeans.fit(self, X, weights)隐式调用 theny = weights。由于y被忽略,因此没有任何效果。

请参阅官方文档以获取更多信息。

  • 将版本从 0.19.2 更改为 0.20.2 解决了该问题。谢谢你! (2认同)