Ich bin mir nicht ganz sicher, wie xgboost theoretisch funktioniert. Aber da xgboost ein baumbasierter Klassifikator ist, ist es in Ordnung anzunehmen, dass keine Normalisierung von Funktionen erforderlich ist?
nein du musst die Features nicht normalisieren
Ich denke, ich verstehe, dass beim Boosten von Bäumen im Prinzip keine Normalisierung erforderlich ist.
Allerdings kann man bei der Skalierung des Ziels y einige Auswirkungen sehen, insbesondere bei ' reg:gamma ', aber auch (in geringerem Maße) bei ' reg:linear ' (Standard). Was ist der Grund dafür?
Beispiel für den Datensatz 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 (Skala=1e-06)
2.343273977065266 (Skala=0,0001)
2.3432793874455315 (Skala=0,01)
2.290595204136888 (Skala=1,0)
2.528513393507719 (Skala=100.0)
7.228978353091473 (Skala=1000.0)
272.29640759874474 (Skala=1000000.0)
Die Auswirkung der Skalierung von y ist bei der Verwendung von ' reg:gamma ' wirklich groß:
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 (Skala=1e-06)
545,8298971540023 (Skala=0,0001)
37,68688286293508 (Skala=0,01)
4.039819858716935 (Skala=1,0)
2.505477263590776 (Skala=100,0)
198.94093800190453 (Skala=1000.0)
592.1469169959003 (Skala=1000000.0)
@tqchen Wenn Einführung in Boosted Trees lese , ist mir nicht klar, warum die Skalierung von Funktionen in mathematischer Hinsicht nicht erforderlich ist.
Hilfreichster Kommentar
nein du musst die Features nicht normalisieren