簡體   English   中英

R 在 lm.score( ) 中平方 0.0 是什么意思?

[英]R squared 0.0 in lm.score( ) meaning?

在此頁面上,R^2 定義為:

系數 R^2 定義為 (1 - u/v),其中 u 是殘差平方和 ((y_true - y_pred) ** 2).sum() 而 v 是總平方和 ((y_true - y_true.mean()) ** 2).sum()。 最好的可能分數是 1.0,它可以是負數(因為模型可以任意糟糕)。 一個始終預測 y 的預期值的常數模型,忽略輸入特征,將獲得 0.0 的 R^2 分數。

我無法理解線路:

一個始終預測 y 的預期值的常數模型,忽略輸入特征,將獲得 0.0 的 R^2 分數。

除了這個常數模型給出 y_true.mean() 的情況之外,常數模型如何將 R^2 設為 0.0 ?

謝謝。

因此,如果您擬合一個常數模型(即所有預測都為 1 值),則它是一個僅截距模型,其中截距是平均值,因為這解釋了最大的方差。

因此,按照您提供的公式,R 正好為零。 在預測變量或模型在零時沒有預測值的情況下,它將給出接近於零(甚至為負)的 R^2。

我們可以在下面手動進行此計算。

首先是數據集:

import pandas as pd
from sklearn.datasets import load_iris
from sklearn.metrics import r2_score
from sklearn import linear_model
iris = load_iris()
df = pd.DataFrame(data= iris['data'],
                     columns= iris['feature_names'] )

我們擬合 a 模型並計算殘差:

mdl_full = linear_model.LinearRegression()
mdl_full.fit(df[['petal width (cm)']],df['petal length (cm)'])
pred = mdl.predict(df[['petal width (cm)']])
resid_full = np.linalg.norm(df['petal length (cm)'] - pred) ** 2

擬合一個只有截距的模型:

mdl_constant = linear_model.LinearRegression()
mdl_constant.fit(X = np.repeat(0,150).reshape(-1, 1),y=df['petal length (cm)'])
pred = mdl_constant.predict(df[['petal width (cm)']])
resid_constant = np.linalg.norm(df['petal length (cm)'] - pred) ** 2

我們可以手動計算 r^2:

(1 - resid_full / resid_constant)
0.9265562307373204

這正是你從 .score 得到的:

mdl_full.score(df[['petal width (cm)']],df['petal length (cm)'])
0.9265562307373204

因此,您可以查看完整模型是否與常量模型完全相同,它給出的 r 平方為 0。您可以使用 X = 1、X=2 等重新擬合常量模型,但它給您的結果基本相同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM