4

我曾经使用 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

4

1 回答 1

8

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

Greater_is_better : boolean, default=True score_func 是分数函数(默认),表示高是好的,还是损失函数,表示低是好的。在后一种情况下,记分器对象将对 score_func 的结果进行符号翻转。

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

def rmse(actual, predict):

    ...
    ...
    return score

rmse_score = make_scorer(rmse, greater_is_better = False)
于 2018-12-01T05:43:20.320 回答