Boosting算法
Boosting的主要思想就是通過每一輪的訓練得到模型的預測效果税娜,來更新模型的權(quán)重到總模型中去。經(jīng)典算法演變:Adaboost>>GDBT>>XGBoost。
這里主要介紹蚁滋。
-
XGBoost核心思想
xgboost是boosting(提升算法)算法的一種機器學習方法,從GDBT改良而來赘淮。核心思想是,用一棵樹預測得到睦霎,得到殘差梢卸。再加一棵樹預測這個殘差的值,得到新的預測值副女。而這多了一個樹的預測值要比之前的預測值更接近真實值蛤高,這就是核心思想。
第一棵樹:通常xgboost會初始化一個棵樹tree0碑幅,初始化為0或者是常數(shù) C 戴陡。
第二棵樹:是在第一棵樹的結(jié)果基礎(chǔ)上,增加這一顆樹的結(jié)果沟涨,得到預測值恤批,并且比第一次更接近真實值,裹赴。
第k棵樹:也是如此喜庞,。在評價接近真實值上回歸任務(wù)經(jīng)常選用均方誤()差來做評價指標棋返。
在這里延都,每次增加的數(shù)結(jié)構(gòu)為 。代表落在哪個葉子節(jié)點睛竣, 表示葉子節(jié)點對應(yīng)的權(quán)重晰房。
簡化下來就是這樣的:
?????
-
xgboost公式推導
xgboost的目標函數(shù)由兩部分組成筹我,一個是loss函數(shù),一個是正則項套蒂。loss函數(shù)是評價每個樣本的預測值和真實值的差異蕊退,正則項是解決模型過擬合,是調(diào)節(jié)每棵樹的葉子數(shù)和葉子節(jié)點的權(quán)重值幽污。也就是這個正則項才使xgboost這種提升算法嚷辅,交之前的算法更為優(yōu)秀。所以xgboost原始的公式如下:
在開始推導之前距误,先知道這幾個知識:
可以采用均方誤差簸搞、log損失函數(shù)等自定義的函數(shù)都可以(二階可導)。
式中,k表示第幾課樹准潭,T表示葉子節(jié)點個數(shù)趁俊,表示每個葉子節(jié)點的權(quán)重值。
推導開始:
-
xgboost代碼實現(xiàn)
- 原生接口
import xgboost as xgb
# step1 導入數(shù)據(jù)
Dtrain = xgb.DMatrix(TRAIN_DATA)
# step2 設(shè)置模型(深度刑然、學習率寺擂、任務(wù)模式等)參數(shù)(字典形式),具體參數(shù)查閱文檔
# https://xgboost.readthedocs.io/en/latest/
params = PARAMETER_DICT
# step3 訓練并保存模型
xgb.train(params, Dtrain, early_stopping_rounds=10).save_model(MODEL_PATH)
# 預測
Dtest = xgb.DMatrix(TEST_DATA)
ytest_pre = xgb.Booster(model_file=MODEL_PATH).predict(Dtest)
# 評價就不說了
- sklearn接口
from xgboost.sklearn import XGBClassifier
from sklearn.model_selection import train_test_split
# 載入數(shù)據(jù)并切分
x_train, x_test, y_train, y_test = train_test_split(x_data, y_data, test_size=0.33, random_state=0)
# 這個是用來做評價的數(shù)據(jù)泼掠,也就是非緘默打印時候loss的計算數(shù)據(jù)集
eval_set = [(x_test,y_test)]
# 設(shè)置參數(shù)怔软,搭建模型框架
params = PARAMETER_DICT
bst = XGBClassifier(params,silent=True)
# 訓練、保存模型
bst.fit(x_train,y_train,early_stopping_rounds=20,eval_set=eval_set)
bst.save_model(MODEL_PATH)
# 預測
Dtest = xgb.DMatrix(x_test)
ytest_pre = xgb.Booster(model_file=MODEL_PATH).predict(Dtest)
# 評價也不說了
- 模型重要特征展示
from xgboost import plot_importance
fig2, ax = plt.subplots(figsize=(15, 15))
plot_importance(bst,height = 0.5,ax = ax,max_num_features = 64)
plt.show()
-
xgboost調(diào)
- 有經(jīng)驗就自己瞎寫
一般需要調(diào)節(jié)的參數(shù)有(附文檔):- L1,L2正則項參數(shù):
- 學習率:
- 樹的最大深度:
- 迭代的輪數(shù):
- 建樹時候的各種比例:
等等········
- 沒有足夠的經(jīng)驗推薦用GridSearchCV
from xgboost.sklearn import XGBClassifier
from sklearn.model_selection import GridSearchCV
# 初始化一個模型
model = XGBClassifier()
# 設(shè)置需要驗證的參數(shù)列表
parameters = {'eta':[0.1, 0.2, 0.3], 'max_deep':[1, 2, 10]}
# 搭建網(wǎng)格驗證框架
clf = GridSearchCV(model, parameters, cv=5)
# 訓練择镇,選擇最優(yōu)組合
clf.fit(x_train, y_train)
待補充········
Bagging算法
遇上再寫·······
Stacking算法
遇上再寫·······