多输出回归模型RMSE计算疑问:sklearn两种方法结果为何不同?
多输出回归RMSE计算:两种方法的差异与选择
两种方法都是合法的RMSE计算方式,但对应不同的统计逻辑,结果差异源于计算顺序的不同:
- 方法1是各输出维度RMSE的平均值
- 方法2是全局平均MSE的平方根
方法1:mean_squared_error(y_test, y_pred, squared=False)
计算逻辑(默认multioutput="uniform_average"参数):
- 对每个输出维度,单独计算该维度所有样本的均方误差(MSE)
- 对每个维度的MSE开根号,得到该维度的RMSE
- 将所有维度的RMSE取算术平均,得到最终结果
用公式表示:
$$\text{RMSE}1 = \frac{1}{n{\text{outputs}}} \sum_{j=1}^{n_{\text{outputs}}} \sqrt{\frac{1}{n_{\text{samples}}} \sum_{i=1}^{n_{\text{samples}}} (y_{ij} - \hat{y}_{ij})^2}$$
方法2:math.sqrt(mean_squared_error(y_test, y_pred))
计算逻辑:
- 计算所有样本、所有输出维度的平方误差的算术平均值(即全局MSE)
- 对这个全局MSE开根号,得到最终结果
用公式表示:
$$\text{RMSE}2 = \sqrt{\frac{1}{n{\text{samples}} \times n_{\text{outputs}}} \sum_{i=1}^{n_{\text{samples}}} \sum_{j=1}^{n_{\text{outputs}}} (y_{ij} - \hat{y}_{ij})^2}$$
为什么结果不同?
根据Jensen不等式,平方根作为凹函数,满足:
$$\sqrt{\frac{1}{k} \sum_{j=1}^k x_j} \geq \frac{1}{k} \sum_{j=1}^k \sqrt{x_j}$$
只有当所有输出维度的MSE完全相等时,等号才成立。你的测试结果中$\text{RMSE}_2 > \text{RMSE}_1$,正好符合这个规律,说明不同输出维度的预测误差存在差异。
哪种方法合理?
取决于你的业务需求:
- 如果需要先评估每个输出维度的预测精度,再取各维度的平均水平,选方法1
- 如果需要从全局视角衡量所有样本、所有维度的整体预测误差,选方法2
内容的提问来源于stack exchange,提问作者tgwsk
相关产品推荐
相关产品推荐

