-
當(dāng)前位置:首頁(yè) > 創(chuàng)意學(xué)院 > 技術(shù) > 專題列表 > 正文
boosting算法(boosting算法和bagging算法的區(qū)別)
大家好!今天讓創(chuàng)意嶺的小編來(lái)大家介紹下關(guān)于boosting算法的問(wèn)題,以下是小編對(duì)此問(wèn)題的歸納整理,讓我們一起來(lái)看看吧。
開(kāi)始之前先推薦一個(gè)非常厲害的Ai人工智能工具,一鍵生成原創(chuàng)文章、方案、文案、工作計(jì)劃、工作報(bào)告、論文、代碼、作文、做題和對(duì)話答疑等等
只需要輸入關(guān)鍵詞,就能返回你想要的內(nèi)容,越精準(zhǔn),寫出的就越詳細(xì),有微信小程序端、在線網(wǎng)頁(yè)版、PC客戶端
官網(wǎng):https://ai.de1919.com。
創(chuàng)意嶺作為行業(yè)內(nèi)優(yōu)秀的企業(yè),服務(wù)客戶遍布全球各地,如需了解SEO相關(guān)業(yè)務(wù)請(qǐng)撥打電話175-8598-2043,或添加微信:1454722008
本文目錄:
一、Bagging與Boosting最大的不同在哪里?它們對(duì)模型性能最大的貢獻(xiàn)在哪里?
兩種不同的集成算法,Bagging采用重復(fù)取樣:boostrap 每個(gè)個(gè)體分類器所采用的訓(xùn)練樣本都是從訓(xùn)練集中按等概率抽取的,因此Bagging的各子網(wǎng)能夠很好的覆蓋訓(xùn)練樣本空間,從而有著良好的穩(wěn)定性。
而Boosting注重分類錯(cuò)誤的樣本,將個(gè)體子網(wǎng)分類錯(cuò)誤的訓(xùn)練樣本的權(quán)重提高,降低分類錯(cuò)誤的樣本權(quán)重,并依據(jù)修改后的樣本權(quán)重來(lái)生成新的訓(xùn)練樣本空間并用來(lái)訓(xùn)練下一個(gè)個(gè)體分類器。然而,由于Boosting算法可能會(huì)將噪聲樣本或分類邊界樣本的權(quán)重過(guò)分累積,因此Boosting很不穩(wěn)定,但其在通常情況下,其泛化能力是最理想的集成算法之一。
你得自己去查文獻(xiàn),別來(lái)這問(wèn),這沒(méi)人做學(xué)術(shù)的,我也是偶爾看到你的提問(wèn)。
二、機(jī)器學(xué)習(xí)一般常用的算法有哪些?
機(jī)器學(xué)習(xí)是人工智能的核心技術(shù),是學(xué)習(xí)人工智能必不可少的環(huán)節(jié)。機(jī)器學(xué)習(xí)中有很多算法,能夠解決很多以前難以企的問(wèn)題,機(jī)器學(xué)習(xí)中涉及到的算法有不少,下面小編就給大家普及一下這些算法。
一、線性回歸
一般來(lái)說(shuō),線性回歸是統(tǒng)計(jì)學(xué)和機(jī)器學(xué)習(xí)中最知名和最易理解的算法之一。這一算法中我們可以用來(lái)預(yù)測(cè)建模,而預(yù)測(cè)建模主要關(guān)注最小化模型誤差或者盡可能作出最準(zhǔn)確的預(yù)測(cè),以可解釋性為代價(jià)。我們將借用、重用包括統(tǒng)計(jì)學(xué)在內(nèi)的很多不同領(lǐng)域的算法,并將其用于這些目的。當(dāng)然我們可以使用不同的技術(shù)從數(shù)據(jù)中學(xué)習(xí)線性回歸模型,例如用于普通最小二乘法和梯度下降優(yōu)化的線性代數(shù)解。就目前而言,線性回歸已經(jīng)存在了200多年,并得到了廣泛研究。使用這種技術(shù)的一些經(jīng)驗(yàn)是盡可能去除非常相似(相關(guān))的變量,并去除噪音。這是一種快速、簡(jiǎn)單的技術(shù)。
二、Logistic 回歸
它是解決二分類問(wèn)題的首選方法。Logistic 回歸與線性回歸相似,目標(biāo)都是找到每個(gè)輸入變量的權(quán)重,即系數(shù)值。與線性回歸不同的是,Logistic 回歸對(duì)輸出的預(yù)測(cè)使用被稱為 logistic 函數(shù)的非線性函數(shù)進(jìn)行變換。logistic 函數(shù)看起來(lái)像一個(gè)大的S,并且可以將任何值轉(zhuǎn)換到0到1的區(qū)間內(nèi)。這非常實(shí)用,因?yàn)槲覀兛梢砸?guī)定logistic函數(shù)的輸出值是0和1并預(yù)測(cè)類別值。像線性回歸一樣,Logistic 回歸在刪除與輸出變量無(wú)關(guān)的屬性以及非常相似的屬性時(shí)效果更好。它是一個(gè)快速的學(xué)習(xí)模型,并且對(duì)于二分類問(wèn)題非常有效。
三、線性判別分析(LDA)
在前面我們介紹的Logistic 回歸是一種分類算法,傳統(tǒng)上,它僅限于只有兩類的分類問(wèn)題。而LDA的表示非常簡(jiǎn)單直接。它由數(shù)據(jù)的統(tǒng)計(jì)屬性構(gòu)成,對(duì)每個(gè)類別進(jìn)行計(jì)算。單個(gè)輸入變量的 LDA包括兩個(gè),第一就是每個(gè)類別的平均值,第二就是所有類別的方差。而在線性判別分析,進(jìn)行預(yù)測(cè)的方法是計(jì)算每個(gè)類別的判別值并對(duì)具備最大值的類別進(jìn)行預(yù)測(cè)。該技術(shù)假設(shè)數(shù)據(jù)呈高斯分布,因此最好預(yù)先從數(shù)據(jù)中刪除異常值。這是處理分類預(yù)測(cè)建模問(wèn)題的一種簡(jiǎn)單而強(qiáng)大的方法。
四、決策樹
決策樹是預(yù)測(cè)建模機(jī)器學(xué)習(xí)的一種重要算法。決策樹模型的表示是一個(gè)二叉樹。這是算法和數(shù)據(jù)結(jié)構(gòu)中的二叉樹,沒(méi)什么特別的。每個(gè)節(jié)點(diǎn)代表一個(gè)單獨(dú)的輸入變量x和該變量上的一個(gè)分割點(diǎn)。而決策樹的葉節(jié)點(diǎn)包含一個(gè)用于預(yù)測(cè)的輸出變量y。通過(guò)遍歷該樹的分割點(diǎn),直到到達(dá)一個(gè)葉節(jié)點(diǎn)并輸出該節(jié)點(diǎn)的類別值就可以作出預(yù)測(cè)。當(dāng)然決策樹的有點(diǎn)就是決策樹學(xué)習(xí)速度和預(yù)測(cè)速度都很快。它們還可以解決大量問(wèn)題,并且不需要對(duì)數(shù)據(jù)做特別準(zhǔn)備。
五、樸素貝葉斯
其實(shí)樸素貝葉斯是一個(gè)簡(jiǎn)單但是很強(qiáng)大的預(yù)測(cè)建模算法。而這個(gè)模型由兩種概率組成,這兩種概率都可以直接從訓(xùn)練數(shù)據(jù)中計(jì)算出來(lái)。第一種就是每個(gè)類別的概率,第二種就是給定每個(gè) x 的值,每個(gè)類別的條件概率。一旦計(jì)算出來(lái),概率模型可用于使用貝葉斯定理對(duì)新數(shù)據(jù)進(jìn)行預(yù)測(cè)。當(dāng)我們的數(shù)據(jù)是實(shí)值時(shí),通常假設(shè)一個(gè)高斯分布,這樣我們可以簡(jiǎn)單的估計(jì)這些概率。而樸素貝葉斯之所以是樸素的,是因?yàn)樗僭O(shè)每個(gè)輸入變量是獨(dú)立的。這是一個(gè)強(qiáng)大的假設(shè),真實(shí)的數(shù)據(jù)并非如此,但是,該技術(shù)在大量復(fù)雜問(wèn)題上非常有用。所以說(shuō),樸素貝葉斯是一個(gè)十分實(shí)用的功能。
六、K近鄰算法
K近鄰算法簡(jiǎn)稱KNN算法,KNN 算法非常簡(jiǎn)單且有效。KNN的模型表示是整個(gè)訓(xùn)練數(shù)據(jù)集。KNN算法在整個(gè)訓(xùn)練集中搜索K個(gè)最相似實(shí)例(近鄰)并匯總這K個(gè)實(shí)例的輸出變量,以預(yù)測(cè)新數(shù)據(jù)點(diǎn)。對(duì)于回歸問(wèn)題,這可能是平均輸出變量,對(duì)于分類問(wèn)題,這可能是眾數(shù)類別值。而其中的訣竅在于如何確定數(shù)據(jù)實(shí)例間的相似性。如果屬性的度量單位相同,那么最簡(jiǎn)單的技術(shù)是使用歐幾里得距離,我們可以根據(jù)每個(gè)輸入變量之間的差值直接計(jì)算出來(lái)其數(shù)值。當(dāng)然,KNN需要大量?jī)?nèi)存或空間來(lái)存儲(chǔ)所有數(shù)據(jù),但是只有在需要預(yù)測(cè)時(shí)才執(zhí)行計(jì)算。我們還可以隨時(shí)更新和管理訓(xùn)練實(shí)例,以保持預(yù)測(cè)的準(zhǔn)確性。
七、Boosting 和 AdaBoost
首先,Boosting 是一種集成技術(shù),它試圖集成一些弱分類器來(lái)創(chuàng)建一個(gè)強(qiáng)分類器。這通過(guò)從訓(xùn)練數(shù)據(jù)中構(gòu)建一個(gè)模型,然后創(chuàng)建第二個(gè)模型來(lái)嘗試糾正第一個(gè)模型的錯(cuò)誤來(lái)完成。一直添加模型直到能夠完美預(yù)測(cè)訓(xùn)練集,或添加的模型數(shù)量已經(jīng)達(dá)到最大數(shù)量。而AdaBoost 是第一個(gè)為二分類開(kāi)發(fā)的真正成功的 boosting 算法。這是理解 boosting 的最佳起點(diǎn)?,F(xiàn)代 boosting 方法建立在 AdaBoost 之上,最顯著的是隨機(jī)梯度提升。當(dāng)然,AdaBoost 與短決策樹一起使用。在第一個(gè)決策樹創(chuàng)建之后,利用每個(gè)訓(xùn)練實(shí)例上樹的性能來(lái)衡量下一個(gè)決策樹應(yīng)該對(duì)每個(gè)訓(xùn)練實(shí)例付出多少注意力。難以預(yù)測(cè)的訓(xùn)練數(shù)據(jù)被分配更多權(quán)重,而容易預(yù)測(cè)的數(shù)據(jù)分配的權(quán)重較少。依次創(chuàng)建模型,每一個(gè)模型在訓(xùn)練實(shí)例上更新權(quán)重,影響序列中下一個(gè)決策樹的學(xué)習(xí)。在所有決策樹建立之后,對(duì)新數(shù)據(jù)進(jìn)行預(yù)測(cè),并且通過(guò)每個(gè)決策樹在訓(xùn)練數(shù)據(jù)上的精確度評(píng)估其性能。所以說(shuō),由于在糾正算法錯(cuò)誤上投入了太多注意力,所以具備已刪除異常值的干凈數(shù)據(jù)十分重要。
八、學(xué)習(xí)向量量化算法(簡(jiǎn)稱 LVQ)
學(xué)習(xí)向量量化也是機(jī)器學(xué)習(xí)其中的一個(gè)算法??赡艽蠹也恢赖氖牵琄近鄰算法的一個(gè)缺點(diǎn)是我們需要遍歷整個(gè)訓(xùn)練數(shù)據(jù)集。學(xué)習(xí)向量量化算法(簡(jiǎn)稱 LVQ)是一種人工神經(jīng)網(wǎng)絡(luò)算法,它允許你選擇訓(xùn)練實(shí)例的數(shù)量,并精確地學(xué)習(xí)這些實(shí)例應(yīng)該是什么樣的。而學(xué)習(xí)向量量化的表示是碼本向量的集合。這些是在開(kāi)始時(shí)隨機(jī)選擇的,并逐漸調(diào)整以在學(xué)習(xí)算法的多次迭代中最好地總結(jié)訓(xùn)練數(shù)據(jù)集。在學(xué)習(xí)之后,碼本向量可用于預(yù)測(cè)。最相似的近鄰?fù)ㄟ^(guò)計(jì)算每個(gè)碼本向量和新數(shù)據(jù)實(shí)例之間的距離找到。然后返回最佳匹配單元的類別值或作為預(yù)測(cè)。如果大家重新調(diào)整數(shù)據(jù),使其具有相同的范圍,就可以獲得最佳結(jié)果。當(dāng)然,如果大家發(fā)現(xiàn)KNN在大家數(shù)據(jù)集上達(dá)到很好的結(jié)果,請(qǐng)嘗試用LVQ減少存儲(chǔ)整個(gè)訓(xùn)練數(shù)據(jù)集的內(nèi)存要求
三、基于R語(yǔ)言的梯度推進(jìn)算法介紹
基于R語(yǔ)言的梯度推進(jìn)算法介紹
通常來(lái)說(shuō),我們可以從兩個(gè)方面來(lái)提高一個(gè)預(yù)測(cè)模型的準(zhǔn)確性:完善特征工程(feature engineering)或是直接使用Boosting算法。通過(guò)大量數(shù)據(jù)科學(xué)競(jìng)賽的試煉,我們可以發(fā)現(xiàn)人們更鐘愛(ài)于Boosting算法,這是因?yàn)楹推渌椒ㄏ啾龋诋a(chǎn)生類似的結(jié)果時(shí)往往更加節(jié)約時(shí)間。
Boosting算法有很多種,比如梯度推進(jìn)(Gradient Boosting)、XGBoost、AdaBoost、Gentle Boost等等。每一種算法都有自己不同的理論基礎(chǔ),通過(guò)對(duì)它們進(jìn)行運(yùn)用,算法之間細(xì)微的差別也能夠被我們所察覺(jué)。如果你是一個(gè)新手,那么太好了,從現(xiàn)在開(kāi)始,你可以用大約一周的時(shí)間來(lái)了解和學(xué)習(xí)這些知識(shí)。
在本文中,筆者將會(huì)向你介紹梯度推進(jìn)算法的基本概念及其復(fù)雜性,此外,文中還分享了一個(gè)關(guān)于如何在R語(yǔ)言中對(duì)該算法進(jìn)行實(shí)現(xiàn)的例子。
快問(wèn)快答每當(dāng)談及Boosting算法,下列兩個(gè)概念便會(huì)頻繁的出現(xiàn):Bagging和Boosting。那么,這兩個(gè)概念是什么,它們之間究竟有什么區(qū)別呢?讓我們快速簡(jiǎn)要地在這里解釋一下:
Bagging:對(duì)數(shù)據(jù)進(jìn)行隨機(jī)抽樣、建立學(xué)習(xí)算法并且通過(guò)簡(jiǎn)單平均來(lái)得到最終概率結(jié)論的一種方法。
Boosting:與Bagging類似,但在樣本選擇方面顯得更為聰明一些——在算法進(jìn)行過(guò)程中,對(duì)難以進(jìn)行分類的觀測(cè)值賦予了越來(lái)越大的權(quán)重。
我們知道你可能會(huì)在這方面產(chǎn)生疑問(wèn):什么叫做越來(lái)越大?我怎么知道我應(yīng)該給一個(gè)被錯(cuò)分的觀測(cè)值額外增加多少的權(quán)重呢?請(qǐng)保持冷靜,我們將在接下來(lái)的章節(jié)里為你解答。
從一個(gè)簡(jiǎn)單的例子出發(fā)假設(shè)你有一個(gè)初始的預(yù)測(cè)模型M需要進(jìn)行準(zhǔn)確度的提高,你知道這個(gè)模型目前的準(zhǔn)確度為80%(通過(guò)任何形式度量),那么接下來(lái)你應(yīng)該怎么做呢?
有一個(gè)方法是,我們可以通過(guò)一組新的輸入變量來(lái)構(gòu)建一個(gè)全新的模型,然后對(duì)它們進(jìn)行集成學(xué)習(xí)。但是,筆者在此要提出一個(gè)更簡(jiǎn)單的建議,如下所示:
Y = M(x) + error
如果我們能夠觀測(cè)到誤差項(xiàng)并非白噪聲,而是與我們的模型輸出(Y)有著相同的相關(guān)性,那么我們?yōu)槭裁床煌ㄟ^(guò)這個(gè)誤差項(xiàng)來(lái)對(duì)模型的準(zhǔn)確度進(jìn)行提升呢?比方說(shuō):
error = G(x) + error2
或許,你會(huì)發(fā)現(xiàn)模型的準(zhǔn)確率提高到了一個(gè)更高的數(shù)字,比如84%。那么下一步讓我們對(duì)error2進(jìn)行回歸。
error2 = H(x) + error3
然后我們將上述式子組合起來(lái):
Y = M(x) + G(x) + H(x) + error3
這樣的結(jié)果可能會(huì)讓模型的準(zhǔn)確度更進(jìn)一步,超過(guò)84%。如果我們能像這樣為三個(gè)學(xué)習(xí)算法找到一個(gè)最佳權(quán)重分配,
Y = alpha * M(x) + beta * G(x) + gamma * H(x) + error4
那么,我們可能就構(gòu)建了一個(gè)更好的模型。
上面所述的便是Boosting算法的一個(gè)基本原則,當(dāng)我初次接觸到這一理論時(shí),我的腦海中很快地冒出了這兩個(gè)小問(wèn)題:
1.我們?nèi)绾闻袛嗷貧w/分類方程中的誤差項(xiàng)是不是白噪聲?如果無(wú)法判斷,我們?cè)趺茨苡眠@種算法呢?
2.如果這種算法真的這么強(qiáng)大,我們是不是可以做到接近100%的模型準(zhǔn)確度?
接下來(lái),我們將會(huì)對(duì)這些問(wèn)題進(jìn)行解答,但是需要明確的是,Boosting算法的目標(biāo)對(duì)象通常都是一些弱算法,而這些弱算法都不具備只保留白噪聲的能力;其次,Boosting有可能導(dǎo)致過(guò)度擬合,所以我們必須在合適的點(diǎn)上停止這個(gè)算法。
試著想象一個(gè)分類問(wèn)題請(qǐng)看下圖:
從最左側(cè)的圖開(kāi)始看,那條垂直的線表示我們運(yùn)用算法所構(gòu)建的分類器,可以發(fā)現(xiàn)在這幅圖中有3/10的觀測(cè)值的分類情況是錯(cuò)誤的。接著,我們給予那三個(gè)被誤分的“+”型的觀測(cè)值更高的權(quán)重,使得它們?cè)跇?gòu)建分類器時(shí)的地位非常重要。這樣一來(lái),垂直線就直接移動(dòng)到了接近圖形右邊界的位置。反復(fù)這樣的過(guò)程之后,我們?cè)谕ㄟ^(guò)合適的權(quán)重組合將所有的模型進(jìn)行合并。
算法的理論基礎(chǔ)我們?cè)撊绾畏峙溆^測(cè)值的權(quán)重呢?
通常來(lái)說(shuō),我們從一個(gè)均勻分布假設(shè)出發(fā),我們把它稱為D1,在這里,n個(gè)觀測(cè)值分別被分配了1/n的權(quán)重。
步驟1:假設(shè)一個(gè)α(t);
步驟2:得到弱分類器h(t);
步驟3:更新總體分布,
其中,
步驟4:再次運(yùn)用新的總體分布去得到下一個(gè)分類器;
覺(jué)得步驟3中的數(shù)學(xué)很可怕嗎?讓我們來(lái)一起擊破這種恐懼。首先,我們簡(jiǎn)單看一下指數(shù)里的參數(shù),α表示一種學(xué)習(xí)率,y是實(shí)際的回應(yīng)值(+1或-1),而h(x)則是分類器所預(yù)測(cè)的類別。簡(jiǎn)單來(lái)說(shuō),如果分類器預(yù)測(cè)錯(cuò)了,這個(gè)指數(shù)的冪就變成了1 *α, 反之則是-1*α。也就是說(shuō),如果某觀測(cè)值在上一次預(yù)測(cè)中被預(yù)測(cè)錯(cuò)誤,那么它對(duì)應(yīng)的權(quán)重可能會(huì)增加。那么,接下來(lái)該做什么呢?
步驟5:不斷重復(fù)步驟1-步驟4,直到無(wú)法發(fā)現(xiàn)任何可以改進(jìn)的地方;
步驟6:對(duì)所有在上面步驟中出現(xiàn)過(guò)的分類器或是學(xué)習(xí)算法進(jìn)行加權(quán)平均,權(quán)重如下所示:
案例練習(xí)
最近我參加了由Analytics Vidhya組織的在線hackathon活動(dòng)。為了使變量變換變得容易,在complete_data中我們合并了測(cè)試集與訓(xùn)練集中的所有數(shù)據(jù)。我們將數(shù)據(jù)導(dǎo)入,并且進(jìn)行抽樣和分類。
library(caret)rm(list=ls())setwd("C:Usersts93856DesktopAV")library(Metrics)complete <- read.csv("complete_data.csv", stringsAsFactors = TRUE)train <- complete[complete$Train == 1,]score <- complete[complete$Train != 1,]set.seed(999)ind <- sample(2, nrow(train), replace=T, prob=c(0.60,0.40))trainData<-train[ind==1,]testData <- train[ind==2,]set.seed(999)ind1 <- sample(2, nrow(testData), replace=T, prob=c(0.50,0.50))trainData_ens1<-testData[ind1==1,]testData_ens1 <- testData[ind1==2,]table(testData_ens1$Disbursed)[2]/nrow(testData_ens1)#Response Rate of 9.052%
接下來(lái),就是構(gòu)建一個(gè)梯度推進(jìn)模型(Gradient Boosting Model)所要做的:
fitControl <- trainControl(method = "repeatedcv", number = 4, repeats = 4)trainData$outcome1 <- ifelse(trainData$Disbursed == 1, "Yes","No")set.seed(33)gbmFit1 <- train(as.factor(outcome1) ~ ., data = trainData[,-26], method = "gbm", trControl = fitControl,verbose = FALSE)gbm_dev <- predict(gbmFit1, trainData,type= "prob")[,2]gbm_ITV1 <- predict(gbmFit1, trainData_ens1,type= "prob")[,2]gbm_ITV2 <- predict(gbmFit1, testData_ens1,type= "prob")[,2]auc(trainData$Disbursed,gbm_dev)auc(trainData_ens1$Disbursed,gbm_ITV1)auc(testData_ens1$Disbursed,gbm_ITV2)
在上述案例中,運(yùn)行代碼后所看到的所有AUC值將會(huì)非常接近0.84。我們隨時(shí)歡迎你對(duì)這段代碼進(jìn)行進(jìn)一步的完善。在這個(gè)領(lǐng)域,梯度推進(jìn)模型(GBM)是最為廣泛運(yùn)用的方法,在未來(lái)的文章里,我們可能會(huì)對(duì)GXBoost等一些更加快捷的Boosting算法進(jìn)行介紹。
結(jié)束語(yǔ)筆者曾不止一次見(jiàn)識(shí)過(guò)Boosting算法的迅捷與高效,在Kaggle或是其他平臺(tái)的競(jìng)賽中,它的得分能力從未令人失望,當(dāng)然了,也許這要取決于你能夠把特征工程(feature engineering)做得多好了。
以上是小編為大家分享的關(guān)于基于R語(yǔ)言的梯度推進(jìn)算法介紹的相關(guān)內(nèi)容,更多信息可以關(guān)注環(huán)球青藤分享更多干貨
四、GBDT —— 梯度提升決策樹
GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一種迭代的決策樹算法,該算法由多棵決策樹組成,所有樹的結(jié)論累加起來(lái)做最終答案。它在被提出之初就和SVM一起被認(rèn)為是泛化能力較強(qiáng)的算法。
GBDT中的樹是回歸樹(不是分類樹),GBDT用來(lái)做回歸預(yù)測(cè),調(diào)整后也可以用于分類。
GBDT主要由三個(gè)概念組成:Regression Decistion Tree(即DT),Gradient Boosting(即GB),Shrinkage (算法的一個(gè)重要演進(jìn)分枝,目前大部分源碼都按該版本實(shí)現(xiàn))。搞定這三個(gè)概念后就能明白GBDT是如何工作的。
提起決策樹(DT, Decision Tree) 絕大部分人首先想到的就是C4.5分類決策樹。但如果一開(kāi)始就把GBDT中的樹想成分類樹,那就錯(cuò)了。千萬(wàn)不要以為GBDT是很多棵分類樹。決策樹分為兩大類,回歸樹和分類樹。前者用于預(yù)測(cè)實(shí)數(shù)值,如明天的溫度、用戶的年齡、網(wǎng)頁(yè)的相關(guān)程度;后者用于分類標(biāo)簽值,如晴天/陰天/霧/雨、用戶性別、網(wǎng)頁(yè)是否是垃圾頁(yè)面。這里要強(qiáng)調(diào)的是,前者的結(jié)果加減是有意義的,如10歲+5歲-3歲=12歲,后者則無(wú)意義,如男+男+女=到底是男是女?GBDT的核心在于累加所有樹的結(jié)果作為最終結(jié)果,就像前面對(duì)年齡的累加(-3是加負(fù)3),而分類樹的結(jié)果顯然是沒(méi)辦法累加的,所以 GBDT中的樹都是回歸樹,不是分類樹 ,這點(diǎn)對(duì)理解GBDT相當(dāng)重要(盡管GBDT調(diào)整后也可用于分類但不代表GBDT的樹是分類樹)。
回歸樹總體流程類似于分類樹,區(qū)別在于,回歸樹的每一個(gè)節(jié)點(diǎn)都會(huì)得一個(gè)預(yù)測(cè)值,以年齡為例,該預(yù)測(cè)值等于屬于這個(gè)節(jié)點(diǎn)的所有人年齡的平均值。分枝時(shí)窮舉每一個(gè)feature的每個(gè)閾值找最好的分割點(diǎn),但衡量最好的標(biāo)準(zhǔn)不再是最大熵,而是最小化平方誤差。也就是被預(yù)測(cè)出錯(cuò)的人數(shù)越多,錯(cuò)的越離譜,平方誤差就越大,通過(guò)最小化平方誤差能夠找到最可靠的分枝依據(jù)。分枝直到每個(gè)葉子節(jié)點(diǎn)上人的年齡都唯一或者達(dá)到預(yù)設(shè)的終止條件(如葉子個(gè)數(shù)上限), 若最終葉子節(jié)點(diǎn)上人的年齡不唯一,則以該節(jié)點(diǎn)上所有人的平均年齡做為該葉子節(jié)點(diǎn)的預(yù)測(cè)年齡。
回歸樹算法如下圖(截圖來(lái)自《統(tǒng)計(jì)學(xué)習(xí)方法》5.5.1 CART生成):
梯度提升(Gradient boosting)是一種用于回歸、分類和排序任務(wù)的機(jī)器學(xué)習(xí)技術(shù) [1] ,屬于Boosting算法族的一部分。Boosting是一族可將弱學(xué)習(xí)器提升為強(qiáng)學(xué)習(xí)器的算法,屬于集成學(xué)習(xí)(ensemble learning)的范疇。Boosting方法基于這樣一種思想:對(duì)于一個(gè)復(fù)雜任務(wù)來(lái)說(shuō),將多個(gè)專家的判斷進(jìn)行適當(dāng)?shù)木C合所得出的判斷,要比其中任何一個(gè)專家單獨(dú)的判斷要好。通俗地說(shuō),就是“三個(gè)臭皮匠頂個(gè)諸葛亮”的道理。梯度提升同其他boosting方法一樣,通過(guò)集成(ensemble)多個(gè)弱學(xué)習(xí)器,通常是決策樹,來(lái)構(gòu)建最終的預(yù)測(cè)模型。
Boosting、bagging和stacking是集成學(xué)習(xí)的三種主要方法。不同于bagging方法,boosting方法通過(guò)分步迭代(stage-wise)的方式來(lái)構(gòu)建模型,在迭代的每一步構(gòu)建的弱學(xué)習(xí)器都是為了彌補(bǔ)已有模型的不足。Boosting族算法的著名代表是AdaBoost,AdaBoost算法通過(guò)給已有模型預(yù)測(cè)錯(cuò)誤的樣本更高的權(quán)重,使得先前的學(xué)習(xí)器做錯(cuò)的訓(xùn)練樣本在后續(xù)受到更多的關(guān)注的方式來(lái)彌補(bǔ)已有模型的不足。與AdaBoost算法不同,梯度提升方法在迭代的每一步構(gòu)建一個(gè)能夠沿著梯度最陡的方向降低損失(steepest-descent)的學(xué)習(xí)器來(lái)彌補(bǔ)已有模型的不足。經(jīng)典的AdaBoost算法只能處理采用指數(shù)損失函數(shù)的二分類學(xué)習(xí)任務(wù) [2] ,而梯度提升方法通過(guò)設(shè)置不同的可微損失函數(shù)可以處理各類學(xué)習(xí)任務(wù)(多分類、回歸、Ranking等),應(yīng)用范圍大大擴(kuò)展。另一方面,AdaBoost算法對(duì)異常點(diǎn)(outlier)比較敏感,而梯度提升算法通過(guò)引入bagging思想、加入正則項(xiàng)等方法能夠有效地抵御訓(xùn)練數(shù)據(jù)中的噪音,具有更好的健壯性。這也是為什么梯度提升算法(尤其是采用決策樹作為弱學(xué)習(xí)器的GBDT算法)如此流行的原因,
提升樹是迭代多棵回歸樹來(lái)共同決策。當(dāng)采用平方誤差損失函數(shù)時(shí),每一棵回歸樹學(xué)習(xí)的是之前所有樹的結(jié)論和殘差,擬合得到一個(gè)當(dāng)前的殘差回歸樹,殘差的意義如公式:殘差 = 真實(shí)值 - 預(yù)測(cè)值 。提升樹即是整個(gè)迭代過(guò)程生成的回歸樹的累加。 GBDT的核心就在于,每一棵樹學(xué)的是之前所有樹結(jié)論和的殘差,這個(gè)殘差就是一個(gè)加預(yù)測(cè)值后能得真實(shí)值的累加量。
提升樹利用 加法模型和前向分步算法 實(shí)現(xiàn)學(xué)習(xí)的優(yōu)化過(guò)程。當(dāng)損失函數(shù)時(shí)平方損失和指數(shù)損失函數(shù)時(shí),每一步的優(yōu)化很簡(jiǎn)單,如平方損失函數(shù)學(xué)習(xí)殘差回歸樹。
提升方法其實(shí)是一個(gè)比adaboost概念更大的算法,因?yàn)閍daboost可以表示為boosting的前向分布算法(Forward stagewise additive modeling)的一個(gè)特例,boosting最終可以表示為:
其中的w是權(quán)重,Φ是弱分類器(回歸器)的集合,其實(shí)就是一個(gè)加法模型(即基函數(shù)的線性組合)
前向分布算法 實(shí)際上是一個(gè)貪心的算法,也就是在每一步求解弱分類器Φ(m)和其參數(shù)w(m)的時(shí)候不去修改之前已經(jīng)求好的分類器和參數(shù):
OK,這也就是提升方法(之前向分布算法)的大致結(jié)構(gòu)了,可以看到其中存在變數(shù)的部分其實(shí)就是極小化損失函數(shù) 這關(guān)鍵的一步了,如何選擇損失函數(shù)決定了算法的最終效果(名字)……這一步你可以看出算法的“趨勢(shì)”,以后再單獨(dú)把“趨勢(shì)”拿出來(lái)說(shuō)吧,因?yàn)槲腋杏X(jué)理解算法的關(guān)鍵之一就是理解算法公式的“趨勢(shì)”
不同的損失函數(shù)和極小化損失函數(shù)方法決定了boosting的最終效果,我們現(xiàn)在來(lái)說(shuō)幾個(gè)常見(jiàn)的boosting:
廣義上來(lái)講,所謂的Gradient Boosting 其實(shí)就是在更新的時(shí)候選擇梯度下降的方向來(lái)保證最后的結(jié)果最好,一些書上講的“殘差” 方法其實(shí)就是L2Boosting吧,因?yàn)樗x的殘差其實(shí)就是L2Boosting的Derivative,接下來(lái)我們著重講一下弱回歸器(不知道叫啥了,自己編的)是決策樹的情況,也就是GBDT。
GBDT算法可以看成是由K棵樹組成的加法模型:
解這一優(yōu)化問(wèn)題,可以用前向分布算法(forward stagewise algorithm)。因?yàn)閷W(xué)習(xí)的是加法模型,如果能夠從前往后,每一步只學(xué)習(xí)一個(gè)基函數(shù)及其系數(shù)(結(jié)構(gòu)),逐步逼近優(yōu)化目標(biāo)函數(shù),那么就可以簡(jiǎn)化復(fù)雜度。這一學(xué)習(xí)過(guò)程稱之為Boosting。具體地,我們從一個(gè)常量預(yù)測(cè)開(kāi)始,每次學(xué)習(xí)一個(gè)新的函數(shù),過(guò)程如下:
舉個(gè)例子,參考自一篇博客, 該博客舉出的例子較直觀地展現(xiàn)出多棵決策樹線性求和過(guò)程以及殘差的意義。
還是年齡預(yù)測(cè),簡(jiǎn)單起見(jiàn)訓(xùn)練集只有4個(gè)人,A,B,C,D,他們的年齡分別是14,16,24,26。其中A、B分別是高一和高三學(xué)生;C,D分別是應(yīng)屆畢業(yè)生和工作兩年的員工。如果是用一棵傳統(tǒng)的回歸決策樹來(lái)訓(xùn)練,會(huì)得到如下圖1所示結(jié)果:
現(xiàn)在我們使用GBDT來(lái)做這件事,由于數(shù)據(jù)太少,我們限定葉子節(jié)點(diǎn)做多有兩個(gè),即每棵樹都只有一個(gè)分枝,并且限定只學(xué)兩棵樹。我們會(huì)得到如下圖2所示結(jié)果:
在第一棵樹分枝和圖1一樣,由于A,B年齡較為相近,C,D年齡較為相近,他們被分為兩撥,每撥用平均年齡作為預(yù)測(cè)值。此時(shí)計(jì)算殘差 (殘差的意思就是: A的預(yù)測(cè)值 + A的殘差 = A的實(shí)際值) ,所以A的殘差就是16-15=1(注意,A的預(yù)測(cè)值是指前面所有樹累加的和,這里前面只有一棵樹所以直接是15,如果還有樹則需要都累加起來(lái)作為A的預(yù)測(cè)值)。進(jìn)而得到A,B,C,D的殘差分別為-1,1,-1,1。然后我們拿殘差替代A,B,C,D的原值,到第二棵樹去學(xué)習(xí),如果我們的預(yù)測(cè)值和它們的殘差相等,則只需把第二棵樹的結(jié)論累加到第一棵樹上就能得到真實(shí)年齡了。這里的數(shù)據(jù)顯然是我可以做的,第二棵樹只有兩個(gè)值1和-1,直接分成兩個(gè)節(jié)點(diǎn)。此時(shí)所有人的殘差都是0,即每個(gè)人都得到了真實(shí)的預(yù)測(cè)值。
換句話說(shuō),現(xiàn)在A,B,C,D的預(yù)測(cè)值都和真實(shí)年齡一致了。Perfect!:
A: 14歲高一學(xué)生,購(gòu)物較少,經(jīng)常問(wèn)學(xué)長(zhǎng)問(wèn)題;預(yù)測(cè)年齡A = 15 – 1 = 14
B: 16歲高三學(xué)生;購(gòu)物較少,經(jīng)常被學(xué)弟問(wèn)問(wèn)題;預(yù)測(cè)年齡B = 15 + 1 = 16
C: 24歲應(yīng)屆畢業(yè)生;購(gòu)物較多,經(jīng)常問(wèn)師兄問(wèn)題;預(yù)測(cè)年齡C = 25 – 1 = 24
D: 26歲工作兩年員工;購(gòu)物較多,經(jīng)常被師弟問(wèn)問(wèn)題;預(yù)測(cè)年齡D = 25 + 1 = 26
那么哪里體現(xiàn)了Gradient呢?其實(shí)回到第一棵樹結(jié)束時(shí)想一想,無(wú)論此時(shí)的cost function是什么,是均方差還是均差,只要它以誤差作為衡量標(biāo)準(zhǔn),殘差向量(-1, 1, -1, 1)都是它的全局最優(yōu)方向,這就是Gradient。
講到這里我們已經(jīng)把GBDT最核心的概念、運(yùn)算過(guò)程講完了!沒(méi)錯(cuò)就是這么簡(jiǎn)單。
該例子很直觀的能看到,預(yù)測(cè)值等于所有樹值得累加,如A的預(yù)測(cè)值 = 樹1左節(jié)點(diǎn) 值 15 + 樹2左節(jié)點(diǎn) -1 = 14。
因此,給定當(dāng)前模型 fm-1(x),只需要簡(jiǎn)單的擬合當(dāng)前模型的殘差?,F(xiàn)將回歸問(wèn)題的提升樹算法敘述如下:
答案是過(guò)擬合。過(guò)擬合是指為了讓訓(xùn)練集精度更高,學(xué)到了很多”僅在訓(xùn)練集上成立的規(guī)律“,導(dǎo)致?lián)Q一個(gè)數(shù)據(jù)集當(dāng)前規(guī)律就不適用了。其實(shí)只要允許一棵樹的葉子節(jié)點(diǎn)足夠多,訓(xùn)練集總是能訓(xùn)練到100%準(zhǔn)確率的(大不了最后一個(gè)葉子上只有一個(gè)instance)。在訓(xùn)練精度和實(shí)際精度(或測(cè)試精度)之間,后者才是我們想要真正得到的。
我們發(fā)現(xiàn)圖1為了達(dá)到100%精度使用了3個(gè)feature(上網(wǎng)時(shí)長(zhǎng)、時(shí)段、網(wǎng)購(gòu)金額),其中分枝“上網(wǎng)時(shí)長(zhǎng)>1.1h” 很顯然已經(jīng)過(guò)擬合了,這個(gè)數(shù)據(jù)集上A,B也許恰好A每天上網(wǎng)1.09h, B上網(wǎng)1.05小時(shí),但用上網(wǎng)時(shí)間是不是>1.1小時(shí)來(lái)判斷所有人的年齡很顯然是有悖常識(shí)的;
相對(duì)來(lái)說(shuō)圖2的boosting雖然用了兩棵樹 ,但其實(shí)只用了2個(gè)feature就搞定了,后一個(gè)feature是問(wèn)答比例,顯然圖2的依據(jù)更靠譜。(當(dāng)然,這里是LZ故意做的數(shù)據(jù),所以才能靠譜得如此狗血。實(shí)際中靠譜不靠譜總是相對(duì)的) Boosting的最大好處在于,每一步的殘差計(jì)算其實(shí)變相地增大了分錯(cuò)instance的權(quán)重,而已經(jīng)分對(duì)的instance則都趨向于0。這樣后面的樹就能越來(lái)越專注那些前面被分錯(cuò)的instance。就像我們做互聯(lián)網(wǎng),總是先解決60%用戶的需求湊合著,再解決35%用戶的需求,最后才關(guān)注那5%人的需求,這樣就能逐漸把產(chǎn)品做好,因?yàn)椴煌愋陀脩粜枨罂赡芡耆煌?,需要分別獨(dú)立分析。如果反過(guò)來(lái)做,或者剛上來(lái)就一定要做到盡善盡美,往往最終會(huì)竹籃打水一場(chǎng)空。
Shrinkage(縮減)的思想認(rèn)為,每次走一小步逐漸逼近結(jié)果的效果,要比每次邁一大步很快逼近結(jié)果的方式更容易避免過(guò)擬合。即它不完全信任每一個(gè)棵殘差樹,它認(rèn)為每棵樹只學(xué)到了真理的一小部分,累加的時(shí)候只累加一小部分,通過(guò)多學(xué)幾棵樹彌補(bǔ)不足。用方程來(lái)看更清晰,即
沒(méi)用Shrinkage時(shí):(yi表示第i棵樹上y的預(yù)測(cè)值, y(1~i)表示前i棵樹y的綜合預(yù)測(cè)值)
y(i+1) = 殘差(y1~yi), 其中: 殘差(y1~yi) = y真實(shí)值 - y(1 ~ i)
y(1 ~ i) = SUM(y1, ..., yi)
Shrinkage不改變第一個(gè)方程,只把第二個(gè)方程改為:
y(1 ~ i) = y(1 ~ i-1) + step * yi
即Shrinkage仍然以殘差作為學(xué)習(xí)目標(biāo),但對(duì)于殘差學(xué)習(xí)出來(lái)的結(jié)果,只累加一小部分(step 殘差)逐步逼近目標(biāo),step一般都比較小,如0.01~0.001(注意該step非gradient的step),導(dǎo)致各個(gè)樹的殘差是漸變的而不是陡變的。直覺(jué)上這也很好理解,不像直接用殘差一步修復(fù)誤差,而是只修復(fù)一點(diǎn)點(diǎn),其實(shí)就是把大步切成了很多小步。 本質(zhì)上,Shrinkage為每棵樹設(shè)置了一個(gè)weight,累加時(shí)要乘以這個(gè)weight,但和Gradient并沒(méi)有關(guān)系 *。 這個(gè)weight就是step。就像Adaboost一樣,Shrinkage能減少過(guò)擬合發(fā)生也是經(jīng)驗(yàn)證明的,目前還沒(méi)有看到從理論的證明。
該版本GBDT幾乎可用于所有回歸問(wèn)題(線性/非線性),相對(duì)logistic regression僅能用于線性回歸,GBDT的適用面非常廣。亦可用于二分類問(wèn)題(設(shè)定閾值,大于閾值為正例,反之為負(fù)例)。
參考資料:
http://blog.csdn.net/w28971023/article/details/8240756
http://blog.csdn.net/dark_scope/article/details/24863289
https://www.jianshu.com/p/005a4e6ac775
https://www.zybuluo.com/yxd/note/611571
以上就是關(guān)于boosting算法相關(guān)問(wèn)題的回答。希望能幫到你,如有更多相關(guān)問(wèn)題,您也可以聯(lián)系我們的客服進(jìn)行咨詢,客服也會(huì)為您講解更多精彩的知識(shí)和內(nèi)容。
推薦閱讀:
facebook綁定賬號(hào)登錄失?。╢acebook賬戶登不上)
國(guó)內(nèi)手機(jī)使用facebook(國(guó)內(nèi)手機(jī)使用占比)
趨勢(shì)文化傳媒短視頻(趨勢(shì)文化策劃有限公司)
水電站景觀設(shè)計(jì)(水電站景觀設(shè)計(jì)效果圖)