R в квадрате 0,0 в lm.score () означает? - PullRequest
3 голосов
/ 01 марта 2020

на этой странице , 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, независимо от входных объектов, получит оценку R ^ 2 0,0.

Я не могу понять строку:

Постоянная модель, которая всегда предсказывает ожидаемое значение y, независимо от входных характеристик, получит оценку R ^ 2 0,0.

Как постоянная модель даст R ^ 2 как 0.0, кроме случая, когда эта постоянная модель дает y_true.mean ()?

Спасибо.

Ответы [ 2 ]

1 голос
/ 01 марта 2020

Таким образом, если вы подходите к постоянной модели (т. Е. Все прогнозы приходят к 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'] )

Мы подгоняем модель и рассчитываем остатки:

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 и т. д. c, но это дает по существу тот же результат.

0 голосов
/ 01 марта 2020

Примечание:

Величина R2 называется коэффициентом детерминации.

Коэффициент детерминации R2 будет иметь значение от 0 до 1. Значение R2 около 1 указывает, что большая часть изменения данных ответа объясняется различными входными значениями, тогда как значение R2 около 0 указывает, что небольшая часть изменения объясняется различными входными значениями.

Теперь перейдем к утверждению, "константная модель, которая всегда прогнозирует ожидаемое значение y, независимо от входных характеристик, получит оценку R ^ 2 0,0."

Как вы знаете из определения, R2 является коэффициентом детерминации и является мерой того, насколько хорошо результат объясняется или прогнозируется на основе данного ввода. В случае постоянной модели выходной сигнал не зависит от изменений входных характеристик / характеристик, поэтому он должен получить значение R2, равное 0.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...