0

我正在阅读文档以了解确定系数,从文档中我了解到确定系数不过是 R x R(相关系数)

所以我从 kaggle.com 获取房价数据集并开始尝试以更好地理解,这是我的代码

取相关系数

test_data=pd.read_csv(r'\house_price\test.csv')
_d=test_data.loc[:,['MSSubClass','LotFrontage']]
_d.fillna(0,inplace=True)
_d.corr()

在此处输入图像描述

现在,像这样取确定系数

from sklearn.metrics import r2_score
r2_score(_d['MSSubClass'],_d['LotFrontage'])

为此,我得到了值-0.9413195412943647

理想情况下不应该是0.060531252961吗?如-0.246031 x -0.246031 = 0.060531252961

4

2 回答 2

1

您所引用的“文档”只是一篇描述 R2 众多变体之一的博文。我建议阅读官方scikit-learn文档以了解它们在r2_score.

简而言之,0 值意味着该模型与仅预测目标变量的期望值(即均值)的模型没有任何不同。另一方面,值为 1 意味着该模型是完美的,其预测没有错误。但是,这是与您提供的博文所述的主要区别,您会看到它允许负值,因为模型的性能可能比简单地预测目标变量的预期值更差。

这就是在你r2_scorescikit-learn情况下告诉你的:你拟合的模型更糟,即平均产生更高的误差,而不是仅仅预测房价的平均值。

于 2020-05-29T05:27:35.803 回答
1

遵循文档:https ://scikit-learn.org/stable/modules/model_evaluation.html#r2-score

r2_score 定义为: 在此处输入图像描述

df.corr方法在哪里(具有皮尔逊相关性): 在此处输入图像描述

所以让我们构建一个例子:

x   y
1   1
1   0
0   0
1   1

相关性:4*(1+0+0+1) - 3*2 / sqrt(4*(3-9)*4*(2-4)) = 8-6/ sqr(-24*4*-8) = 2/sqr(-24*4*-8) 只要 R2 是:1-((0)^2+(1)^2+(0)^2+(0)^2) / (1-0.75)^2+(1-0.75)^2+(0 - 0.75)^2 +(1-0.75)^2

希望有帮助

于 2020-05-29T09:01:58.810 回答