如何使用 sklearn 中的 GridSearchCV 设置自己的评分以进行回归?

Posted

技术标签:

【中文标题】如何使用 sklearn 中的 GridSearchCV 设置自己的评分以进行回归?【英文标题】:How to set own scoring with GridSearchCV from sklearn for regression? 【发布时间】:2019-05-03 04:54:15 【问题描述】:

我曾经使用 GridSearchCV(...scoring="accuracy"...) 进行分类模型。现在我将使用 GridSearchCV 作为回归模型并使用自己的错误函数设置评分。

示例代码:

def rmse(predict, actual):
    predict = np.array(predict)
    actual = np.array(actual)

    distance = predict - actual

    square_distance = distance ** 2

    mean_square_distance = square_distance.mean()

    score = np.sqrt(mean_square_distance)

    return score

rmse_score = make_scorer(rmse)

gsSVR = GridSearchCV(...scoring=rmse_score...)
gsSVR.fit(X_train,Y_train)
SVR_best = gsSVR.best_estimator_
print(gsSVR.best_score_)

但是,我发现它在错误分数最高时返回参数集。结果,我得到了最差的参数集和分数。在这种情况下,我怎样才能得到最好的估计器和分数?

总结:

分类 -> GridSearchCV(scoring="accuracy") -> best_estimaror...best

回归 -> GridSearchCV(scroing=rmse_score) -> best_estimator...worst

【问题讨论】:

【参考方案1】:

这在技术上是一种损失,越低越好。您可以在make_scorer 中打开该选项:

greater_is_better : boolean, default=True score_func 是否为 得分函数(默认),表示高是好的,或者是损失函数, 意味着低是好的。在后一种情况下, scorer 对象将 符号翻转 score_func 的结果。

您还需要将输入的顺序从rmse(predict, actual) 更改为rmse(actual, predict),因为这是 GridSearchCV 将传递它们的顺序。所以最终的得分手会是这样的:

def rmse(actual, predict):

    ...
    ...
    return score

rmse_score = make_scorer(rmse, greater_is_better = False)

【讨论】:

感谢您的回复!但是,在那种情况下,当 GridSearchCV.best_score_ @willPark 是的。只需反转该符号即可获得实际损失值。没有什么不同。它只是以这种方式设计的,因此单个逻辑可以处理两种类型的值(得分和损失)。

以上是关于如何使用 sklearn 中的 GridSearchCV 设置自己的评分以进行回归?的主要内容,如果未能解决你的问题,请参考以下文章

我如何使用不在 sklearn 中的估计器进行模型管道

如何根据sklearn中的预测概率对实例进行排名

如何将 SHAP 与 sklearn 中的线性 SVC 模型一起使用 Pipeline?

如何从 sklearn 中的 TF*IDF 值获取字数

如何腌制sklearn管道中的各个步骤?

如何使用 sklearn 对 CSV 文件中的多列进行一次热编码?