首页 > 解决方案 > 为什么两种计算 R2 分数的方法的结果不同

问题描述

在线性模型中,SST(总平方和)= SSR(剩余平方和)+ SSE(解释平方和),对吧?所以我用 2 种不同的方法计算了 R2 分数。

数据的形状是(n_sample,n_feature),我想计算每个特征的R2分数。

第一个:R2 = SSE/SST

def r2score(y_pred, y_true):
    SSE = np.sum((y_pred - y_true.mean(axis=0)) ** 2, axis=0)
    SST = np.sum((y_true - y_true.mean(axis=0)) ** 2, axis=0)
    return SSE / SST

array([0.3903272 , 0.61556043, 0.79316815, 0.27477445, 0.76132449,
       0.37335292, 0.67222515, 0.56178136, 0.37840461, 0.48753905,
       0.48425204, 0.40274203, 0.32436666, 0.73934064, 0.67582176,
       0.65503309, 0.74719551, 0.42158567, 0.35102711, 0.52308956,
       0.22078698, 0.30651726, 0.28614789, 0.43199096])

第二:R2 = 1 - SSR/SST

def r2score_same(y_pred, y_true):
    SSR = np.sum((y_true - y_pred) ** 2, axis=0)
    SST = np.sum((y_true - y_true.mean(axis=0)) ** 2, axis=0)
    return 1 - (SSR / SST)

array([0.43137207, 0.58980204, 0.75270556, 0.31230454, 0.80313592,
       0.2881272 , 0.68314465, 0.61986317, 0.36847796, 0.456864  ,
       0.35585449, 0.4385286 , 0.35472905, 0.66386517, 0.59598209,
       0.65243417, 0.70413723, 0.42801639, 0.43712039, 0.56682037,
       0.23902448, 0.34432634, 0.33884071, 0.42886742])

我不明白为什么结果不一样。

请帮我!

标签: numpystatistics

解决方案


推荐阅读