使用 Python 进行文本分类
Text Classification Using 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.
如何解决这个问题?谢谢
错误是由于这一行:
prediksi = klasifikasi.predict([test_vector])
大多数 scikit 估计器需要一个形状为 [n_samples, n_features]
的数组。 TfidfVectorizer 的 test_vector
输出已经准备好用于估算器。您不需要将其括在方括号中([
和 ]
)。包装使它成为一个不合适的列表。
试试这样使用它:
prediksi = klasifikasi.predict(test_vector)
但即便如此你还是会报错。因为这一行:
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')
我在文本变量中有单词列表及其标签。我喜欢制作一个可以预测新输入文本标签的分类器。
我正在考虑使用 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.
如何解决这个问题?谢谢
错误是由于这一行:
prediksi = klasifikasi.predict([test_vector])
大多数 scikit 估计器需要一个形状为 [n_samples, n_features]
的数组。 TfidfVectorizer 的 test_vector
输出已经准备好用于估算器。您不需要将其括在方括号中([
和 ]
)。包装使它成为一个不合适的列表。
试试这样使用它:
prediksi = klasifikasi.predict(test_vector)
但即便如此你还是会报错。因为这一行:
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')