【視頻】Boosting集成學(xué)習(xí)原理與R語言提升回歸樹BRT預(yù)測短鰭鰻分布生態(tài)學(xué)實例
原文鏈接:http://tecdat.cn/?p=22482
原文出處:拓端數(shù)據(jù)部落公眾號
為什么要使用Boosting?
單一模型的預(yù)測往往會有缺陷,為了解決復(fù)雜的問題,我們需要集成學(xué)習(xí)通過組合多個模型來提高機器學(xué)習(xí)的預(yù)測性能。
視頻:Boosting集成學(xué)習(xí)原理與R語言提升回歸樹BRT預(yù)測短鰭鰻分布生態(tài)學(xué)實例
Boosting集成學(xué)習(xí)原理與R語言提升回歸樹BRT預(yù)測短鰭鰻分布生態(tài)學(xué)實例
,時長10:25
假設(shè)給定包含貓和其他動物圖像的數(shù)據(jù)集,您被要求構(gòu)建一個模型,可以將這些圖像分為兩個單獨的類。像其他人一樣,您將首先使用一些規(guī)則來識別圖像,如下所示:

圖像有尖耳朵:圖像判斷為貓
圖像有一個更寬的嘴結(jié)構(gòu):圖像判斷為狗
圖像有貓形眼睛:圖像判斷為貓
圖像有鋒利的爪子:圖像判斷為貓
所有這些規(guī)則都可以幫助我們識別圖像是狗還是貓,但是,如果我們要根據(jù)單一規(guī)則對圖像進行分類,那么預(yù)測就會有缺陷。這些規(guī)則中的每一個都被單獨稱為弱學(xué)習(xí)器,因為這些規(guī)則不足以將圖像分類為貓或狗。
因此,為了確保我們的預(yù)測更準確,我們可以通過使用多數(shù)規(guī)則或加權(quán)平均來組合來自這些弱學(xué)習(xí)器中的每一個的預(yù)測。這構(gòu)成了一個強大的學(xué)習(xí)者模型。
在上面的例子中,我們定義了 4 個弱學(xué)習(xí)器,這些規(guī)則中的大多數(shù)(即 4 個學(xué)習(xí)器中有 3 個將圖像預(yù)測為貓)為我們提供了預(yù)測圖像是一只貓。因此,我們的最終輸出是一只貓。


什么是Boosting?
Boosting 是一種集成學(xué)習(xí)技術(shù),它使用一組機器學(xué)習(xí)算法將弱學(xué)習(xí)器轉(zhuǎn)換為強學(xué)習(xí)器,以提高模型的準確性。
集成學(xué)習(xí)是一種通過組合多個學(xué)習(xí)器來提高機器學(xué)習(xí)模型性能的方法,它試圖從弱分類器的數(shù)量中構(gòu)建一個強分類器。它是通過串聯(lián)使用弱模型來構(gòu)建模型來完成的。與單一模型相比,這種類型的學(xué)習(xí)構(gòu)建的模型具有更高的效率和準確性。這就是為什么使用集成方法贏得市場領(lǐng)先的比賽,如 Netflix 推薦比賽、Kaggle 比賽等。

AdaBoost是第一個真正成功的為二分類而開發(fā)的Boosting算法。AdaBoost是Adaptive Boosting的縮寫,是一種非常流行的提升技術(shù),它將多個“弱分類器”組合成一個“強分類器”。



上圖以非常簡單的方式解釋了AdaBoost算法。讓我們嘗試逐步理解它:?
模型1由10個數(shù)據(jù)點組成,它們由兩種類型組成,即加號和減號,其中5個是加號,另外5個是減號,并且每個數(shù)據(jù)點最初都被分配了相同的權(quán)重。第一個模型嘗試對數(shù)據(jù)點進行分類并生成一條垂直分隔線,但它錯誤地將3加號分類為減號。
模型2由來自先前模型的10個數(shù)據(jù)點組成,其中3個錯誤分類的加號被加權(quán)更多,以便當(dāng)前模型嘗試更多地正確分類這些加號。該模型生成了一條垂直分隔線,可以正確分類先前錯誤分類的加號,但在此嘗試中,它錯誤地分類了三個減號。
模型3由來自先前模型的10個數(shù)據(jù)點組成,其中3個錯誤分類的減號的權(quán)重更高,因此當(dāng)前模型嘗試更多地正確分類這些減號。該模型生成一個水平分隔線,可以正確分類先前錯誤分類的減號。
模型4將模型1、模型2 和模型3 組合在一起,以構(gòu)建一個比使用的任何單個模型都要好得多的強大預(yù)測模型。
boosting的利弊
與其他類型的模型相比,boosting的明顯好處是它能夠生成具有高預(yù)測準確性的模型。
一個潛在的缺點是擬合的提升模型很難解釋。雖然它可能提供了預(yù)測新數(shù)據(jù)因變量的巨大能力,但很難解釋它執(zhí)行此操作的確切過程。

