具有计分功能和调整参数的GridSearchCV

问题描述

我的问题似乎与this one类似,但那里没有可靠的答案。

我正在进行多类多标签分类,为此,我定义了自己的评分器。但是,为了拥有refit参数并在最后获得模型的最佳参数,我们需要引入一个得分工具进行修正。如果这样做,我将得到错误missing 1 required positional argument: 'y_pred'。 y_pred应该是拟合的结果。但是不确定这个问题来自哪里以及如何解决。

下面是代码:

scoring = {'roc_auc_score':make_scorer(roc_auc_score),'precision_score':make_scorer(precision_score,average='samples'),'recall_score':make_scorer(recall_score,average='samples')}

params = {'estimator__n_estimators': [500,800],'estimator__max_depth': [10,50],}

model = xgb.XGBClassifier(n_jobs=4)
model = MultiOutputClassifier(model)

cls = GridSearchCV(model,params,cv=3,refit=make_scorer(roc_auc_score),scoring = scoring,verbose=3,n_jobs= -1)

model = cls.fit(x_train_ups,y_train_ups)
print(model.best_params_)

解决方法

您应使用doc?: any,即词典中计分器的名称。来自the docs

对于多指标评估,该值必须是refit="roc_auc_score",表示计分器,该计分器将用于查找最佳参数以最终重新拟合估计器。

str使用可调用对象的目的有所不同:可调用对象应使用refit字典并返回cv_results_。这就解释了错误消息:sklearn试图将best_index_传递给您的auc评分器函数,但是该函数应采用参数cv_results_y_true

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...