Ошибка конвейера: «AttributeError: у объекта« ColumnTransformer »нет атрибута« _feature_names_in »» - PullRequest
2 голосов
/ 05 марта 2020

Я пытаюсь использовать scikitlearn для прогнозирования новых данных, используя объект конвейера, который я обучал еще в феврале. С пятницы, 28 февраля, функция прогнозирования больше не работает для моего объекта конвейера, ссылаясь на ошибку:

>>> df = pd.read_csv('test_df_for_example.csv')
>>> mdl = joblib.load('split_0_model.pkl')
>>> mdl.predict(df)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/sklearn/utils/metaestimators.py", line 116, in <lambda>
    out = lambda *args, **kwargs: self.fn(obj, *args, **kwargs)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/sklearn/pipeline.py", line 419, in predict
    Xt = transform.transform(Xt)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/sklearn/compose/_column_transformer.py", line 587, in transform
    self._validate_features(X.shape[1], X_feature_names)
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/site-packages/sklearn/compose/_column_transformer.py", line 411, in _validate_features
    if ((self._feature_names_in is None or feature_names is None)
AttributeError: 'ColumnTransformer' object has no attribute '_feature_names_in'

Я использую виртуальные машины Microsoft Azure для этого прогнозирования (хотя приведенный выше код Я работал на своем локальном компьютере), поэтому работа с версиями модулей затруднена, и большую часть времени я вынужден использовать последние версии пакетов. Я считаю, что эта ошибка происходит из новой версии scikitlearn 0.22.2.post1, которую я использую.

У меня есть пример CSV с данными тестирования здесь

Файл модели маринованный с помощью joblib здесь

и код для воспроизведения ошибки здесь

И файл среды yaml здесь

Можно ли как-нибудь обновить мою модель, чтобы эта ошибка не возникала?

Спасибо! Kristine

Ответы [ 2 ]

1 голос
/ 06 марта 2020

Я рекомендую закреплять версии в вашем YAML, особенно с учетом скорости выпусков в пространстве azureml.

Поэтому решение проблемы перехода на sklearn до последней стабильной сборки для вашего варианта использования может быть решением, или обновление остальных вашей базы кода для размещения новой версии sklearn.

Пример.

 - pip:
    - sklearn==0.20.0
    - azureml-sdk==1.0.85
    - etc...
0 голосов
/ 06 марта 2020

Благодаря Nema, используя следующие спецификации, я могу использовать предыдущую версию scikit-learn для загрузки моей модели:

- scikit-learn<=0.21.3
- azureml-sdk<=1.0.83
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...