С кластеризацией нет никакого осмысленного порядка или сравнения между кластерами, мы просто находим группы наблюдений, которые имеют что-то общее. Нет причин называть один кластер «синим кластером» против «красного кластера» (если у вас нет дополнительных знаний о домене). По этой причине sklearn будет произвольно назначать номера каждому кластеру.
print(clustering.labels_)
[1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1
1 1 1 1 1 1 1 1 1 1 1 1 1 0 0 0 2 2 2 0 2 2 2 2 2 2 2 2 0 2 2 2 2 0 2 2 2
2 0 0 0 2 2 2 2 2 2 2 0 0 2 2 2 2 2 2 2 2 2 2 2 2 2 0 2 0 0 0 0 2 0 0 0 0
0 0 2 2 0 0 0 0 2 0 2 0 2 0 0 2 0 0 0 0 0 0 2 2 0 0 0 2 0 0 0 2 0 0 0 2 0
0 2]
Ярлыки могли бы с такой же легкостью заменить все 1 на 0 и 0 на 1, и это все равно будет тот же набор кластеров .
В этом случае нумерация не соответствует нумерации, которая использовалась в основной истине, поэтому цвета не совпадают, когда мы смотрим на сгенерированные кластеры с основной истиной, поэтому мы переназначаем они используют np.choose
, как показано в примере:
relabel = np.choose(clustering.labels_,[2,0,1]).astype(np.int64)
Это берет текущие метки и меняет 0 на 2 (потому что индекс 0 равен 2), 1 на 0 и 2 на 1. Это тот же набор кластеров, но мы изменили (произвольную) маркировку, чтобы соответствовать.
Чтобы ответить на ваш вопрос о том, как узнать, когда они совпадают или нет: кластеризация является формой обучения без учителя, что означает обычно у вас вообще не будет основополагающей правды, и вам не о чем беспокоиться о совпадении. В этом примере мы знали основную правду и могли видеть, что кластеры не совпадают друг с другом, поэтому мы можем выбрать соответствие цветов, если захотим. Мы также можем не делать этого, так как они в любом случае являются одними и теми же кластерами, но вам может показаться, что так проще визуализировать.