Boosting的種類有哪些?
Boosting 算法分為以下三種類型:
剛才提到的AdaBoost(自適應(yīng)提升)算法。
梯度提升算法。
XGBoost 算法。

梯度提升
Gradient Boosting 也是基于順序集成學(xué)習(xí)。這里的基礎(chǔ)學(xué)習(xí)器是按順序生成的,這樣當(dāng)前的基礎(chǔ)學(xué)習(xí)器總是比前一個更有效,即整個模型隨著每次迭代而順序改進。
這種類型的提升的不同之處在于錯誤分類結(jié)果的權(quán)重不會增加,相反,梯度提升方法試圖通過添加一個添加弱學(xué)習(xí)者的新模型來優(yōu)化先前學(xué)習(xí)者的損失函數(shù),以減少損失函數(shù)。
這里的主要思想是克服先前學(xué)習(xí)者預(yù)測中的錯誤。這種類型的提升具有三個主要組成部分:
1.需要改進的損失函數(shù)。
2.用于計算預(yù)測和形成強學(xué)習(xí)器的弱學(xué)習(xí)器。
3.將規(guī)范化損失函數(shù)的加法模型。
與 AdaBoost 一樣,梯度提升也可用于分類和回歸問題。

XGBoost?
XGBoost 是 Gradient Boosting 方法的高級版本,字面意思是 eXtreme Gradient Boosting。陳天啟開發(fā)的 XGBoost 屬于分布式機器學(xué)習(xí)社區(qū)(DMLC)的范疇。
該算法的主要目的是提高計算速度和效率。Gradient Descent Boosting 算法以較慢的速度計算輸出,因為它們按順序分析數(shù)據(jù)集,因此 XGBoost 用于提升或極大提升模型的性能。
XGBoost 旨在專注于計算速度和模型效率。XGBoost 提供的主要功能有:
并行創(chuàng)建決策樹。
實施用于評估大型復(fù)雜模型的分布式計算方法。
使用核外計算分析龐大的數(shù)據(jù)集。
實施緩存優(yōu)化以充分利用資源。

R語言生態(tài)學(xué)建模:提升回歸樹(BRT)預(yù)測短鰭鰻生存分布和影響因素
這是一個簡短的教程,在R中擬合BRT(提升回歸樹)模型。我們的目標(biāo)是使BRT(提升回歸樹)模型應(yīng)用于生態(tài)學(xué)數(shù)據(jù),并解釋結(jié)果。
本教程的目的是幫助你學(xué)習(xí)如何在R中開發(fā)一個BRT模型。
?示例數(shù)據(jù)
有兩套短鰭鰻的記錄數(shù)據(jù)。一個用于模型訓(xùn)練(建立),一個用于模型測試(評估)。在下面的例子中,我們加載的是訓(xùn)練數(shù)據(jù)。存在(1)和不存在(0)被記錄在第2列。環(huán)境變量在第3至14列。
>?head(train)

擬合模型
擬合gbm模型,你需要決定使用什么設(shè)置,本文為你提供經(jīng)驗法則使用的信息。這些數(shù)據(jù)有1000個地點,包括202條短鰭鰻的存在記錄。你可以假設(shè):1. 有足夠的數(shù)據(jù)來建立具有合理復(fù)雜性的相互作用模型? 2. 大約0.01的lr學(xué)習(xí)率可能是一個合理的初始點。下面的例子顯示如何確定最佳樹數(shù)(nt)。
step(data=?train,??x?=?3:13,
?family?=?"bernoulli",??comp?=?5,
?lr?=?0.01,?bag.fr?=?0.5)
對提升回歸樹模型進行交叉驗證優(yōu)化。
使用1000個觀測值和11個預(yù)測因子,創(chuàng)建10個50棵樹的初始模型。


