Построить и визуализировать результаты кластеризации в виде сетевого графика - PullRequest
0 голосов
/ 06 ноября 2018

Я экспериментирую с различными алгоритмами кластеризации и метриками расстояния строк в Python с конечной целью кластеризации списка строк в соответствии с различными метриками расстояния, такими как Левенштейн, Яро и т. Д. (Каждая строка обычно содержит 1 или 2 слова) .

Я создал код для вычисления расстояний между строками в соответствии с различными метриками расстояний (используя пакет с медузами) и для их кластеризации с помощью различных алгоритмов, предоставляемых пакетом sklearn.cluster. Вот пример кода для расстояния Jaro и кластеризации MeanShift:

tokens = np.array(["test1", "test2", "test3", "cat", "cat food", "apple", "apple pie"])

distances = -1 * np.array([[jellyfish.jaro_distance(w1, w2) for w1 in tokens] for w2 in tokens])

meanshift = sklearn.cluster.MeanShift()
meanshift.fit(distances)

clusters = dict()
key = 0
for cluster_id in np.unique(meanshift.labels_):
    cluster = np.unique(tokens[np.nonzero(meanshift.labels_ == cluster_id)])
    clusters[key] = cluster.tolist()
    key += 1

plot_clusters(clusters, ...)

Теперь я хотел бы построить / визуализировать / сохранить результаты кластеризации, предпочтительно в виде сетевого графика, подобного этому [1]. Я был бы счастлив с простой визуализацией, которая позволяет легко видеть (и считать) различные кластеры. Вот почему я строю просто словарь с элементами кластера. Однако было бы неплохо, если бы при визуализации учитывалось расстояние между точками данных, рассчитанное заранее. В любом случае для меня все будет хорошо. Я просто хочу, чтобы некоторые приятные визуализации сопровождали анализ реальных кластеров.

У кого-нибудь есть идеи или указания, как это решить? Любая помощь будет высоко ценится!

Спасибо!

[1] https://www.kdnuggets.com/wp-content/uploads/k-means-datasci.jpg

Отказ от ответственности: я новичок в python и в машинном обучении в целом

1 Ответ

0 голосов
/ 06 ноября 2018

Пока еще не показаны расстояния, но вы можете сделать какой-нибудь цветной разброс, как

import matplotlib.pyplot as plt
from matplotlib.pyplot import cm

plt.figure()
clustercount = len(clusters)
color=iter(cm.rainbow(np.linspace(0,1,clustercount)))

for cl in clusters:    
    c=next(color)
    x = # x data of your cluster here
    y = # y data of your cluster here
    label = # label of your cluster here

    plt.scatter(x, y, color=c, label=label)

plt.xlabel('X');
plt.ylabel('Y');
plt.legend(loc=2);
plt.show()

Это позволит визуализировать кластеры разных цветов, чтобы вы могли их легко увидеть и сосчитать

Возможно, вы можете получить доступ к кластерным центрам через средствоhift.cluster_centers_. Если это так, вы можете нарисовать их тоже со статическим цветом, чтобы визуализировать расстояния.

...