我知道我可以实现这样一个均方根误差函数:

def rmse(predictions, targets):
    return np.sqrt(((predictions - targets) ** 2).mean())

如果这个rmse函数是在某个库中实现的,可能是在scipy或scikit-learn中,我在寻找什么?


当前回答

不,有一个用于机器学习的Scikit Learn库,可以通过使用Python语言轻松地使用它。它有一个函数的均方误差,我分享下面的链接:

https://scikit-learn.org/stable/modules/generated/sklearn.metrics.mean_squared_error.html

函数名为mean_squared_error,如下所示,其中y_true将是数据元组的真实类值,y_pred将是预测值,由您使用的机器学习算法预测:

mean_squared_error (y_true y_pred)

您必须修改它以获得RMSE(通过使用Python使用sqrt函数)。这个过程在这个链接中描述: https://www.codeastar.com/regression-model-rmsd/

所以,最终代码是这样的:

从sklearn。度量导入mean_squared_error 从数学导入根号rt

RMSD = sqrt(mean_squared_error(testing_y, prediction))

打印(RMSD)

其他回答

Kaggle内核中有一个ml_metrics库,无需预安装即可使用,非常轻量级,可以通过pypi访问(使用pip install ml_metrics即可轻松快速安装):

from ml_metrics import rmse
rmse(actual=[0, 1, 2], predicted=[1, 10, 5])
# 5.507570547286102

它有一些其他有趣的指标,这些指标在sklearn中是不可用的,比如mapk。

引用:

https://pypi.org/project/ml_metrics/ https://github.com/benhamner/Metrics/tree/master/Python

这个可能更快?:

n = len(predictions)
rmse = np.linalg.norm(predictions - targets) / np.sqrt(n)

或者只使用NumPy函数:

def rmse(y, y_pred):
    return np.sqrt(np.mean(np.square(y - y_pred)))

地点:

Y是我的目标 Y_pred是我的预测

注意,由于平方函数,rmse(y, y_pred)==rmse(y_pred, y)。

Sklearn >= 0.22.0

sklearn。metrics有一个带有平方kwarg的mean_squared_error函数(默认为True)。将平方设置为False将返回RMSE。

from sklearn.metrics import mean_squared_error

rms = mean_squared_error(y_actual, y_predicted, squared=False)

Sklearn < 0.22.0

sklearn。Metrics有一个mean_squared_error函数。RMSE就是它返回值的平方根。

from sklearn.metrics import mean_squared_error
from math import sqrt

rms = sqrt(mean_squared_error(y_actual, y_predicted))

是的,它是由SKLearn提供的,我们只需要在参数中提到平方= False

from sklearn.metrics import mean_squared_error

mean_squared_error(y_true, y_pred, squared=False)