从混淆矩阵计算 RMSE 和 R 平方

数据挖掘 多类分类 混淆矩阵
2022-02-26 20:24:40

我的混淆矩阵为 C.mat

8263    20    39
2       3826  14
43       7    4431 

我预测的类标签是 Ypred,实际标签是 Ytest。Ypred 大小为 16000*1 和 Ytest 16000*1。

我正在尝试计算R-squaredRMSE有没有办法从混淆矩阵中直接计算RMSER 平方?

我试过这个:

RMSE = sqrt(immse(Ypred, Ytest))

但是,它没有用。

我可以使用 R 或 Matlab。

任何建议将被认真考虑!

3个回答

混淆矩阵表明您正在执行分类而不是回归。RMSE 和 R-square 是与连续变量相关的度量;对于分类变量,我建议使用 Accuracy / Recall / Precision / F1 score 来衡量模型的性能。

https://www.quora.com/How-is-root-mean-square-error-RMSE-and-classification-related

除了其他受访者所说的之外,我想补充一点,如果类是ordinal ,则使用 RMSE 和 MSE 作为评估分类器的指标实际上是一个好主意。在这种情况下,类别之间存在自然顺序,即>中等>因为一个类的缺失比两个或更多类的缺失更糟糕,所以您希望使用一个考虑到这一点的指标。根据Gaudette 和 Japkowicz (2009),如果您只想使用单个指标,MSE 和 MAE 是您的最佳选择从他们的方法来看,RMSE 也可能是一个不错的选择。

这是从 MATLAB 中的混淆矩阵计算 MSE 和 RMSE 的一种方法:

cm = [8263   20   39
         2 3826   14
        43    7 4431];

se = 0;
for i = 1:3
    for j = 1:3
        se = se + cm(i,j) * (i-j)^2;
    end
end

mse = se / sum(sum(cm));
rmse = sqrt(mse);

如果您使用 RMSE 进行分类,那么实际上每个平方误差都是1. 均方误差将是您的错误分类率,而 RMSE 是其平方根。

其他有用信息

所有误差平方的均值/平均值的平方根。

RMSE 的使用非常普遍,它为数值预测提供了出色的通用误差度量。

与类似的平均绝对误差相比,RMSE 放大并严厉惩罚了较大的误差。

RMSE=1ni=1n((yiy^i)2)

MATLAB 代码

RMSE = sqrt(mean((y-y_pred).^2));

代码

RMSE <- sqrt(mean((y-y_pred)^2))

Python(Scikit 学习)

from sklearn.metrics import mean_squared_error
RMSE = mean_squared_error(y, y_pred)**0.5