Xgboost: 正規化は必要ですか?

作成日 2015年06月17日  ·  3コメント  ·  ソース: dmlc/xgboost

xgboostが理論的にどのように機能するかはよくわかりません。 しかし、xgboostはツリーベースの分類器であるため、機能の正規化は必要ないと想定しても大丈夫ですか?

最も参考になるコメント

いいえ、機能を正規化する必要はありません

全てのコメント3件

いいえ、機能を正規化する必要はありません

原則として、木をブーストするときに正規化する必要はないことを理解していると思います。

ただし、特に「 reg:gamma 」を使用してターゲットyをスケーリングすると、かなりの影響が見られますが、「 reg:linear 」(デフォルト)の場合も(程度は少ないですが)影響があります。 これの理由は何ですか?

ボストン住宅データセットの例:

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(scale = 1e-06)
2.343273977065266(スケール= 0.0001)
2.3432793874455315(スケール= 0.01)
2.290595204136888(スケール= 1.0)
2.528513393507719(スケール= 100.0)
7.228978353091473(スケール= 10000.0)
272.29640759874474(スケール= 1000000.0)

' reg:gamma 'を使用する場合、yのスケーリングの影響は非常に大きくなります。

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(scale = 1e-06)
545.8298971540023(スケール= 0.0001)
37.68688286293508(スケール= 0.01)
4.039819858716935(スケール= 1.0)
2.505477263590776(スケール= 100.0)
198.94093800190453(スケール= 10000.0)
592.1469169959003(スケール= 1000000.0)

@tqchenブーストされたツリーのすばらしい

このページは役に立ちましたか?
0 / 5 - 0 評価