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

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

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

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

集成學習是搞出一堆樹來,而後讓每一棵樹都作一個預測,最後你們投票,好比說搞出了一百棵樹,來一條新數據,一百棵樹會給你一百個結果,那麼這一百個結果是同樣的仍是不同的,取決於怎麼訓練的這一百棵數。拿一份數據去訓練一百棵,一千棵,一萬棵都是如出一轍的,已經註定了,由於它的評價標準都是同樣的。但假如你經過某種手段,認爲一百棵樹彼此不太相同,它們預測結果也會有的相同,有的不相同,少數服從多數,最終預測出來的結果就是集成學習學完的結果。app

上面每一顆樹就是一個弱分類器,因此咱們總結下集成學習的思路是:dom

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

            2.把數據交給每個弱分類器,獲得一個結果,再把全部預測結果統一在一塊兒。不一樣的機器學習的策略,會用不一樣的方式來運用最終的結果。函數

咱們舉個例子來講明下:學習

假設你有15個朋友給你出主意投資股票,怎麼作最終的決定?假如說只有買或不買兩個選項,那怎麼決定到底買仍是不買?第一個思路是假如15我的裏14個都說買,一個說不買,我就遵從他們意見就買了。這是一個直觀的想法,全部朋友的意見投票, 少數服從多數第二個思路是能夠根據朋友靠不靠譜去判斷一下,要不要多考慮一下他的意見,好比有一我的投資回報率是80%,有一我的投資回報率是-200%,如今兩我的一個說買,一個說不買,那麼就着重的聽投資回報率高的朋友。因此這就是選擇最牛x的一個朋友的意見當作本身的意見。第三個思路假如作的好的投一票頂五票,作得比較差的投一票就頂一票。最後四個挺弱的人都說買,一個大師說不買,你也會聽大師的,由於它手裏的票數比較多。那麼就會給他們分配不一樣的票數,比較厲害的人票數多一點,比較差的票數少一點,最後作一個帶着票數的不均勻的投票。這就是投票 牛x一點的朋友多給幾票, 弱雞一點的少給幾票。假設如今有一個一生買什麼都跌的人,歷來沒買中過一次,跟你說買,另一個投資回報率100%的人也說買,那到底結果是買仍是不買,落實到機制上來講,就是一些分類器,你給它負的票,也能夠給你提供一個信息量。最後咱們再綜合考慮。ui

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

這兩種策略如何決定?何時使用?取決於這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。

相關文章
相關標籤/搜索