使用k-means对文本进行聚类

1、数据说明
corpus为一个list,每一项代表一个文本,每个文本为分词后的数据。

2、导入包

from sklearn.feature_extraction.text importTfidfVectorizer
from sklearn.manifold import TSNE
from sklearn.cluster import KMeans
import jieba
import matplotlib.pyplot as plt

3、使用TF-IDF特征进行聚类

tfidf_model = TfidfVectorizer().fit(corpus)
tfidf_matrix = tfidf_model.transform(corpus)
num_clusters = 10
km_cluster = KMeans(n_clusters=num_clusters, max_iter=300, n_init=40, 
                    init='k-means++',n_jobs=-1)
result = km_cluster.fit_predict(tfidf_matrix)
tfidf_weight = tfidf_matrix.toarray()

4、可视化

# 使用T-SNE算法,对权重进行降维,准确度比PCA算法高,但是耗时长
tsne = TSNE(n_components=2)
decomposition_data = tsne.fit_transform(tfidf_weight)

x = []
y = []

for i in decomposition_data:
    x.append(i[0])
    y.append(i[1])

fig = plt.figure(figsize=(10, 10))
ax = plt.axes()
plt.scatter(x, y, c=km_cluster.labels_, marker="x")
plt.xticks(())
plt.yticks(())
plt.show()

你可能感兴趣的:(使用k-means对文本进行聚类)