對於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