将聚类结果绘制并可视化为网络图

时间:2018-11-05 22:06:10

标签: python matplotlib graph cluster-analysis networkx

我正在尝试使用Python进行各种聚类算法和字符串距离度量,最终目的是根据Levenshtein,Jaro等各种距离度量对字符串列表进行聚类(每个字符串通常包含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 :(得分:0)

它还没有显示距离,但是您可以做一些彩色的散点图,例如

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()

这将以不同的颜色可视化群集,以便您可以轻松查看和计数它们

也许您可以通过meanshift.cluster_centers_访问群集中心。如果是这样,您也可以用静态颜色绘制它们以可视化距离。