如何优雅地计算熊猫数据帧中的r平方



假设我有一个数据帧,我想计算两列之间的r平方。

ps。不是r2(df[0],df[1](,我想要的是使用df[0]对df[1]的r2进行ols拟合的r2。

例如:

In [21]: df = pd.DataFrame(np.random.rand(10, 2))
In [22]: df
Out[22]: 
0         1
0  0.776080  0.966668
1  0.922351  0.024381
2  0.859104  0.397823
3  0.607491  0.425335
4  0.732265  0.667846
5  0.336950  0.544515
6  0.236403  0.610943
7  0.811736  0.306425
8  0.110440  0.059754
9  0.469844  0.957298

如何计算与列0对应的列1的r2?

如注释中所述,sklearn有一种计算r平方的方法。

from sklearn.metrics import r2_score
r2_score(df[0], df[1])
# -1.8462387938183031

但为了回答您的问题并在熊猫身上自己计算,我们可以使用矢量化方法:

res = df[0].sub(df[1]).pow(2).sum()
tot = df[0].sub(df[0].mean()).pow(2).sum()
r2 = 1 - res/tot
# -1.8462387938183031
r = df[0].corr(df[1])
r2 = r ** 2

最新更新