我在尝试使用OneClassSVM进行异常检测,并使用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必须设置为一个评分器键或一个可调用对象,以使用最佳参数设置在整个数据集上重新拟合估算器,并使该指标的最佳_*属性可用。如果不需要这样做,refit应明确设置为False。传递了’false’
回答:
在GridSearchCV的文档中,refit
被定义为:
refit : 布尔值、字符串或可调用对象,默认值=True
使用在整个数据集上找到的最佳参数重新拟合估算器。对于多指标评估,这需要是一个字符串,表示用于找到重新拟合估算器最佳参数的评分器。在选择最佳估算器时,除了最大得分之外还有其他考虑时,refit可以设置为一个函数,该函数返回给定cv_results_的选定best_index_。重新拟合的估算器在best_estimator_属性中可用,并允许直接在这个GridSearchCV实例上使用predict。对于多指标评估,如果设置了refit,属性best_index_、best_score_和best_params_将仅在这种特定评分器下确定。如果refit是可调用的,则不返回best_score_。请参阅scoring参数以了解更多关于多指标评估的信息。
如果你不想重新拟合估算器,可以设置refit=False
(作为布尔值)。另一方面,如果你想使用其中一个评分器重新拟合估算器,你可以例如设置refit='precision_score'
。