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