Номер кластера kmeans не совпадает со значением k - PullRequest
1 голос
/ 24 июня 2019

код на основе эта статья работает, как и ожидалось, когда я определяю только 3 кластера.Но когда я изменяю количество кластеров, я не получаю обратно равное количество кластеров.

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.

1 Ответ

2 голосов
/ 25 июня 2019

Чтение исходного кода для функции kmeans(), вы можете отметить использование вспомогательной функции _kmeans(), где вы можете найти:

code_book = code_book[has_members]

has_members - логический массив, указывающий, какие кластеры имеют членов, в результате _vq.update_cluster_means().

Короче говоря, когда вы указываете количество кластеров k, алгоритм возвращает набор центроидов ( не более k) с наименьшим видимым искажением. Пустые кластеры просто удаляются на этапе обновления K-средних.

...