Saya tidak yakin bagaimana xgboost bekerja secara teori. Tetapi karena xgboost adalah pengklasifikasi berbasis pohon, apakah boleh berasumsi bahwa tidak diperlukan normalisasi fitur?
tidak, Anda tidak perlu menormalkan fitur
Saya pikir saya mengerti bahwa pada prinsipnya tidak perlu normalisasi saat meningkatkan pohon.
Namun, seseorang dapat melihat beberapa dampak ketika menskalakan target y, terutama dengan ' reg:gamma ', tetapi juga (pada tingkat lebih rendah) untuk ' reg:linear ' (default). Apa alasannya?
Contoh untuk kumpulan data Perumahan Boston:
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=10000.0)
272.29640759874474 (skala = 1000000.0)
Dampak penskalaan y sangat besar saat menggunakan ' 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 (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=10000.0)
592.1469169959003 (skala = 1000000.0)
@tqchen Membaca Pengantar Anda untuk Pohon yang Didorong , tidak jelas bagi saya mengapa penskalaan fitur tidak diperlukan dalam istilah matematika.
Komentar yang paling membantu
tidak, Anda tidak perlu menormalkan fitur