上面我們使用了交叉驗證的。我們定義了:數(shù)據(jù);預(yù)測變量;因變量--表示物種數(shù)據(jù)的列號;樹的復(fù)雜度--我們首先嘗試樹的復(fù)雜度為5;學(xué)習(xí)率--我們嘗試用0. 01。
運行一個如上所述的模型,將輸出進度報告,做出圖形。首先,你能看到的東西。這個模型是用默認的10倍交叉驗證法建立的。黑色實心曲線是預(yù)測偏差變化的平均值,點狀曲線是1個標(biāo)準誤差(即在交叉驗證上測量的結(jié)果)。紅線表示平均值的最小值,綠線表示生成該值的樹的數(shù)量。模型對象中返回的最終模型是在完整的數(shù)據(jù)集上建立的,使用的是最優(yōu)的樹數(shù)量。

length(fitted)
返回的結(jié)果包含 fitted - 來自最終樹的擬合值,fitted.vars - 擬合值的方差, residuals - 擬合值的殘差,contribution - 變量的相對重要性。statistics - 相關(guān)的評估統(tǒng)計量。cv.statistics 這些是最合適的評估統(tǒng)計數(shù)據(jù)。
我們在每個交叉驗證中計算每個統(tǒng)計量(在確定的最佳樹數(shù)下,根據(jù)所有交叉驗證中預(yù)測偏差的平均變化進行計算),然后在此呈現(xiàn)這些基于交叉驗證的統(tǒng)計量的平均值和標(biāo)準誤差。weights - 擬合模型時使用的權(quán)重(默認情況下,每個觀測值為 "1",即權(quán)重相等)。trees. fitted - 階段性擬合過程中每一步所擬合的樹的數(shù)量記錄;training.loss.values - 訓(xùn)練數(shù)據(jù)上偏差的階段性變化 ,cv.values - 階段性過程中每一步所計算的預(yù)測偏差的CV估計值的平均值。
你可以用摘要函數(shù)查看變量的重要性

>?summary(lr?)


