我的问题似乎类似于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_)
你应该使用refit="roc_auc_score"
,您字典中得分手的名字。从the docs:
对于多个指标评估,这需要是str
表示评分器,用于找到最后重新拟合估计器的最佳参数。
使用可调用的refit
有不同的目的:可调用的应该采取cv_results_
听写并返回best_index_
。这解释了错误消息:sklearn is试图通过cv_results_
到你的 auc 评分器函数,但该函数应该带有参数y_true
and y_pred
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)