全球今日報丨大白話5分鐘帶你走進人工智能-第二十八節集成學習之隨機森林概念介紹(1)

2022-12-30 18:24:06 來源:51CTO博客

第二十八節集成學習之隨機森林概念介紹(1)


(資料圖片僅供參考)

從本系列開始,我們講解一個新的算法系列集成學習。集成學習其實是怎么樣去應用決策樹解決一些問題。

在機器學習領域集成學習是一種非常簡單直接的提升分類器回歸器預測效果的一種思路。決策樹有一個困境,當層數太深的時候會有過擬合問題,當我不想過擬合,就通過預剪枝給它砍掉一部分深度,此時損失又容易太大了,導致在訓練集上預測的又不怎么準。所以對于決策樹很難去找到一個權衡的點,讓它既損失小一點,又別過擬合了,很難通過預剪枝來判斷到底應該剪到哪層最好,有可能剪到哪一層都不太好,于是就產生了集成學習的那種思路。

集成學習是搞出一堆樹來,然后讓每一棵樹都做一個預測,最后大家投票,比如說搞出了一百棵樹,來一條新數據,一百棵樹會給你一百個結果,那么這一百個結果是一樣的還是不一樣的,取決于怎么訓練的這一百棵數。拿一份數據去訓練一百棵,一千棵,一萬棵都是一模一樣的,已經注定了,因為它的評價標準都是一樣的。但假如你通過某種手段,認為一百棵樹彼此不太相同,它們預測結果也會有的相同,有的不相同,少數服從多數,最終預測出來的結果就是集成學習學完的結果。

上面每一顆樹就是一個弱分類器,所以我們總結下集成學習的思路是:

1.訓練出若干的弱分類器,或者弱回歸器,它們都比較弱。

2.把數據交給每一個弱分類器,得到一個結果,再把所有預測結果統一在一起。不同的機器學習的策略,會用不同的方式來運用最終的結果。

我們舉個例子來說明下:

假設你有15個朋友給你出主意投資股票,怎么做最終的決定?假如說只有買或不買兩個選項,那怎么決定到底買還是不買?第一個思路是假如15個人里14個都說買,一個說不買,我就聽從他們意見就買了。這是一個直觀的想法,所有朋友的意見投票, 少數服從多數第二個思路是可以根據朋友靠不靠譜去判斷一下,要不要多考慮一下他的意見,比如有一個人投資回報率是80%,有一個人投資回報率是-200%,現在兩個人一個說買,一個說不買,那么就著重的聽投資回報率高的朋友。所以這就是選擇最牛x的一個朋友的意見當做自己的意見。第三個思路假如做的好的投一票頂五票,做得比較差的投一票就頂一票。最后四個挺弱的人都說買,一個大師說不買,你也會聽大師的,因為它手里的票數比較多。那么就會給他們分配不同的票數,比較厲害的人票數多一點,比較差的票數少一點,最后做一個帶著票數的不均勻的投票。這就是投票 牛x一點的朋友多給幾票, 弱雞一點的少給幾票。假設現在有一個一輩子買什么都跌的人,從來沒買中過一次,跟你說買,另外一個投資回報率100%的人也說買,那到底結果是買還是不買,落實到機制上來說,就是一些分類器,你給它負的票,也可以給你提供一個信息量。最后我們再綜合考慮。

對于15個朋友投票的問題來說,能有顯而易見的兩種策略,一種叫均勻投票,一種叫做帶權重的投票。 所謂帶權重的投票是,你厲害我就更重視一點,你表達的意見對最終結果的影響更大一點。而均勻投票代表所有人的意見我認為你們都是一視同仁的。

這兩種策略如何決定?什么時候使用?取決于這15個朋友是什么樣的,如果15個朋友水平差不多,投票更合理,因為從主觀意愿去給一些人更大的權重,最后模型的效果一般不會好。假如15個朋友參差不齊,那么我們可能對那些靠譜或者牛X一點的朋友的意見考慮的更大些,實際上就是對他們的每個人的投票結果給予不同的權重。這種均勻投票的方式就是隨機森林,而帶權重投票的方式叫Adaboost。這是兩種不同的集成學習的方式。