選擇設(shè)置
以上是對設(shè)置的初步猜測,使用了Elith等人(2008)中討論的經(jīng)驗法則。它做出的模型只有650棵樹,所以我們的下一步將是減少lr。例如,嘗試lr = 0.005,爭取超過1000棵樹。
step(data=train,??x?=?3:13,??
??tree.co??=?5,
+?lr?=?0.005

為了探索其他設(shè)置是否表現(xiàn)更好,你可以將數(shù)據(jù)分成訓(xùn)練集和測試集,或者使用交叉驗證結(jié)果,改變tc、lr和bagging,然后比較結(jié)果。
簡化模型
簡化會建立了許多模型,所以它可能很慢。在其中,我們評估了簡化lr為0.005的模型的價值,但只測試剔除最多5個變量("n.drop "參數(shù);默認是自動規(guī)則一直持續(xù)到預(yù)測偏差的平均變化超過gbm.step中計算的原始標(biāo)準誤差)。
對于我們的運行,估計要剔除的最佳變量數(shù)是1;可以使用紅色垂直線指示的數(shù)字?,F(xiàn)在,建立一個剔除1個預(yù)測變量的模型,使用[[1]]表示我們要剔除一個變量。
step(??x=?pred.list\[\[1\]\],?)
現(xiàn)在這已經(jīng)形成了一個新的模型,但是考慮到我們并不特別想要一個更簡單的模型(因為在這種規(guī)模的數(shù)據(jù)集中,包含的變量貢獻很小是可以接受的),我們不會繼續(xù)使用它。
繪制模型的函數(shù)和擬合值
由我們的函數(shù)創(chuàng)建的BRT模型的擬合函數(shù)可以用plot來繪制。
>??plot(?lr005?)
這個函數(shù)的附加參數(shù)允許對圖進行平滑表示。根據(jù)環(huán)境空間內(nèi)觀測值的分布,擬合函數(shù)可以給出與每個預(yù)測因子有關(guān)的擬合值分布。
?fits(?lr005)
每張圖上方的數(shù)值表示與每個非因素預(yù)測因子有關(guān)的擬合值的加權(quán)平均值。
繪制交互作用
該代碼評估數(shù)據(jù)中成對的交互作用的程度。
?inter(?lr005)
返回一個列表。前兩個部分是對結(jié)果的總結(jié),首先是5個最重要的交互作用的排名列表,其次是所有交互作用的表格。
f$intera
你可以像這樣繪制交互作用。
persp(?lr005,??z.range=c(0,0.6)
對新數(shù)據(jù)進行預(yù)測
如果您想對一組地點進行預(yù)測(而不是對整個地圖進行預(yù)測),一般的程序是建立一個數(shù)據(jù)框架,行代表地點,列代表您模型中的變量。我們用于預(yù)測站點的數(shù)據(jù)集在一個名為test的文件中。"列需要轉(zhuǎn)換為一個因子變量,其水平與建模數(shù)據(jù)中的水平一致。使用predict對BRT模型中的站點進行預(yù)測,預(yù)測結(jié)果在一個名為preds的向量中。
preds?<-?predict(lr005,test,
deviance(obs=test,?pred=preds)
>?d?<-?cbind(obs,?preds)
>?e?<-?evaluate(p=pres,?a=abs)

gbm中預(yù)測的一個有用的特點是可以預(yù)測不同數(shù)量的樹。
tree<-?seq(100,?5000,?by=100)
predict(?n.trees=tree,?"response")

上面的代碼會形成一個矩陣,每一列都是模型對tree.list中該元素所指定的樹數(shù)量的預(yù)測,例如,第5列的預(yù)測是針對tree.list[5]=500棵樹?,F(xiàn)在來計算所有這些結(jié)果的偏差,然后繪制。
>?for?(i?in?1:50)?{
?calc.devi(obs,
+?pred\[,i\])
+?}
>?plot(tree.list,deviance

空間預(yù)測
這里我們展示了如何對整張地圖進行預(yù)測。
>?plot(grids)

我們用一個常量值("因子 "類)創(chuàng)建一個data.frame,并將其傳遞給預(yù)測函數(shù)。
>?p?<-?predict(grids,?lr005,
>?plot(p)


本文摘選《R語言生態(tài)學(xué)建模:增強回歸樹(BRT)預(yù)測短鰭鰻生存分布和影響因素》,點擊“閱讀原文”獲取全文完整資料。
點擊標(biāo)題查閱往期內(nèi)容
Python決策樹、隨機森林、樸素貝葉斯、KNN(K-最近鄰居)分類分析銀行拉新活動挖掘潛在貸款客戶
R語言邏輯回歸(Logistic Regression)、回歸決策樹、隨機森林信用卡違約分析信貸數(shù)據(jù)集
R語言基于Bagging分類的邏輯回歸(Logistic Regression)、決策樹、森林分析心臟病患者
R語言樣條曲線、決策樹、Adaboost、梯度提升(GBM)算法進行回歸、分類和動態(tài)可視化
R語言用主成分PCA、?邏輯回歸、決策樹、隨機森林分析心臟病數(shù)據(jù)并高維可視化
matlab使用分位數(shù)隨機森林(QRF)回歸樹檢測異常值
R語言用邏輯回歸、決策樹和隨機森林對信貸數(shù)據(jù)集進行分類預(yù)測
R語言中使用線性模型、回歸決策樹自動組合特征因子水平
R語言中自編基尼系數(shù)的CART回歸決策樹的實現(xiàn)
Python對商店數(shù)據(jù)進行l(wèi)stm和xgboost銷售量時間序列建模預(yù)測分析
R語言基于樹的方法:決策樹,隨機森林,Bagging,增強樹
R語言實現(xiàn)偏最小二乘回歸法 partial least squares (PLS)回歸
R語言多項式回歸擬合非線性關(guān)系
R語言邏輯回歸(Logistic回歸)模型分類預(yù)測病人冠心病風(fēng)險
R語言用局部加權(quán)回歸(Lowess)對logistic邏輯回歸診斷和殘差分析
R語言混合效應(yīng)邏輯回歸(mixed effects logistic)模型分析肺癌數(shù)據(jù)