我知道我可以实现这样一个均方根误差函数:
def rmse(predictions, targets):
return np.sqrt(((predictions - targets) ** 2).mean())
如果这个rmse函数是在某个库中实现的,可能是在scipy或scikit-learn中,我在寻找什么?
我知道我可以实现这样一个均方根误差函数:
def rmse(predictions, targets):
return np.sqrt(((predictions - targets) ** 2).mean())
如果这个rmse函数是在某个库中实现的,可能是在scipy或scikit-learn中,我在寻找什么?
当前回答
在scikit-learn 0.22.0中,您可以将参数squared=False传递给mean_squared_error()以返回RMSE。
from sklearn.metrics import mean_squared_error
mean_squared_error(y_actual, y_predicted, squared=False)
其他回答
下面是一个示例代码,计算两种多边形文件格式PLY之间的RMSE。它同时使用ml_metrics库和np. linalgg .norm:
import sys
import SimpleITK as sitk
from pyntcloud import PyntCloud as pc
import numpy as np
from ml_metrics import rmse
if len(sys.argv) < 3 or sys.argv[1] == "-h" or sys.argv[1] == "--help":
print("Usage: compute-rmse.py <input1.ply> <input2.ply>")
sys.exit(1)
def verify_rmse(a, b):
n = len(a)
return np.linalg.norm(np.array(b) - np.array(a)) / np.sqrt(n)
def compare(a, b):
m = pc.from_file(a).points
n = pc.from_file(b).points
m = [ tuple(m.x), tuple(m.y), tuple(m.z) ]; m = m[0]
n = [ tuple(n.x), tuple(n.y), tuple(n.z) ]; n = n[0]
v1, v2 = verify_rmse(m, n), rmse(m,n)
print(v1, v2)
compare(sys.argv[1], sys.argv[2])
这个可能更快?:
n = len(predictions)
rmse = np.linalg.norm(predictions - targets) / np.sqrt(n)
是的,它是由SKLearn提供的,我们只需要在参数中提到平方= False
from sklearn.metrics import mean_squared_error
mean_squared_error(y_true, y_pred, squared=False)
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)。