对于kmeans聚类,我使用TfidfVectorizer时总是出错。如何正确使用scikit-learn进行文本聚类
有3种情况:
- 我用分词器参数TfidfVectorizer定制标记化进程对我的数据集。这里是我的代码:
`
vectorizer = TfidfVectorizer(stop_words=stops,tokenizer=tokenize)
X = vectorizer.fit_transform(titles)
`
但是我得到这个错误:
ValueError: empty vocabulary; perhaps the documents only contain stop words
- 我做一个词汇由每个术语组成的术语和文档频率是词法化的结果,因此代码如下所示:
vectorizer = TfidfVectorizer(stop_words=stops,tokenizer=tokenize,vocabulary=vocab)
,但我得到了另一个新的错误:
ValueError: Vocabulary contains repeated indices.
最后,我删除标记生成器和词汇参数。代码变成这样:
`
vectorizer = TfidfVectorizer(stop_words=stops)
X = vectorizer.fit_transform(titles)
terms = vectorizer.get_feature_names()
true_k = 8
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]
for i in range(true_k):
print "Cluster %d:" % i,
for ind in order_centroids[i, :10]:
print ' %s' % terms[ind],
print
`
嘛,程序成功运行,但聚类结果是这样的:
`
Cluster 0: bangun, rancang, lunak, perangkat, aplikasi, berbasis, menggunakan, service, sistem, pembangunan,
Cluster 1: sistem, aplikasi, berbasis, web, menggunakan, pembuatan, mobile, informasi, teknologi, pengembangan,
Cluster 2: android, berbasis, aplikasi, perangkat, rancang, bangun, bergerak, mobile, sosial, menggunakan,
Cluster 3: implementasi, algoritma, menggunakan, klasifikasi, data, game, fuzzy, vector, support, machine,
Cluster 4: metode, menggunakan, video, penerapan, implementasi, steganografi, pengenalan, berbasis, file, analisis,
Cluster 5: citra, segmentasi, menggunakan, implementasi, metode, warna, tekstur, kembali, berwarna, temu,
Cluster 6: jaringan, tiruan, protokol, voip, syaraf, saraf, menggunakan, implementasi, kinerja, streaming,
Cluster 7: studi, kasus, its, informatika, teknik, sistem, informasi, data, surabaya, jurusan,
`
某些术语被聚类为多个群集,如术语data
被放置到群集3和群集7.
您能告诉我如何正确使用tfidfvectorizer和KMeans吗?你的帮助是我的幸福:)
什么是'titles','vocab'? “你能告诉我如何恰当地使用tfidfvectorizer和KMeans吗?”这个问题太模糊了。你可以写出吨和吨的线。 – MMF
你的结果没有问题。一个词可能发生在具有不同概率的不同聚类中。 – Ash