TfIdf 矩阵 returns BernoulliNB 的特征数量错误
TfIdf matrix returns wrong number of features for BernoulliNB
使用 python 库 sklearn,我尝试从训练集中提取特征并用该数据拟合 BernoulliNB 分类器。
训练完分类器后,我想预测(分类)一些新的测试数据。
不幸的是我得到这个错误:
Traceback (most recent call last):
File "sentiment_analysis.py", line 45, in <module> main()
File "sentiment_analysis.py", line 41, in main
prediction = classifier.predict(tfidf_data)
File "\Python27\lib\site-packages\sklearn\naive_bayes.py", line 64, in predict
jll = self._joint_log_likelihood(X)
File "\Python27\lib\site-packages\sklearn\naive_bayes.py", line 724, in _joint_log_likelihood
% (n_features, n_features_X))
ValueError: Expected input with 4773 features, got 13006 instead
这是我的代码:
#Train the Classifier
data,target = load_file('validation/validation_set_5.csv')
tf_idf = preprocess(data)
classifier = BernoulliNB().fit(tf_idf, target)
#Predict test data
count_vectorizer = CountVectorizer(binary='true')
test = count_vectorizer.fit_transform(test)
tfidf_data = TfidfTransformer(use_idf=False).fit_transform(test)
prediction = classifier.predict(tfidf_data)
这就是您出现此错误的原因:
test = count_vectorizer.fit_transform(test)
tfidf_data = TfidfTransformer(use_idf=False).fit_transform(test)
你应该在这里只使用安装在火车组上的旧变压器(CountVectorizer 和 TfidfTransformer 是你的变压器)。
fit_transform
意味着您将这些变换器安装在新的集合上,丢失所有关于旧拟合的信息,然后使用此变换器变换 'test'(在新样本上学习,并具有不同的特征集)。因此它 returns 测试集转换为新的特征集,与训练集中使用的旧特征集不兼容。要解决此问题,您应该在训练集上安装的旧变压器上使用变换(而不是 fit_transform)方法。
你应该这样写:
test = old_count_vectorizer.transform(test)
tfidf_data = old_tfidf_transformer.transform(test)
使用 python 库 sklearn,我尝试从训练集中提取特征并用该数据拟合 BernoulliNB 分类器。
训练完分类器后,我想预测(分类)一些新的测试数据。 不幸的是我得到这个错误:
Traceback (most recent call last):
File "sentiment_analysis.py", line 45, in <module> main()
File "sentiment_analysis.py", line 41, in main
prediction = classifier.predict(tfidf_data)
File "\Python27\lib\site-packages\sklearn\naive_bayes.py", line 64, in predict
jll = self._joint_log_likelihood(X)
File "\Python27\lib\site-packages\sklearn\naive_bayes.py", line 724, in _joint_log_likelihood
% (n_features, n_features_X))
ValueError: Expected input with 4773 features, got 13006 instead
这是我的代码:
#Train the Classifier
data,target = load_file('validation/validation_set_5.csv')
tf_idf = preprocess(data)
classifier = BernoulliNB().fit(tf_idf, target)
#Predict test data
count_vectorizer = CountVectorizer(binary='true')
test = count_vectorizer.fit_transform(test)
tfidf_data = TfidfTransformer(use_idf=False).fit_transform(test)
prediction = classifier.predict(tfidf_data)
这就是您出现此错误的原因:
test = count_vectorizer.fit_transform(test)
tfidf_data = TfidfTransformer(use_idf=False).fit_transform(test)
你应该在这里只使用安装在火车组上的旧变压器(CountVectorizer 和 TfidfTransformer 是你的变压器)。
fit_transform
意味着您将这些变换器安装在新的集合上,丢失所有关于旧拟合的信息,然后使用此变换器变换 'test'(在新样本上学习,并具有不同的特征集)。因此它 returns 测试集转换为新的特征集,与训练集中使用的旧特征集不兼容。要解决此问题,您应该在训练集上安装的旧变压器上使用变换(而不是 fit_transform)方法。
你应该这样写:
test = old_count_vectorizer.transform(test)
tfidf_data = old_tfidf_transformer.transform(test)