ValueError: ошибка несоответствия feature_names в коде прогнозирования NLP - PullRequest
0 голосов
/ 17 марта 2020

РЕДАКТИРОВАТЬ: процесс завершается с ошибкой ниже 15 000 записей, а не 100 000.

Я создал и внедрил модель NLP, которая по какой-то причине работает, только когда я бросаю в нее большое количество записей для прогнозирования.

Модель была построена с использованием около 80 000 записей исторических данных. Я сохранил модель в виде файла JobLib. Когда я прошу модель сделать новые прогнозы, она отлично работает, если количество записей не превышает 15 000. Кажется, это магическое число, но я не понимаю, почему. Ниже приведен соответствующий код.

Все, что находится над этими строками, - это просто извлечение и очистка данных.

model = jl.load('ReasonPrediction.joblib')

tfidf_vect = TfidfVectorizer(analyzer='word', token_pattern=r'\w{1,}', max_features=5000)
tfidf_comments = tfidf_vect.fit_transform(LabTechComments['LabTechCommentsCombined'])

LabTechComments['ReasonEncoded'] = model.predict(tfidf_comments.tocsc())

Последняя строка вспыхивает с ошибкой «ValueError: несоответствие feature_names». Я погуглил ошибку, но то, что я нашел, не имело смысла, потому что я не строил модель. Модель построена. Я просто запускаю прогнозы для новых данных, и я не понимаю, почему я получаю эту ошибку ТОЛЬКО, если количество записей меньше 15 000. Поскольку функции превращаются в вектор, я не уверен, как это связано. Ниже приведена большая часть ошибки с обрезкой большей части вектора.

ValueError                                Traceback (most recent call last)
<ipython-input-35-ff67c5651684> in <module>
----> 1 LabTechComments['ReasonEncoded'] = model.predict(tfidf_comments.tocsc())

C:\ProgramData\Anaconda3\lib\site-packages\xgboost\sklearn.py in predict(self, data, output_margin, ntree_limit, validate_features)
    789                                                  output_margin=output_margin,
    790                                                  ntree_limit=ntree_limit,
--> 791                                                  validate_features=validate_features)
    792         if output_margin:
    793             # If output_margin is active, simply return the scores

C:\ProgramData\Anaconda3\lib\site-packages\xgboost\core.py in predict(self, data, output_margin, ntree_limit, pred_leaf, pred_contribs, approx_contribs, pred_interactions, validate_features)
   1282 
   1283         if validate_features:
-> 1284             self._validate_features(data)
   1285 
   1286         length = c_bst_ulong()

C:\ProgramData\Anaconda3\lib\site-packages\xgboost\core.py in _validate_features(self, data)
   1688 
   1689                 raise ValueError(msg.format(self.feature_names,
-> 1690                                             data.feature_names))
   1691 
   1692     def get_split_value_histogram(self, feature, fmap='', bins=None, as_pandas=True):

ValueError: feature_names mismatch: ['f0', 'f1', 'f2', 'f3', 'f4', 'f5',......]
...