Görünüşe göre XGBoost, varsayılan olarak temel öğrenciler olarak regresyon ağaçlarını kullanıyor . XGBoost (veya genel olarak Gradient boost), bu temel öğrencilerin çoğunu birleştirerek çalışır. Regresyon ağaçları egzersiz verilerindeki kalıpları tahmin edemez, bu nedenle 3'ün üzerinde veya 1'in altında herhangi bir girdi sizin durumunuzda doğru tahmin edilmeyecektir. Modeliniz aralıktaki girişler için çıkışları tahmin etmek üzere eğitilir [1,3]
, 3'ten yüksek bir giriş 3 ile aynı çıkışa ve 1'den küçük bir giriş 1 ile aynı çıkışa verilir.
Ek olarak, regresyon ağaçları verilerinizi parametrik olmayan modeller olduğu için gerçekten düz bir çizgi olarak görmez , yani teorik olarak düz bir çizgiden daha karmaşık herhangi bir şekle uyabilirler. Kabaca bir regresyon ağacı, eğitim sırasında gördüğü bazı egzersiz veri noktalarına yeni giriş verilerinizi atayarak çalışır ve buna göre çıktı üretir.
Bu, verilerinize uyacak şekilde bir hiper düzlemin en iyi parametrelerini (sizin durumunuzda düz çizgi) arayan parametrik regresörlerin ( doğrusal regresyon gibi ) aksine . Doğrusal regresyon , verilerinizi eğimli ve kesişen düz bir çizgi olarak görür.
Modelinize ekleyerek XGBoost modelinizin temel öğrenicisini bir GLM'ye (genelleştirilmiş doğrusal model) "booster":"gblinear"
değiştirebilirsiniz params
:
import pandas as pd
import xgboost as xgb
df = pd.DataFrame({'x':[1,2,3], 'y':[10,20,30]})
X_train = df.drop('y',axis=1)
Y_train = df['y']
T_train_xgb = xgb.DMatrix(X_train, Y_train)
params = {"objective": "reg:linear", "booster":"gblinear"}
gbm = xgb.train(dtrain=T_train_xgb,params=params)
Y_pred = gbm.predict(xgb.DMatrix(pd.DataFrame({'x':[4,5]})))
print Y_pred
Genel olarak, XGBoost modelinizin neden belirli bir şekilde davrandığını hata ayıklamak için model parametrelerine bakın:
gbm.get_dump()
Temel öğreniciniz doğrusal modelse, get_dump çıktısı:
['bias:\n4.49469\nweight:\n7.85942\n']
Yukarıdaki kodunuzda, ağaç tabanı öğrenenlerini ağaçlandırdığınız için çıktı şu şekilde olacaktır:
['0:[x<3] yes=1,no=2,missing=1\n\t1:[x<2] yes=3,no=4,missing=3\n\t\t3:leaf=2.85\n\t\t4:leaf=5.85\n\t2:leaf=8.85\n',
'0:[x<3] yes=1,no=2,missing=1\n\t1:[x<2] yes=3,no=4,missing=3\n\t\t3:leaf=1.995\n\t\t4:leaf=4.095\n\t2:leaf=6.195\n',
'0:[x<3] yes=1,no=2,missing=1\n\t1:[x<2] yes=3,no=4,missing=3\n\t\t3:leaf=1.3965\n\t\t4:leaf=2.8665\n\t2:leaf=4.3365\n',
'0:[x<3] yes=1,no=2,missing=1\n\t1:[x<2] yes=3,no=4,missing=3\n\t\t3:leaf=0.97755\n\t\t4:leaf=2.00655\n\t2:leaf=3.03555\n',
'0:[x<3] yes=1,no=2,missing=1\n\t1:[x<2] yes=3,no=4,missing=3\n\t\t3:leaf=0.684285\n\t\t4:leaf=1.40458\n\t2:leaf=2.12489\n',
'0:[x<3] yes=1,no=2,missing=1\n\t1:[x<2] yes=3,no=4,missing=3\n\t\t3:leaf=0.478999\n\t\t4:leaf=0.983209\n\t2:leaf=1.48742\n',
'0:[x<3] yes=1,no=2,missing=1\n\t1:[x<2] yes=3,no=4,missing=3\n\t\t3:leaf=0.3353\n\t\t4:leaf=0.688247\n\t2:leaf=1.04119\n',
'0:[x<3] yes=1,no=2,missing=1\n\t1:[x<2] yes=3,no=4,missing=3\n\t\t3:leaf=0.23471\n\t\t4:leaf=0.481773\n\t2:leaf=0.728836\n',
'0:[x<3] yes=1,no=2,missing=1\n\t1:[x<2] yes=3,no=4,missing=3\n\t\t3:leaf=0.164297\n\t\t4:leaf=0.337241\n\t2:leaf=0.510185\n',
'0:[x<2] yes=1,no=2,missing=1\n\t1:leaf=0.115008\n\t2:[x<3] yes=3,no=4,missing=3\n\t\t3:leaf=0.236069\n\t\t4:leaf=0.357129\n']
İpucu: Aslında xgb.XGBRegressor veya xgb.XGBClassifier sınıflarını kullanmayı tercih ediyorum, çünkü sci-kit learn API'sini takip ediyorlar . Ve sci-kit öğrenmenin çok fazla makine öğrenme algoritması uygulaması olduğundan, XGB'yi ek bir kütüphane olarak kullanmak, iş akışımı yalnızca XGBoost'un sci-kit arayüzünü kullandığımda rahatsız etmiyor.