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

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

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


当前回答

这个可能更快?:

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

其他回答

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))
from sklearn.metrics import mean_squared_error
rmse = mean_squared_error(y_actual, y_predicted, squared=False)

or 

import math
from sklearn.metrics import mean_squared_error
rmse = math.sqrt(mean_squared_error(y_actual, y_predicted))

或者只使用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)。

这个可能更快?:

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

你可能想加上绝对值np。如果你在处理复数。

import numpy as np
rms = np.sqrt(np.mean(np.abs(x-y)**2))

注意,如果使用np. linalgg .norm,它已经处理了复数。

import numpy as np
rms = np.linalg.norm(x-y)/np.sqrt(len(x))