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

时间:2018-12-01 03:49:02

标签: python scikit-learn regression scoring gridsearchcv

我以前使用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)->最佳估算器...最差

1 个答案:

答案 0 :(得分:3)

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

  

greater_is_better :布尔值,默认值= True 是否score_func是   得分函数(默认),意味着高是好的,或者是损失函数,   意思是低是好的。在后一种情况下,计分器对象将   签名翻转score_func的结果。

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

def rmse(actual, predict):

    ...
    ...
    return score

rmse_score = make_scorer(rmse, greater_is_better = False)