我试图计算均方误差,如:
在python中。我看到已经实现了它。但是,当我尝试将它与我自己的实现进行比较时,他们确实 NOT 同意。这是为什么?我的实现只使用标准2(或Frobenius规范不匹配)而没有别的想法。
为了测试这个,我编写了以下脚本:
import sklearn
from sklearn.decomposition import PCA
from sklearn.metrics import mean_squared_error
import numpy as np
from numpy import linalg as LA
X_truth = np.ones((5,6))
X_pred = 1.7*np.ones((5,6))
print 'LA error: ', (1.0/5)*LA.norm(X_truth - X_pred)**2
print 'LA error: ', (1.0/X_truth.shape[0])*LA.norm(X_truth - X_pred)**2
print 'LA error:: ', (1.0/5)*LA.norm(X_truth - X_pred, 'fro')**2
print 'LA error: ', LA.norm(X_truth - X_pred)**2
print 'LA error: ', LA.norm(X_truth - X_pred)
print 'LA error: ', (1.0/X_truth.shape[0])*LA.norm(X_truth - X_pred)
print 'sklearn MSE error: ', mean_squared_error(X_truth, X_pred)
我真的测试了我能想到的每一个组合,但我仍然无法让它们匹配。有什么想法吗?
答案 0 :(得分:2)
使用的公式有点不寻常,因为它没有取平方和的平方根,而LA.norm
则没有。
如果仔细查看文档,可以重新创建公式
np.sum((X_truth-X_pred)**2)/X_truth.size
给出了0.49,就像
一样 mean_squared_error(X_truth, X_pred)
或
LA.norm(X_truth - X_pred)**2/X_truth.size