kmeans聚类数量与k值不匹配

基于这篇文章的代码在定义为3个聚类时按预期工作。但是当我更改聚类数量时,返回的聚类数量不等于设定的数量。

from matplotlib import image as imgfrom matplotlib import pyplot as pltimport pandas as pdimage = img.imread("my_logo1.jpg")image.shaper = []g = []b = []for line in image:    for pixel in line:        temp_r, temp_g, temp_b = pixel        r.append(temp_r / 255)        g.append(temp_g / 255)        b.append(temp_b / 255)df = pd.DataFrame({"red": r, "green": g, "blue": b})from scipy.cluster.vq import kmeanscluster_centers, distortion = kmeans(df[["red", "green", "blue"]], 7)print(cluster_centers)

返回的聚类中心只有3个,预期是7个

我期望返回的颜色数量与kmeans函数中定义的数量相同。


回答:

阅读kmeans()函数的源代码,你可以注意到使用了一个支持函数_kmeans(),其中你可以找到:

code_book = code_book[has_members]

has_members是一个布尔数组,表示哪些聚类有成员,这是由_vq.update_cluster_means()生成的。

简而言之,当你指定聚类数量k时,算法会返回一组具有最低失真度的中心点(最多 k个)。在K-means的更新步骤中,空聚类会被简单地移除。

Related Posts

在使用k近邻算法时,有没有办法获取被使用的“邻居”?

我想找到一种方法来确定在我的knn算法中实际使用了哪些…

Theano在Google Colab上无法启用GPU支持

我在尝试使用Theano库训练一个模型。由于我的电脑内…

准确性评分似乎有误

这里是代码: from sklearn.metrics…

Keras Functional API: “错误检查输入时:期望input_1具有4个维度,但得到形状为(X, Y)的数组”

我在尝试使用Keras的fit_generator来训…

如何使用sklearn.datasets.make_classification在指定范围内生成合成数据?

我想为分类问题创建合成数据。我使用了sklearn.d…

如何处理预测时不在训练集中的标签

已关闭。 此问题与编程或软件开发无关。目前不接受回答。…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注