我用linear regression
建立了一个模型,我想根据我的输出来计算r2
分数。但是结果确实出乎意料:
如下所示,pearson
和y
之间的y hat
相关性为正,这意味着r2
分数至少应为正。但是我从sklearn
得到的结果是负数。怎么来的?提前致谢!
import numpy as np
from sklearn.metrics import r2_score
from scipy.stats import pearsonr
y = np.array([ 5.2 , 1.144 , 3.3 , 5.59741373, 1.438 , 7.562 , 2.7 , 0.22706035, 2.204 , 2.396 ,
4.314 , 12.51420331, 10.8 , 10.638 , 5.101 ,
3.861 , 3.2 , 3.8 , 7.072 , -0.4597798 ,
-0.9 , 0.3 , -3.54 , -0.4 , -3. ,
0.7 , 1.3 , 1.5 , 6. , 2.8 ,
2. , 3.122 ])
y_hat = np.array([ 1.25131326, 2.64864629, 1.56201996, 4.26699994, 2.21499358,
0.59113701, 2.40848854, 0.14954989, 0.45800824, 2.82399621,
2.48736001, 2.78476975, 1.36378354, 3.4889863 , 2.4226333 ,
2.63939523, 4.15008518, 2.61525276, 2.29859288, -1.4358969 ,
-3.67752652, -3.73173215, -2.67027158, 0.35012302, 3.91349371,
5.11971861, 5.96586311, 3.36520449, 0.5204047 , 1.584193 ,
-0.05781178, 1.75957967])
pearsonr(y, y_hat) # This gives around 0.299
r2_score(y, y_hat) # This gives -0.18478241562914666
最佳答案
我想我知道这是怎么回事。基本上我天真的认为正相关会导致正r平方,但事实并非如此。通过计算y_hat vs y和y_avg vs y的均方误差,我意识到与始终仅预测平均值相比,y_hat确实是更差的估计量。
http://www.fairlynerdy.com/what-is-r-squared/
从上面的链接看这张图,您可以看到,即使两个系列朝同一方向移动,由截距引起的距离也会使MSE测得的性能真的很差
关于python - sklearn提供了意外的r2分数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/57698801/