2 votos

Diferencia en los coeficientes de regresión de LinearRegression de sklearn y XGBRegressor

Utilizando el conjunto de datos de viviendas de Boston como ejemplo, estoy comparando los coeficientes de regresión entre LinearRegression() de Sklearn y XGBRegressor() de xgboost.

Para XGBRegressior, estoy usando booser='gblinear' para que utilice el refuerzo lineal y no el refuerzo basado en el árbol. Según este página, gblinear utiliza "delta con regularización de red elástica (L1 + L2 + L2 bias) y optimización de descenso de coordenadas en paralelo". .

Por lo tanto, asumo que mi comparación es de manzanas a manzanas, ya que no estoy comparando OLS con un aprendiz basado en un árbol.

  1. ¿Es correcta mi suposición? Si es así, ¿la interpretación de los coeficientes en XGBoost sería la misma que en Lienar Regression? Es decir, representan " el cambio medio en la variable de respuesta para una unidad de cambio en la variable predictora, manteniendo constantes los demás predictores del modelo".

  2. Los coeficientes observados para ambos son diferentes. ¿A qué se debe esto? ¿Es por la regularización y optimización que hace XGBoostRegressor?

    boston = load_boston() X = pd.DataFrame(boston.data, columns = boston.feature_names) Y = pd.DataFrame(boston.target)

    from sklearn.model_selection import train_test_split

    X_train, X_test, y_train, y_test = train_test_split(X, Y, test_size = 0.2, random_state=5)

Modelo lineal:

from sklearn.linear_model import LinearRegression

linear_model = LinearRegression()
linear_model.fit(X_train, y_train)

print(linear_model.coef_)

La salida:

[[-1.30799852e-01  4.94030235e-02  1.09535045e-03  2.70536624e+00
  -1.59570504e+01  3.41397332e+00  1.11887670e-03 -1.49308124e+00
   3.64422378e-01 -1.31718155e-02 -9.52369666e-01  1.17492092e-02
  -5.94076089e-01]]

Regresión XGBoost con gblinear:

from xgboost import XGBRegressor

xgb_model = XGBRegressor(n_estimators=100, learning_rate=0.06, gamma=1, subsample=0.8, objective='reg:squarederror', booster='gblinear', n_jobs=-1)
xgb_model.fit(X_train, y_train)

print(xgb_model.coef_)

La salida:

[-0.192631    0.0966579  -0.00972393  0.34198     0.159105    1.09779
  0.039317    0.289027   -0.00622574  0.00236915  0.171237    0.0164343
 -0.398639  ]

5voto

usεr11852 Puntos 5514

Esta respuesta será algo anticlimática, pero ahí va...

Si bien es cierto que el reforzador lineal utiliza una rutina lineal y no una rutina basada en un árbol como aprendiz de base, la mayoría de las similitudes entre un GBM con un reforzador lineal y un modelo de regresión lineal terminan ahí.

Para empezar, como bien apuntas, en XGBoost utilizamos (normalmente en paralelo) descenso de coordenadas en lugar del descenso de gradiente "estándar". Esto nos dará, probablemente, resultados diferentes. Además de eso, la tasa de aprendizaje, $\eta$ , regularizará por sí mismo las estimaciones de forma inadvertida, por lo que no existe una analogía directa con " sin regularización ", incluso si asumimos reg_lambda , reg_lambda_bias y reg_alpha (Pesos $L_2$ , línea de base $L_2$ y pesos $L_1$ regularización respectivamente) para igualar a cero. Por último, un modelo XGBoost y un modelo de regresión lineal pas tienen la misma intercepción, $\beta_0$ mientras que en el caso de una regresión lineal estándar el intercepto se calcula como parte de la matriz de diseño global $X$ el intercepto utilizado por XGBoost dependerá de la tasa de aprendizaje, $\eta$ así como la media de la variable de respuesta (es decir, empezamos a impulsar utilizando como línea de base la media de nuestra variable de respuesta o una versión regularizada de esa media para obtener nuestras primeras estimaciones).

Ni siquiera toco el caso de los estimadores múltiples porque esto se refiere a la reproducibilidad de sus resultados y no a su interpretación per se. Tampoco examino el caso de las iteraciones múltiples ( n_estimators >1) ya que, de nuevo, nuestras estimaciones en este caso podrían verse afectadas por la variación debida al embolsamiento. (Obsérvese que en el código de ejemplo proporcionado la proporción de submuestras de las instancias de entrenamiento se establece en 0,8, teóricamente debería establecerse en 1 a efectos de esta comparación). Por último, debemos ser conscientes de que si optimizamos para un número suficientemente grande de iteraciones, obtendremos las estimaciones de la pendiente que obtendríamos con la regresión lineal. Después de todo, tanto XGBoost como LR minimizarán la misma función de coste para los mismos datos utilizando las mismas estimaciones de pendiente. :)

Y para responder a su última pregunta: sí, la interpretación del coeficiente de pendiente de XGBoost $\beta_1$ como el " cambio medio en la variable de respuesta para una unidad de cambio en la variable predictora, manteniendo constantes los demás predictores del modelo. "es correcto. Dicho de otra manera: si dos instancias $s_A$ y $s_B$ sólo se diferencian por un cambio unitario en una determinada variable de respuesta $x_1$ y por lo demás son iguales, la diferencia en nuestras predicciones para ellos será la cuantificada en el XGBoost $\beta_1$ coeficiente. Sólo los pasos de regularización dentro de XGBoost hacen que la derivación de esos coeficientes de intercepción y pendiente sea totalmente incomparable con la derivación de los mismos coeficientes de intercepción y pendiente dentro de un marco de regresión lineal.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X