首页 > 解决方案 > 更新 scikit-learn:“SVC”对象没有属性“_probA”?

问题描述

我们更新到 Python 3.8.2 并且 scikit-learn 出现错误:

Traceback (most recent call last):
File "manage.py", line 16, in <module>
execute_from_command_line(sys.argv)
File "/home/ubuntu/myWebApp/.venv/lib/python3.8/site-packages/django/core/management/__init__.py", line 381, in execute_from_command_line
utility.execute()
File "/home/ubuntu/myWebApp/.venv/lib/python3.8/site-packages/django/core/management/__init__.py", line 375, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/home/ubuntu/myWebApp/.venv/lib/python3.8/site-packages/django/core/management/base.py", line 316, in run_from_argv
self.execute(*args, **cmd_options)
File "/home/ubuntu/myWebApp/.venv/lib/python3.8/site-packages/django/core/management/base.py", line 353, in execute
output = self.handle(*args, **options)
File "/home/ubuntu/myWebApp/server_modules/rss_ml_score/management/commands/rssmlscore.py", line 22, in handle
run.build_and_predict(days=options['days'], rescore=options['rescore'])
File "/home/ubuntu/myWebApp/server_modules/rss_ml_score/utils/run.py", line 96, in build_and_predict
predict_all(filename)
File "/home/ubuntu/myWebApp/server_modules/rss_ml_score/models/predict_model.py", line 135, in predict_all
voting_predicted_hard, voting_predicted_soft = predict_from_multiple_estimator(fitted_estimators, X_predict_list,
File "/home/ubuntu/myWebApp/server_modules/rss_ml_score/models/train_model.py", line 66, in predict_from_multiple_estimator
pred_prob1 = np.asarray([clf.predict_proba(X)
File "/home/ubuntu/myWebApp/server_modules/rss_ml_score/models/train_model.py", line 66, in <listcomp>
pred_prob1 = np.asarray([clf.predict_proba(X)
File "/home/ubuntu/myWebApp/.venv/lib/python3.8/site-packages/sklearn/svm/_base.py", line 662, in _predict_proba
if self.probA_.size == 0 or self.probB_.size == 0:
File "/home/ubuntu/myWebApp/.venv/lib/python3.8/site-packages/sklearn/svm/_base.py", line 759, in probA_
return self._probA
AttributeError: 'SVC' object has no attribute '_probA'

除了 sci-kit learn 访问 _probA 之外,我还需要使用其他库吗?

更新以回应评论:

引发错误的代码行是:

pred_prob1 = np.asarray([clf.predict_proba(X)
                         for clf, X in zip(estimators, X_list)])

...在以下位置调用此行_base.py

def _predict_proba(self, X):
    X = self._validate_for_predict(X)
    if self.probA_.size == 0 or self.probB_.size == 0:

...调用这条线,也在_base.py

@property
def probA_(self):
    return self._probA

...引发错误:

AttributeError:“SVC”对象没有属性“_probA”

所有这一切都运行了好几个月,但目前无法正常工作,即使在更新到最新版本后也是如此scikit-learn.

标签: pythonscikit-learn

解决方案


事实证明,我必须使用与用于训练我们目前拥有的模型的相同版本的 sci-kit (scikit-learn==0.21.2)。更高版本的 scikit 不适用于我们现有的代码/模型。如果我们想升级 scikit,我们必须用新版本的 scikit 重新训练我们的模型。


推荐阅读