numpy中有计算两个矩阵之间均方误差的方法吗?
我尝试过搜索,但没有找到。是用不同的名字吗?
如果没有,你如何克服这个问题?你自己写还是使用不同的库?
您可以使用:
mse = ((A - B)**2).mean(axis=ax)
或者
mse = (np.square(A - B)).mean(axis=ax)
ax=0
沿行、每列执行平均值,返回一个数组ax=1
沿列对每一行执行平均值,返回一个数组ax=None
),沿数组逐元素执行平均值,返回标量值这不是
numpy
的一部分,但它适用于 numpy.ndarray
对象。 numpy.matrix
可以转换为 numpy.ndarray
,numpy.ndarray
可以转换为 numpy.matrix
。
from sklearn.metrics import mean_squared_error
mse = mean_squared_error(A, B)
有关如何控制轴的文档,请参阅 Scikit Learnmean_squared_error。
更加麻木
np.square(np.subtract(A, B)).mean()
只是为了好玩
mse = (np.linalg.norm(A-B)**2)/len(A)
已接受答案的另一种替代方案,可以避免矩阵乘法的任何问题:
def MSE(Y, YH):
return np.square(Y - YH).mean()
来自 np.square
的
文档:
Return the element-wise square of the input.
计算均方误差(方差)及其平方根(标准差)的标准 numpy 方法是
numpy.var()
和 numpy.std()
,请参阅 here 和 here。它们适用于矩阵,并且具有与 numpy.mean()
相同的语法。
我想这个问题和前面的答案可能是在这些功能可用之前就已经发布了。
统计备注
回答@Drew 的评论:
该答案相当于该线程中的热门答案。从技术上讲,MSE 与方差的不同之处在于它使用参数的“真实”值,而不是其估计值,请参阅
方差和均方误差有什么区别?和方差和MSE有什么区别?。这两个量的差异在于我们对中心参数的估计的“偏差”。然而,当计算样本方差时,就像OP中所做的那样,我们无法真正知道这个参数的值。我相信OP在宽松的意义上使用术语MSE。
此外,上面提出的 numpy 函数允许参数
ddof
(自由度数),它允许获得无偏方差估计(与
python 和 R之间的一些表面比较中所声称的相反。)
np.operation
风格怎么样?
mse = np.mean(np.square(A - B))
请记住,未指定
np.mean()
关键字参数的
axis
将输出标量,就像 np.sum()
一样。y_pred = np.array([2.5, 0.0, 2, 8])
计算 y_true 和 y_pred 之间的均方误差 (MSE)。在纸上展示您的计算并上传您的作品。
0.5
1
1.75
0.375
没有给出任何