如何修复 OneClassSVM 和 GridSearchCV 的错误“对于多指标评分”

Man*_*ani 7 python machine-learning scikit-learn gridsearchcv

我尝试使用 OnClassSVM 进行异常检测,并使用 GridSearchCV() 调整其参数,如下所示:

我已经搜索了许多网站,包括https://stackoverflow.com/但找不到适合我的场景的任何正确解决方案。代码在这里:

nus = [0.001, 0.01, 0.1, 1]
gammas = [0.001, 0.01, 0.1, 1]
scorers = {
  'precision_score': make_scorer(precision_score),
  'recall_score': make_scorer(recall_score),
 'accuracy_score': make_scorer(accuracy_score)
}

tuned_parameters = {'C': [1, 10, 100, 1000], 'kernel' : ['rbf','linear'], 
'gamma' : gammas, 'nu': nus}
tuned_ocsvm = svm.OneClassSVM()
ocsvm = GridSearchCV(estimator=svm.OneClassSVM(), 
param_grid=tuned_parameters, scoring=scorers,refit='false')
Run Code Online (Sandbox Code Playgroud)

但它给我的错误如下

对于多指标评分,参数 refit 必须设置为记分器键或可调用项,以使用整个数据上的最佳参数设置重新拟合估计器,并使 best_* 属性可用于该指标。如果不需要,则 refit 应显式设置为 False。“假”已通过

小智 5

GridSearchCV 的 doc上,refit定义为:

refit :布尔值、字符串或可调用值,默认=True

使用整个数据集上找到的最佳参数重新拟合估计器。对于多个指标评估,这需要是一个表示评分器的字符串,该评分器将用于找到最后重新拟合估计器的最佳参数。如果在选择最佳估计器时除了最大分数之外还有其他考虑因素,则可以将 refit 设置为一个函数,该函数在给定 cv_results_ 的情况下返回所选的 best_index_。重新拟合的估计器可在 best_estimator_ 属性中使用,并允许直接在此 GridSearchCV 实例上使用预测。此外,对于多个指标评估,属性 best_index_、best_score_ 和 best_params_ 仅在设置了 refit 时才可用,并且所有属性都将由该特定评分器确定。如果 refit 可调用,则不会返回 best_score_。请参阅评分参数以了解有关多重指标评估的更多信息。

如果您不想重新安装估计器,您可以设置refit=False(作为布尔值)。另一方面,要使用其中一个记分器重新安装估计器,您可以refit='precision_score'这样做。