Как распечатать данные каждого кластера в алгоритме агломерационной кластеризации в python - PullRequest
0 голосов
/ 26 марта 2020

Я новичок в инструменте машинного обучения в python, я пишу этот код агломерационной иерархической кластеризации, но я не знаю, есть ли способ напечатать данные каждого кластера графиков. вход алгоритма - 5 чисел (0,1,2,3,4). В дополнение к рисованию кластеров, мне нужно напечатать значение каждого кластера отдельно что-то вроде этого cluster1 = [1,2,4] cluster2 = [ 0,3]

обновление: Я хочу получить данные, нарисованные и раскрашенные в соответствии с этой строкой и другими строками plt.scatter(points[y_hc==0,0], points[y_hc==0,1],s=100,c='cyan'), в соответствии с этим кодом эти цифры (1,2 , 4) находятся в одном кластере и имеют одинаковый цвет, а (0,3) в кластере 2, поэтому мне нужно распечатать эти данные (данные каждого кластера) в терминале. этот код просто рисует данные.

import numpy as np 
import matplotlib.pyplot as plt 
from sklearn.datasets import make_blobs
dataset= make_blobs(n_samples=5, n_features=2,centers=4, cluster_std=1.6, random_state=50)
points= dataset[0]

import scipy.cluster.hierarchy as sch 
from sklearn.cluster import AgglomerativeClustering

dendrogram = sch.dendrogram(sch.linkage(points,method='ward'))
plt.scatter(dataset[0][:,0],dataset[0][:,1])
hc = AgglomerativeClustering(n_clusters=4, affinity='euclidean',linkage='ward')
y_hc= hc.fit_predict(points)
plt.scatter(points[y_hc==0,0], points[y_hc==0,1],s=100,c='cyan')
plt.scatter(points[y_hc==1,0], points[y_hc==1,1],s=100,c='yellow')
plt.scatter(points[y_hc==2,0], points[y_hc==2,1],s=100,c='red')
plt.scatter(points[y_hc==3,0], points[y_hc==3,1],s=100,c='green')
plt.show()

1 Ответ

0 голосов
/ 26 марта 2020

Проведя некоторое исследование, кажется, что нет простого способа получить метки кластера из функции scipy dendrogram.

Ниже приведено несколько опций / обходных путей.

Вариант один

Используйте функции scipy linkage и fcluster для выполнения кластеризации и получения меток:

Z = sch.linkage(points, 'ward') # Note 'ward' is specified here to match the linkage used in sch.dendrogram.
labels = sch.fcluster(Z, t=10, criterion='distance') # t chosen to return two clusters.

# Cluster 1
np.where(labels == 1)

Выходы: (array([0, 3]),)

# Cluster 2
np.where(labels == 2)

Выходы: (array([1, 2, 4]),)

Вариант второй

Измените текущее использование sklearn, чтобы получить два кластера:

hc = AgglomerativeClustering(n_clusters=2, affinity='euclidean',linkage='ward') # Again, 'ward' is specified here to match the linkage in sch.dendrogram.
y_hc = hc.fit_predict(points)

# Cluster 1
np.where(y_hc == 0)

Выходы : (array([0, 3]),)

# Cluster 2
np.where(y_hc == 1)

Выходы: (array([1, 2, 4]),)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...