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

时间:2019-09-18 06:30:26

标签: 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')

但这给了我以下错误

  

对于多指标计分,必须将参数refit设置为记分器键或可调用参数,以使估算器在整个数据上具有最佳参数设置,并使best_ *属性可用于该指标。如果不需要这样做,则应将refit显式设置为False。传递了“假”

1 个答案:

答案 0 :(得分:0)

GridSearchCV's doc上,refit定义为:

  

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

     

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

如果您不想调整估计量,则可以设置refit=False(为布尔值)。另一方面,要使评估者适合其中一个得分者,可以执行refit='precision_score'