[英]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.