如何使用Python将“文本文档”与“球形k均值”聚类?

时间:2019-05-07 14:03:54

标签: python-3.x k-means spherical-kmeans

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

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

  
      
  1. https://github.com/jasonlaska/spherecluster
  2.   
  3. https://github.com/khyatith/Clustering-newsgroup-dataset
  4.   
  5. Spherical k-means implementation in Python
  6.   

这是我传统的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均值聚类”对文本文档进行聚类。

1 个答案:

答案 0 :(得分:0)

首先,当两个相似文本之间的余弦距离较小时,您需要检查文本是否相似。之后,您可以对向量进行归一化并使用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)