集成學習

Boosting算法

Boosting的主要思想就是通過每一輪的訓練得到模型的預測效果税娜,來更新模型的權(quán)重到總模型中去。經(jīng)典算法演變:Adaboost>>GDBT>>XGBoost。
這里主要介紹\sf {\color{red} {XGBoost} }蚁滋。

  • XGBoost核心思想
    xgboost是boosting(提升算法)算法的一種機器學習方法,從GDBT改良而來赘淮。核心思想是,用一棵樹預測得到\hat y睦霎,得到殘差(y-\hat y)梢卸。再加一棵樹預測這個殘差的值f_2(x_i),得到新的預測值\hat y + f_2(x_i)副女。而這多了一個樹的預測值要比之前的預測值更接近真實值蛤高,這就是核心思想。

  • \sf {\color{red} {\text {實 現(xiàn) 步 驟 :}}}
    第一棵樹:通常xgboost會初始化一個棵樹tree0碑幅,初始化\hat y_0為0或者是常數(shù) C 戴陡。
    第二棵樹:是在第一棵樹的結(jié)果基礎(chǔ)上,增加這一顆樹的結(jié)果沟涨,得到預測值恤批,并且比第一次更接近真實值,\hat y_1 = \hat y_0 +f_1(x_i)裹赴。
    \vdots
    第k棵樹:也是如此喜庞,\hat y_k = \hat y_{k-1} +f_k(x_i)。在評價接近真實值上回歸任務(wù)經(jīng)常選用均方誤((y-\hat y)^2)差來做評價指標棋返。
    在這里延都,每次增加的數(shù)結(jié)構(gòu)為 f_k(x_i) = {\mit{W}}_{q(x_i)}q(x_i)代表落在哪個葉子節(jié)點睛竣, {\mit{W}}表示葉子節(jié)點對應(yīng)的權(quán)重晰房。

簡化下來就是這樣的:


\text{tree1:} \hat y_0 = C
\text{tree2:} \hat y_1 = \hat y_0 +f_1(x_i)
\text{tree3:} \hat y_2 = \hat y_1 +f_2(x_i)
?????\vdots
\text{treet:} \hat y_t= \hat y_{t-1} +f_t(x_i) = \sum^t_{k=0}f_k(x_i)


  • xgboost公式推導

xgboost的目標函數(shù)由兩部分組成筹我,一個是loss函數(shù)\sum_{i=1}^n l(y_i,\hat y_i),一個是正則項\sum_{k=1}^t {}\Omega(f_t)套蒂。loss函數(shù)是評價每個樣本的預測值和真實值的差異蕊退,正則項是解決模型過擬合,是調(diào)節(jié)每棵樹的葉子數(shù)和葉子節(jié)點的權(quán)重值幽污。也就是這個正則項才使xgboost這種提升算法嚷辅,交之前的算法更為優(yōu)秀。所以xgboost原始的公式如下:

obj = \sum_{i=1}^n l(y_i,\hat y_i) +\sum_{k=1}^t {}\Omega(f_t)

在開始推導之前距误,先知道這幾個知識:


\sum_{i=1}^n l(y_i,\hat y_i) 可以采用均方誤差簸搞、log損失函數(shù)等自定義的函數(shù)都可以(二階可導)。

\sum_{k=1}^t \Omega(f_t) = \sum_{k=1}^t (\gamma T + {1\over2}\sum_{j=1}^T w_j^2) 式中,k表示第幾課樹准潭,T表示葉子節(jié)點個數(shù)趁俊,w_j^2表示每個葉子節(jié)點的權(quán)重值w_j^= {\mit{W}}_{q(x_i)}

\sf {\color{red}{\text{泰 勒 展 開 :}}} f(x+\Delta x) = f(x) + f^{'}(x)\Delta x + {1\over2}f^{''}(x){\Delta x}^2


推導開始:
\begin{align} obj & = \sum_{i=1}^n l(y_i,\hat y_i) +\sum_{k=1}^t {}\Omega(f_t) \\ & = \sum_{i=1}^n \color{red} {l(y_i,\hat y_{i-1}+f_t(x_i))} +\sum_{k=1}^t {}\Omega(f_t) \\ &= \sum_{i=1}^n \color{red} {\{l(y_i,\hat y_{i-1}) +l^{'}(y,\hat y_{i-1})f_t(x_i) +{1\over2}l^{''}(y,\hat y_{i-1}){f_t(x_i)}^2 \}} +\sum_{k=1}^t {}\Omega(f_t) \\ & = \sum_{i=1}^n \color{red} {\{l^{'}(y,\hat y_{i-1})f_t(x_i) +{1\over2}l^{''}(y,\hat y_{i-1}){f_t(x_i)}^2 \}} +\sum_{k=1}^t {}\Omega(f_t) + C \\ & = \sum_{i=1}^n {\{l^{'}()f_t(x_i) +{1\over2}l^{''}(){f_t(x_i)}^2 \}} +\sum_{k=1}^t {}\Omega(f_t) + C \end{align}

  • 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)

\sf{\color{red}{\text{最 后 來 一 個 完 整 的 案 例 代 碼 : }}}

待補充········

Bagging算法

遇上再寫·······

Stacking算法

遇上再寫·······

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末挡逼,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子腻豌,更是在濱河造成了極大的恐慌家坎,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件吝梅,死亡現(xiàn)場離奇詭異虱疏,居然都是意外死亡,警方通過查閱死者的電腦和手機苏携,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門做瞪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人右冻,你說我怎么就攤上這事穿扳。” “怎么了国旷?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵矛物,是天一觀的道長。 經(jīng)常有香客問我跪但,道長履羞,這世上最難降的妖魔是什么峦萎? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮忆首,結(jié)果婚禮上爱榔,老公的妹妹穿的比我還像新娘。我一直安慰自己糙及,他們只是感情好详幽,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著浸锨,像睡著了一般唇聘。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上柱搜,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天迟郎,我揣著相機與錄音,去河邊找鬼聪蘸。 笑死宪肖,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的健爬。 我是一名探鬼主播控乾,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼娜遵!你這毒婦竟也來了蜕衡?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤魔熏,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后鸽扁,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蒜绽,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年桶现,在試婚紗的時候發(fā)現(xiàn)自己被綠了躲雅。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡骡和,死狀恐怖相赁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情慰于,我是刑警寧澤钮科,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站婆赠,受9級特大地震影響绵脯,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一蛆挫、第九天 我趴在偏房一處隱蔽的房頂上張望赃承。 院中可真熱鬧,春花似錦悴侵、人聲如沸瞧剖。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽抓于。三九已至,卻和暖如春巴元,著一層夾襖步出監(jiān)牢的瞬間毡咏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工逮刨, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留呕缭,地道東北人。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓修己,卻偏偏與公主長得像恢总,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子睬愤,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容