Não tenho certeza de como o xgboost funciona em teoria. Mas como o xgboost é um classificador baseado em árvore, é correto assumir que nenhuma normalização de recursos é necessária?
não, você não tem que normalizar os recursos
Acho que entendo que, em princípio, não há necessidade de normalização ao aumentar árvores.
No entanto, pode-se ver algum impacto ao dimensionar o alvo y, especialmente com ' reg: gamma ', mas também (em uma extensão menor) para ' reg: linear ' (o padrão). Qual é a razão para isto?
Exemplo para o conjunto de dados Boston Housing:
import numpy as np
import xgboost as xgb
from sklearn.metrics import mean_squared_error
from sklearn.datasets import load_boston
boston = load_boston()
y = boston['target']
X = boston['data']
for scale in np.logspace(-6, 6, 7):
xgb_model = xgb.XGBRegressor().fit(X, y / scale)
predictions = xgb_model.predict(X) * scale
print('{} (scale={})'.format(mean_squared_error(y, predictions), scale))
2,3432734454908335 (escala = 1e-06)
2,343273977065266 (escala = 0,0001)
2,3432793874455315 (escala = 0,01)
2,290595204136888 (escala = 1,0)
2,528513393507719 (escala = 100,0)
7,228978353091473 (escala = 10000,0)
272,29640759874474 (escala = 1000000,0)
O impacto de dimensionar y é muito grande ao usar ' reg: gamma ':
for scale in np.logspace(-6, 6, 7):
xgb_model = xgb.XGBRegressor(objective='reg:gamma').fit(X, y / scale)
predictions = xgb_model.predict(X) * scale
print('{} (scale={})'.format(mean_squared_error(y, predictions), scale))
591.6509503519147 (escala = 1e-06)
545,8298971540023 (escala = 0,0001)
37,68688286293508 (escala = 0,01)
4,039819858716935 (escala = 1,0)
2,505477263590776 (escala = 100,0)
198,94093800190453 (escala = 10000,0)
592.1469169959003 (escala = 1000000,0)
@tqchen Lendo sua ótima introdução às árvores impulsionadas , não está claro para mim por que o dimensionamento de recursos não é necessário em termos matemáticos.
Comentários muito úteis
não, você não tem que normalizar os recursos