26

一般来说,mean_squared_error越小越好。

当我使用 sklearn 指标包时,它在文档页面中显示:http ://scikit-learn.org/stable/modules/model_evaluation.html

所有 scorer 对象都遵循较高返回值优于较低返回值的约定。因此,衡量模型和数据之间距离的指标,如 metrics.mean_squared_error,可作为 neg_mean_squared_error 使用,它返回指标的否定值。

在此处输入图像描述

但是,如果我去:http ://scikit-learn.org/stable/modules/generated/sklearn.metrics.mean_squared_error.html#sklearn.metrics.mean_squared_error

它说它是Mean squared error regression loss,没有说它被否定。

如果我查看了源代码并检查了那里的示例:https ://github.com/scikit-learn/scikit-learn/blob/a24c8b46/sklearn/metrics/regression.py#L183它是正常的mean squared error,即越小越好。

所以我想知道我是否遗漏了有关文档中被否定部分的任何内容。谢谢!

4

3 回答 3

50

实际的功能"mean_squared_error"没有任何关于负面的部分。但是当您尝试“neg_mean_squared_error”时实现的函数将返回分数的否定版本。

请检查源代码以了解其在源代码中的定义:

neg_mean_squared_error_scorer = make_scorer(mean_squared_error,
                                        greater_is_better=False)

观察参数如何greater_is_better设置为False.

现在所有这些分数/损失都用于各种其他事物,如 cross_val_score、cross_val_predict、GridSearchCV 等。例如,在“accuracy_score”或“f1_score”的情况下,分数越高越好,但在损失(错误)的情况下,分数越低分数更好。为了以相同的方式处理它们,它返回负数。

因此,此实用程序用于以相同方式处理分数和损失,而无需更改特定损失或分数的源代码。

所以,你没有错过任何东西。您只需要注意要使用损失函数的场景。如果您只想计算 mean_squared_error 您只能使用mean_squared_error。但是如果你想用它来调整你的模型,或者使用 Scikit 中的实用程序进行 cross_validate,请使用'neg_mean_squared_error'.

也许添加一些细节,我会解释更多。

于 2018-01-14T02:45:46.647 回答
1

这是实现您自己的评分对象 [ 1 ] 的约定。它必须是正的,因为您可以创建一个非损失函数来计算自定义的正分数。这意味着通过使用损失函数(对于分数对象),您必须获得负值。

损失函数的范围是:(optimum) [0. ... +] (e.g. unequal values between y and y')。例如检查均方误差的公式,它总是正的:

均方误差

图片来源:http ://scikit-learn.org/stable/modules/model_evaluation.html#mean-squared-error

于 2018-01-13T23:31:33.887 回答
0

这正是我在我的代码中寻找的东西,我试图破译和澄清 rmse 报告以理解我的数据。

就我而言,我正在使用这种方法来计算 rmse。我应该如何阅读报告?更高更好还是相反?

def rmsle_cv(model):
    kf = KFold(n_folds, random_state=42).get_n_splits(train)
    rmse= np.sqrt(-cross_val_score(model, train, y_train, scoring="neg_mean_squared_error", cv = kf))
    return(rmse)


def rmsle(y, y_pred):
    return np.sqrt(mean_squared_error(y, y_pred))

就我而言,我得到了这些结果

Lasso score(cv): 0.1176 (0.0068)
ElasticNet score(cv): 0.1177 (0.0068)
Ridge(01): 0.1270 (0.0097)
Gradient Boosting score(cv): 0.1443 (0.0109)
BayRidge(01): 0.1239 (0.0079)
Kernel Ridge score(cv): 0.1210 (0.0068)
Xgboost score(cv): 0.1177 (0.0060)
LGBM score(cv): 0.1158 (0.0064)
于 2020-09-04T11:36:56.853 回答