【问题标题】:kmeans cluster number does not match with k valuekmeans 簇数与 k 值不匹配
【发布时间】:2019-11-06 00:10:15
【问题描述】:

当我只定义 3 个集群时,基于 this article 的代码按预期工作。但是当我改变集群的数量时,我并没有得到相同数量的集群。

from matplotlib import image as img
from matplotlib import pyplot as plt
import pandas as pd

image = img.imread("my_logo1.jpg")
image.shape

r = []
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 kmeans
cluster_centers, distortion = kmeans(df[["red", "green", "blue"]], 7)

print(cluster_centers)

返回的集群中心只有 3 个,预计 7 个

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

【问题讨论】:

  • 你的python版本是多少?
  • # Python 3.7.1 # scipy 1.2.1
  • 当我选择彩色图像时,它会按预期工作。但是当我选择只有 1 或 2 种颜色的简单图像(例如 google 徽标)时,kmeans 无法创建超过 3/4 的集群。听起来合乎逻辑,但需要确认。

标签: python python-3.x machine-learning scipy k-means


【解决方案1】:

阅读kmeans()函数的源码,可以注意到一个支持函数_kmeans()的使用,在这里可以找到:

code_book = code_book[has_members]

has_members 是一个布尔数组,指示哪些集群有成员,来自_vq.update_cluster_means()

简而言之,当您指定簇数k 时,算法会返回一组具有最低失真的质心(至多 k)。在 K-means 的更新步骤中,空簇被简单地删除。

【讨论】:

    猜你喜欢
    • 2011-07-27
    • 2021-03-03
    • 2012-06-19
    • 1970-01-01
    • 2012-10-02
    • 2014-05-09
    • 1970-01-01
    • 2014-02-20
    • 2017-10-13
    相关资源
    最近更新 更多