1

我有文本變量中的單詞列表及其標籤。我喜歡製作能夠預測新輸入文本標籤的分類器。使用Python的文本分類

我想在Python中使用scikit-learn軟件包來使用SVM模型。

我意識到,文本需要轉換爲矢量形式,所以我想TfidfVectorizer和CountVectorizer。

這是到目前爲止我的代碼使用TfidfVectorizer:

from sklearn import svm 
from sklearn.feature_extraction.text import TfidfVectorizer 

label = ['organisasi','organisasi','organisasi','organisasi','organisasi','lokasi','lokasi','lokasi','lokasi','lokasi'] 
text = ['Partai Anamat Nasional','Persatuan Sepak Bola', 'Himpunan Mahasiswa','Organisasi Sosial','Masyarakat Peduli','Malioboro','Candi Borobudur','Taman Pintar','Museum Sejarah','Monumen Mandala'] 

vectorizer = TfidfVectorizer(min_df=1) 

X = vectorizer.fit_transform(text) 
y = label 

klasifikasi = svm.SVC() 

klasifikasi = klasifikasi.fit(X,y) #training 

test_text = ['Partai Perjuangan'] 
test_vector = vectorizer.fit_transform(test_text) 

prediksi = klasifikasi.predict([test_vector]) #test 

print(prediksi) 

我也嘗試CountVectorizer上面相同的代碼。 均顯示同樣的錯誤結果:

ValueError: setting an array element with a sequence. 

如何解決這個問題呢?感謝

+0

你問如何解決一個問題,但我不能提到一個問題,問題發現任何地方 - 如此問題是什麼? – Drako

+0

您是否嘗試過'TfidfTransformer(smooth_idf = True)'而不是? –

+0

@Coldspeed它顯示一個錯誤:'TypeError:沒有支持的類型轉換:(dtype(' ytomo

回答

2

的錯誤是由於這一行:

prediksi = klasifikasi.predict([test_vector]) 

大多數scikit估計需要形狀[n_samples, n_features]的陣列。來自TfidfVectorizer的test_vector輸出已經可以用於估算器。您無需將其包裝在方括號中([])。包裝使其成爲不合適的清單。

嘗試使用這樣的:

prediksi = klasifikasi.predict(test_vector) 

但即使如此,你就會GT錯誤。因爲該行的:

test_vector = vectorizer.fit_transform(test_text) 

這裏你正在裝修中比由klasifikasi估計學到了不同的方式向量化。 fit_transform()只是撥打fit()(學習數據)然後transform()而已。對於測試數據,始終使用transform()方法,從不fit()fit_transform()

所以正確的代碼將是:

test_vector = vectorizer.transform(test_text) 
prediksi = klasifikasi.predict(test_vector) 

#Output: array(['organisasi'], dtype='|S10') 
+0

謝謝你。它真的幫助我。 – ytomo