我們用數學形式來表達下上面兩種不同的思路,Aggregation是聚合的意思,我們集成學習是把若干的弱分類器的預測結果聚合到一起,匯總成一個結果

第一種:所有朋友的意見投票, 少數服從多數

解釋下:這里的gt(x)就是一棵決策樹,給它寫成一個函數gt(x),當成黑盒,代表給我一個x,告訴你一個結果。二分類就是給我一個函數,告訴你是+1還是-1。多分類就是給我一個函數,告訴你是1,2,還是3。給它寫成gt(x)就代表它是決策樹的預測結果。t代表它的序號,是從1到T,代表我們有T個弱分類器,其中每一個gt(x)代表某一個弱分類器的結果,假設正例是+1,負例是-1的情況下,把它們統統加起來,假如最后結果是正的,就代表投票的+1比較多;最后的結果是負的,代表-1比較多。sign是一個簡單的取符號的運算,當這個里邊的計算結果為正的時候,比如+100,前面加上sign,結果就等于+1;假如運算結果是-10000,前面加上sign,結果等于-1。也就是G(x)最后的結果,要么是+1,要么是-1。假如是多分類問題,就很難通過解析式來表達了,它無非還是一個投票,有一百個弱分類器,50個是1,20個是2,30個是3,最后的投票結果就是1。這是對于分類問題,如果是回歸問題,每一個弱分類器會給出一個結果,假設第一個弱分類器是100,第二120,第三200,第四500,那么最終把它們取個平均數,就作為最終的預測結果。我們稱這種聚合方式叫做均勻混合(uiform blending ),Blend是攪拌混合的意思,就是說訓練好了若干個弱分類器之后,一條數據分別交給它們預測,把它們的預測結果雜糅在一起,最后匯總出的結果,這個過程就叫做Blending。

第二種:還是投票 牛x一點的朋友多給幾票, 弱雞一點的少給幾票

解釋下:這里面的αt代表每一個弱分類器給它一個單獨的權重,如果弱分類器表現好,我就給你的αt大點,如果表現的不好,我就給你的αt小點,如果還是投票,厲害的人票多,代表α要大一點;對于買什么什么賠的,他的α一定是負數,這個式子表達的就是賦予每個人不同票數的這種投票方式。如果訓練出來的弱分類器正確率低于50%的情況下,會有兩種處理方式,第一種就是給它投一個負票,但它有可能是由極端的偶然導致的,因為它訓練出來的結果太差了,不代表什么意義,所以第二種處理方式會把它丟棄,這也正是為什么αt>=0的原因。

對于均勻混合(uiform blending )方式,已知所有的gt(x),把它的均勻的聚合到一起,就得到了一個最終的結果,但假如所有的gt(x)都是相同的,就獨裁了,相當于一千個投票一千個人意見都是一樣的,投票沒有任何意義了。所以只有一些不同的朋友們給你帶來各種各樣的意見的情況下,投票才能帶來一些提升。所以這就意味著我們在生成gt(x)的時候應該考慮制造一些每個人看法迥異,但多少都有些道理的gt(x)。

那具體怎么生成gt(x)呢?我們這里引入兩個概念:分別為Bagging和Boosting

