大白話5分鐘帶你走進人工智慧-第二十八節整合學習之隨機森林概念介紹(1)

LHBlog發表於2019-05-20

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

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

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

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

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

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

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

我們舉個例子來說明下:

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

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

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

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

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

                           G(\mathbf{x})=\operatorname{sign}\left(\sum_{t=1}^{T} 1 \cdot g_{t}(\mathbf{x})\right) \quad G(\mathbf{x})=\frac{1}{T} \sum_{t=1}^{T} g_{t}(\mathbf{x})

解釋下:這裡的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一點的朋友多給幾票, 弱雞一點的少給幾票

                     $G(\mathbf{x})=\operatorname{sign}\left(\sum_{t=1}^{T} \alpha_{t} \cdot g_{t}(\mathbf{x})\right)$ with $\alpha_{t} \geq 0$

解釋下:這裡面的α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。

相關文章