Как рассчитать скорректированный показатель R2 для нелинейных моделей - PullRequest
0 голосов
/ 21 марта 2020

Как упомянуто в этом сообщении , скорректированный показатель R2 можно рассчитать по следующему уравнению, где n - это число выборок, p - это количество параметров модели.

adj_r2 = 1-(1-R2)*(n-1)/(n-p-1)

Согласно этому другому сообщению , мы можем получить число параметров нашей модели с помощью model.coef_.

Однако для Gradient Boosting (GBM) это Кажется, мы не можем получить количество параметров в нашей модели:

from sklearn.ensemble import GradientBoostingRegressor
import numpy as np

X = np.random.randn(100,10)
y = np.random.randn(100,1)

model = GradientBoostingRegressor()
model.fit(X,y)

model.coef_

output >>> 
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-3-4650e3f7c16c> in <module>
----> 1 model.coef_

AttributeError: 'GradientBoostingRegressor' object has no attribute 'coef_'

После проверки документации кажется, что GBM состоит из разных оценщиков. Количество оценок равно количеству параметров?

Тем не менее, я не могу получить количество параметров для каждого отдельного оценщика

model.estimators_[0][0].coef_


output >>> 
---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-2-27216ebb4944> in <module>
----> 1 model.estimators_[0][0].coef_

AttributeError: 'DecisionTreeRegressor' object has no attribute 'coef_'

Как рассчитать скорректированный показатель R2 для GBM?

1 Ответ

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

Краткий ответ: не делайте этого (обратите внимание, что все сообщения, на которые вы ссылаетесь, относятся к линейной регрессии).


Длинный ответ:

Для начала определите, что

p - это число параметров модели

равно , а не правильный. p - это число пояснительных переменных, используемых моделью ( источник ).

В соответствии с этим определением сообщение , которое вы связали, фактически использует X.shape[1] вместо model.coef_; последнее предлагается в комментарии, и оно также не является правильным (см. собственный комментарий).

Так что, если вы настаиваете на вычислении r-квадрата для вашей модели GBM, вы всегда можете настроить код из связанный пост (после получения ваших прогнозов y_pred), использующий также преимущества scikit-learn r2_score:

from sklearn.metrics import r2_score

y_pred = model.predict(X)
r_squared = r2_score(y, y_pred)
adjusted_r_squared = 1 - (1-r_squared)*(len(y)-1)/(len(y)-X.shape[1]-1)

Но почему вы не должны этого делать? Ну, цитируя мой ответ в другом вопросе:

вся концепция R-квадрата на самом деле происходит непосредственно из мира статистики, где акцент делается на интерпретативные модели, и он мало используется в контексте машинного обучения, где акцент явно делается на прогнозирующих моделях; по крайней мере AFAIK, и помимо некоторых очень вводных курсов, я никогда (я имею в виду никогда ...) не видел проблемы прогнозирующего моделирования, где R-квадрат используется для любого вида оценки производительности; и не случайно, что популярные машинное обучение вводные программы, такие как Машинное обучение Эндрю Нг в Coursera, даже не удосужились об этом упомянуть.

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