2015-10-05 3 views
1

Используя python lib sklearn, я попытался извлечь функции из набора тренировок и поместил в них классификатор BernoulliNB с этими данными.Матрица TfIdf возвращает неправильное количество функций для 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) 

ответ

1

Вот почему вы имея эту ошибку:

test = count_vectorizer.fit_transform(test) 
tfidf_data = TfidfTransformer(use_idf=False).fit_transform(test) 

Вы должны использовать здесь только старые трансформаторы (CountVectorizer и TfidfTransformer - ваши трансформаторы), установленные на поездах.

fit_transform

означает, что вы подходите эти трансформаторы на новом наборе, теряя всю информацию о старом приступе, а затем преобразовать «тест» с этим трансформатором (узнал о новых образцах, а также с различным набором функций). Таким образом, он возвращает testet, преобразованный в новый набор функций, несовместимый со старым набором функций, используемых в обучающем наборе. Чтобы исправить это, вы должны использовать метод transform (not fit_transform) на старых трансформаторах, установленный на обучающем наборе.

Вы должны написать что-то вроде:

test = old_count_vectorizer.transform(test) 
tfidf_data = old_tfidf_transformer.transform(test) 
Смежные вопросы