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.
-
¿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".
-
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 ]