Bagging通過一個叫bootstrap的抽樣進行有放回的對原始數據集進行均勻抽樣。假如現在有一百條數據,用有放回地進行抽樣話,原來有100條數據,現在還有100條數據,抽到的數據有可能會跟原來一模一樣的。當這個值不是100,而是足夠大的一個值的時候,我們要抽一些數據作為每一個弱分類器的訓練樣本,一些數據肯定會被多次抽中,也有一些數據永遠不會被抽中。在集成學習里面,我們并不強調每個gt(x)是什么,因為它就對應一個弱分類器,這里gt(x)可以是任何一個算法,svm ,邏輯回歸等等,類似于分類器的一個黑盒子。當這里gt(x)是決策樹的時候,我們稱這種集成方式為隨機森林。假如隨機森林需要一百棵樹投票,那么就制造100份訓練集,每一個訓練集怎么生成的,就是通過有放回的隨機抽樣生成100個與眾不同的訓練集。這種抽樣方法對每個人都是公平的,最后用一百個樹公平的投票。因為我們是均勻的隨機抽樣,所以雖然這些樹里面有好有壞,但是我對它們一視同仁,因為我也不知道哪一棵樹好,哪一棵樹壞,按理說,只要壞數據少,生成的壞樹應該比好樹少,那最后投票的時候,會把壞樹的意見屏蔽掉,這樣操作之后,訓練集的準確性會提高。另一方面我們看下隨機森林的原始論文定義:

從這里面可以看出隨機森林就是Bagging和decision-tree的結合,decision-tree就是決策樹,fully-grown就是不經過任何剪枝,就讓它完全的自由生長的這種樹,再通過Bagging這種方式結合,得到這個算法就叫做Random Forest。對于Random Forest,它需要一個原始的訓練集D,通過bootstrapping得到這個東西叫Dt樹,要得到多少個Dt樹,取決于需要多少棵樹,每一個Dt訓練出一棵樹,最終你有多少個Dt,就有多少個樹,最后得到從Dt上訓練出來的gt(x),最后G的結果是把gt(x)均勻混合起來。所以隨機森林的優點:

第一:它可以并行訓練,它是一個非常適合并行訓練的模式,只要把所有的訓練集準備好,接下來的訓練它們彼此之間沒有關系了,只要需要自己的Dt就可以了。

第二:對于CART樹里面的所有的優勢,它全都繼承下來了,它可以解決非線性問題,它可以做分類也可以做回歸。

第三:它可以把fully-grown過擬合的性質,通過均勻投票,來減輕過擬合的這種情況。不可能所有的樹全都過擬合了,因為隨機得到的訓練集是不一樣的。對同一套數據,有少部分過擬合沒關系,因為最終還要投票,那些過擬合的樹它的投票結果,只要占少數就被干掉了,最終不會考慮它的意見,所以它對于過擬合的這種情況也是有一個很好的對抗。

即便隨機森林它傾向于完全長成的樹,但在實踐中全訓練,不加預剪枝的樹速度太慢,所以通常也會預剪枝,只不過把它層數限制的深一些,20層,30層,它就近似的有這種完全長成樹的這種特性。否則你真的讓它分到每一個節點,分到最純才停的話太慢了。

那隨機森林里的隨機都有哪些隨機呢?第一個隨機是有放回的隨機抽樣;第二個隨機是它對于特征還會隨機取,在訓練單棵決策樹的時候,隨意一個特征在訓練的過程中算法都能看到,而隨機森林它刻意的不讓你看到所有特征,它隨機選幾個特征,讓小樹看,比如有x1到x100,隨機選出十個特征來,這個分類器就更弱一點,而且更加的與眾不同。因為誰跟誰看到的事都不一樣,而且差異還挺大,因為行上的樣本不一樣,列上能看到的維度又不一樣。雖然不一樣,但它們都很公平,都是讓隨機抽的,最終也能用公平的方式均勻地把它做一個投票。所以第二點就是通過隨機保留部分特征,來進一步的增加每一個弱分類器之間的差異性,最終訓練出若干個弱分別器,就可以投票得到結果。第三點這個東西雖然沒有實現,在樹模型中,如果隨機的將feature進行一些線性組合,作為新的feature,是對它有幫助的。

下一節中我們會對隨機森林中的第三種隨機方式展開講,也會講解一個新的東西,out of bag data以及隨機森林的一些封裝的API。

標簽: 的情況下 少數服從多數 隨機抽樣

上一篇:世界快資訊:大白話5分鐘帶你走進人工智能-第十四節過擬合解決手段L1和L2正則
下一篇:大白話5分鐘帶你走進人工智能-第十九節邏輯回歸之優化點(4)