我有一个相当简单的NLTK和sklearn分类器(我是个彻底的新手)。
我进行常规的导入操作。
import pandas as pd
import matplotlib.pyplot as plt
from sklearn.feature_extraction.text import CountVectorizer
from nltk.tokenize import RegexpTokenizer
from sklearn.model_selection import train_test_split
from sklearn.naive_bayes import MultinomialNB
from sklearn import metrics
from sklearn.feature_extraction.text import TfidfVectorizer
我加载了数据(已经清理完毕)。这是一个非常简单的数据框,有两列。第一列是 'post_clean'
,其中包含清理过的文本,第二列是 'uk'
,其值为True
或False
。
data = pd.read_pickle('us_uk_posts.pkl')
然后我使用tfidf进行向量化并拆分数据集,接着创建模型。
tf = TfidfVectorizer()
text_tf = tf.fit_transform(data['post_clean'])
X_train, X_test, y_train, y_test = train_test_split(text_tf, data['uk'], test_size=0.3, random_state=123)
clf = MultinomialNB().fit(X_train, y_train)
predicted = clf.predict(X_test)
print("MultinomialNB Accuracy:" , metrics.accuracy_score(y_test,predicted))
显然,除非我完全错了,我有93%的准确度。
我的两个问题是:
1)如何使用此模型对一些没有已知“UK”值的项目进行分类?
2)如何使用完全独立的测试集(我没有拆分)测试此模型?
我尝试过:
new_data = pd.read_pickle('new_posts.pkl')
其中new_posts数据格式相同。
new_text_tf = tf.fit_transform(new_data['post_clean'])
predicted = clf.predict(new_X_train)
predicted
并且
new_text_tf = tf.fit_transform(new_data['post_clean'])
new_X_train, new_X_test, new_y_train, new_y_test = train_test_split(new_text_tf, new_data['uk'], test_size=1)
predicted = clf.predict(new_text_tf)
predicted
但两者都会返回 "ValueError: dimension mismatch" 的错误信息。