Sklearn:有没有办法为管道定义特定的分数类型?

Posted

技术标签:

【中文标题】Sklearn:有没有办法为管道定义特定的分数类型?【英文标题】:Sklearn: Is there a way to define a specific score type to pipeline? 【发布时间】:2020-08-13 01:47:06 【问题描述】:

我可以这样做:

model=linear_model.LogisticRegression(solver='lbfgs',max_iter=10000)
kfold = model_selection.KFold(n_splits=number_splits,shuffle=True, random_state=random_state)
scalar = StandardScaler()
pipeline = Pipeline([('transformer', scalar), ('estimator', model)])
results = model_selection.cross_validate(pipeline, X, y, cv=kfold, scoring=score_list,return_train_score=True)

其中 score_list 可以类似于 ['accuracy','balanced_accuracy','precision','recall','f1']

我也可以这样做:

kfold = model_selection.KFold(n_splits=number_splits,shuffle=True, random_state=random_state)
scalar = StandardScaler()
pipeline = Pipeline([('transformer', scalar), ('estimator', model)])
for i, (train, test) in enumerate(kfold.split(X, y)):
    pipeline.fit(self.X[train], self.y[train])
    pipeline.score(self.X[test], self.y[test])

但是,我无法在最后一行更改管道的分数类型。我该怎么做?

【问题讨论】:

【参考方案1】:

score 方法总是 accuracy 用于分类,r2 得分用于回归。没有参数可以改变它。它来自ClassifiermixinRegressorMixin

相反,当我们需要其他评分选项时,我们必须从sklearn.metrics 导入它,如下所示。

from sklearn.metrics import balanced_accuracy

y_pred=pipeline.score(self.X[test])
balanced_accuracy(self.y_test, y_pred)

【讨论】:

以上是关于Sklearn:有没有办法为管道定义特定的分数类型?的主要内容,如果未能解决你的问题,请参考以下文章

Sklearn:有没有办法调试管道?

将额外参数传递给 sklearn 管道中的自定义评分函数

使用带有 RBM 和 MLP Sklearn 的管道

在 sklearn 中使用网格搜索和管道获得正确的交叉验证分数

sklearn 管道有没有办法在网格搜索期间进行有步骤和无步骤的训练?我可以删除步骤,但如何将其传递给 GridSearchCV?

Scikit-learn 管道类型错误:zip 参数 #2 必须支持迭代