首页 > 解决方案 > 如何使用 Python 将“文本文档”与“球形 k 均值”聚类?

问题描述

我已经完成了传统的 k-means 文本聚类。但是,现在,我需要将我的程序修改为“球形 k 均值文本聚类”,但还没有成功。

我在网站上搜索了解决方案,但仍然无法成功修改我的程序。以下是对我的项目有帮助的资源,但我仍然无法找到方法。

  1. https://github.com/jasonlaska/spherecluster
  2. https://github.com/khyatith/Clustering-newsgroup-dataset
  3. Python中的球形k-means实现

这是我传统的 K-means 程序:

from sklearn.feature_extraction.text import TfidfVectorizer
from sklearn.cluster import KMeans
from sklearn.metrics import adjusted_rand_score
from sklearn.externals import joblib #store model

vectorizer = TfidfVectorizer(stop_words='english')
X = vectorizer.fit_transform(tag_document) //tag_document is a list that contains many strings

true_k = 3 //assume that i want to have 3 clusters
model = KMeans(n_clusters=true_k, init='k-means++', max_iter=100, n_init=1)
model.fit(X)

#store
 joblib.dump(model,'save/cluster.pkl')

#restore
clu2 = joblib.load('save/cluster.pkl')


order_centroids = model.cluster_centers_.argsort()[:, ::-1]
terms = vectorizer.get_feature_names()

我希望使用“球形 k 均值聚类”对文本文档进行聚类。

标签: python-3.xk-meansspherical-kmeans

解决方案


首先,当两个相似文本之间的余弦距离很小时,您需要检查您的文本是否相似。之后,您可以对向量进行归一化并使用 kmeans 进行聚类。

我做了这样的事情:

k = 20
kmeans = KMeans(n_clusters=k,init='random', random_state=0)
normalizer = Normalizer(copy=False)
sphere_kmeans = make_pipeline(normalizer, kmeans)

sphere_kmeans = sphere_kmeans.fit_transform(word2vec-tfidf-vectors)

推荐阅读