Kmeans 返回的集群的可视化

Posted

技术标签:

【中文标题】Kmeans 返回的集群的可视化【英文标题】:Visualisation of clusters returned by Kmeans 【发布时间】:2019-09-14 05:15:16 【问题描述】:

我使用 KMeans 进行聚类,如下图所示,但我不知道像下图所示可视化聚类来查看客户的满意度。

代码:

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.cluster import KMeans
from sklearn.metrics import adjusted_rand_score

documents = ["This little kitty came to play when I was eating at a          restaurant.",
         "Merley has the best squooshy kitten belly.",
         "Google Translate app is incredible.",
         "If you open 100 tab in google you get a smileyface.",
         "Best cat photo I've ever taken.",
         "Climbing ninja cat.",
         "Impressed with google map feedback.",
         "Key promoter extension for Google Chrome."]

  vectorizer = TfidfVectorizer(stop_words='english')
  X = vectorizer.fit_transform(documents)

 true_k = 3
 model = KMeans(n_clusters=true_k, init='k-means++',  max_iter=100,n_init=1)
 model.fit(X)

【问题讨论】:

图表和代码似乎不匹配。该图看起来像情绪分析,但代码显示了无监督聚类。你能更详细地解释你想要的结果吗? 我有一家公司的客户反馈文本..我想通过聚类来做这个图表..我现在清楚了吗? @MaximilianPeters 通过我的客户反馈中使用的文字,我希望进行此分析。 您想要 k-means 返回的 3 个分区中每个分区中样本比例的饼图吗?请注意,由于分区是无监督的,您将无法知道集群对应于哪种类型的反馈。 @Eskapp 例如,如果我们有这样的反馈:'好,享受,有趣,丰富,satisfull ...',我们可以说大多数客户都很满意 【参考方案1】:

假设您有办法知道 k-means 的哪个分区代表哪种情绪,您可以绘制如下饼图:

print(model.labels_)  # For illustration, you can see which sentence is in which cluster
# Here we get the proportions
nb_samples = [sum(model.labels_ == j) for j in range(true_k)]

# On the next line the order is RANDOM. I do NOT know which cluster represents what.
# The first label should represent samples in cluster 0, and so on
labels = 'positive', 'neutral', 'negative'
colors = ['gold', 'red', 'lightblue']  # Same size as labels

# Pie chart
plt.pie(nb_samples, labels=labels, colors=colors, autopct='%1.1f%%')
plt.axis('equal')
plt.show()

也不是,多次运行会在哪个集群代表哪个类别方面给出不同的结果。

这可以通过设置 numpy 随机种子来避免。

import numpy as np
np.random.seed(42)  # Or any other integer

【讨论】:

@Eskapp谢谢您的回复..我是文本挖掘的新手,如果我理解您的评论..在这种情况下,正面和负面只是标签..我们不知道反馈是否真的是积极的还是消极的? @anayisse2 当您使用无监督集群时,您无法知道哪个集群/分区对应于哪一类反馈,除非您自己查看属于该集群/分区的句子。这超出了编程的范围,我建议您阅读有监督和无监督方法之间的区别,因为它是机器学习的核心概念。你可以从这里开始:cs.stackexchange.com/questions/2907/…

以上是关于Kmeans 返回的集群的可视化的主要内容,如果未能解决你的问题,请参考以下文章

我如何可视化用于 kmeans 聚类的 tf-idf 向量的数据点?

可视化 K 均值结果

如何绘制图像颜色的 KMeans 饼图

使用 MatplotLib 可视化来自 SKlearn Kmeans 的稀疏输入

python - 如何在python中使没有簇质心的簇不可见?

python实现kmeans聚类