如何使用sklearn k-means绘制数据点而不是质心?

数据挖掘 Python scikit-学习 聚类 特征提取 k-均值
2022-02-16 12:10:49

我在寻找一种方法来绘制用 k 均值聚类着色的数据点时遇到问题。

我有一个很长的字符串列表。我设法绘制了质心,但没有绘制数据点;

import matplotlib.pyplot as plt
from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.cluster import KMeans

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

true_k = 5
model = KMeans(n_clusters=true_k, init='k-means++', max_iter=100, n_init=1)
model.fit(X)
print("Top terms per cluster:")
order_centroids = model.cluster_centers_.argsort()[:, ::-1]
terms = vectorizer.get_feature_names()
for i in range(true_k):
    print("Cluster %d:" % i),
    for ind in order_centroids[i, :10]:
        print(' %s' % terms[ind]),
    print()

print("\n")

plt.scatter(order_centroids[:, 0],order_centroids[:, 1], marker="x", s=150, linewidths=5, zorder=10)
plt.show()

我希望输出是由集群着色的数据点,而不是质心

1个回答

散点图适用于二维连续数据。就像您随处可见的玩具示例一样。

但是 tfidfvectorizer 产生的数据是高维和稀疏的。

可以预料,在您绘制的任何两个维度中,几乎所有点的值都为 0。人们不会以有意义的方式将测试简单地绘制为 2d 坐标。常规的 k-means 也不能很好地工作。这些手段只是靠近在一起,并且都对应于平均停用词向量 - 不是很有用。