決策樹與隨機森林



   首先,在瞭解樹模型之前,自然想到樹模型和線性模型有什麼區別呢?其中最重要的是,樹形模型是一個一個特徵進行處理,之前線性模型是所有特徵給予權重相加得到一個新的值。決策樹與邏輯迴歸的分類區別也在於此,邏輯迴歸是將所有特徵變換爲概率後,通過大於某一概率閾值的劃分爲一類,小於某一概率閾值的爲另一類;而決策樹是對每一個特徵做一個劃分。另外邏輯迴歸只能找到線性分割(輸入特徵x與logit之間是線性的,除非對x進行多維映射),而決策樹可以找到非線性分割。

決策樹要達到尋找最純淨劃分的目標要幹兩件事,建樹和剪枝

建樹:

     如何按次序選擇屬性

也就是首先樹根上以及樹節點是哪個變量呢?這些變量是從最重要到次重要依次排序的,那怎麼衡量這些變量的重要性呢? ID3算法用的是信息增益,C4.5算法用信息增益率;CART算法使用基尼係數。決策樹方法是會把每個特徵都試一遍,然後選取那個,能夠使分類分的最好的特徵,也就是說將A屬性作爲父節點,產生的純度增益(GainA)要大於B屬性作爲父節點,則A作爲優先選取的屬性。

ID3算法:使用信息增益作爲分裂的規則,信息增益越大,則選取該分裂規則。多分叉樹。信息增益可以理解爲,有了x以後對於標籤p的不確定性的減少,減少的越多越好,即信息增益越大越好。

C4.5算法:使用信息增益率作爲分裂規則(需要用信息增益除以,該屬性本身的熵),此方法避免了ID3算法中的歸納偏置問題,因爲ID3算法會偏向於選擇類別較多的屬性(形成分支較多會導致信息增益大)。多分叉樹,連續屬性的分裂只能二分裂,離散屬性的分裂可以多分裂,比較分裂前後信息增益率,選取信息增益率最大的。

CART算法

   CART算法是一種二分遞歸分割技術,把當前樣本劃分爲兩個子樣本,使得生成的每個非葉子結點都有兩個分支,
因此CART算法生成的決策樹是結構簡潔的二叉樹。由於CART算法構成的是一個二叉樹,它在每一步的決策時只能
是“是”或者“否”,即使一個feature有多個取值,也是把數據分爲兩部分。在CART算法中主要分爲兩個步驟
(1)將樣本遞歸劃分進行建樹過程
(2)用驗證數據進行剪枝


上面說到了CART算法分爲兩個過程,其中第一個過程進行遞歸建立二叉樹,那麼它是如何進行劃分的 ?代表單個樣本的個屬性,表示所屬類別。CART算法通過遞歸的方式將維的空間劃分爲不重的矩形。劃分步驟大致如下

   (1)選一個自變量,再選取的一個值維空間劃分爲兩部分,一部分的所有點都滿足

       另一部分的所有點都滿足,對非連續變量來說屬性值的取值只有兩個,即等於該值或不等於該值。

   (2)遞歸處理,將上面得到的兩部分按步驟(1)重新選取一個屬性繼續劃分,直到把整個維空間都劃分完。

   在劃分時候有一個問題,它是按照什麼標準來劃分的 ? 對於一個變量屬性來說,它的劃分點是一對連續變量屬

   性值的中點。假設個樣本的集合一個屬性有個連續的值,那麼則會有個分裂點,每個分裂點爲相鄰

   兩個連續值的均值。每個屬性的劃分按照能減少的雜質的量來進行排序,而雜質的減少量定義爲劃分前的雜質減

   去劃分後的每個節點的雜質量劃分所佔比率之和。而雜質度量方法常用Gini指標,假設一個樣本共有類,那麼 一個節點的Gini不純度可定義爲

          

   其中表示屬於類的概率,當Gini(A)=0時,所有樣本屬於同類,所有類在節點中以等概率出現時,Gini(A)

   最大化,此時。

   下面舉個簡單的例子,如下圖

   

在上述圖中,屬性有3個,分別是有房情況,婚姻狀況和年收入,其中有房情況和婚姻狀況是離散的取值,而年收入是連續的取值。拖欠貸款者屬於分類的結果。 假設現在來看有房情況這個屬性,那麼按照它劃分後的Gini指數計算如下

       

 而對於婚姻狀況屬性來說,它的取值有3種,按照每種屬性值分裂後Gini指標計算如下

  

 最後還有一個取值連續的屬性,年收入,它的取值是連續的,那麼連續的取值採用分裂點進行分裂。如下

     

   根據這樣的分裂規則CART算法就能完成建樹過程。

  建樹完成後就進行第二步了,即根據驗證數據進行剪枝。在CART樹的建樹過程中,可能存在Overfitting,許多

  分支中反映的是數據中的異常,這樣的決策樹對分類的準確性不高,那麼需要檢測並減去這些不可靠的分支。決策

  樹常用的剪枝有事前剪枝和事後剪枝,CART算法採用事後剪枝,具體方法爲代價複雜性剪枝法。可參考如下鏈

   剪枝參考:http://www.cnblogs.com/zhangchaoyang/articles/2709922.html

       本部分轉自:http://write.blog.csdn.net/postedit?ref=toolbar&ticket=ST-235997-tdNWQQN2zt49w1NwLPKd-passport.csdn.net


二、隨機森林

 儘管有剪枝等等方法,一棵樹的生成肯定還是不如多棵樹,因此就有了隨機森林,解決決策樹泛化能力弱的缺點。(可以理解成三個臭皮匠頂過諸葛亮)

而同一批數據,用同樣的算法只能產生一棵樹,這時Bagging策略可以幫助我們產生不同的數據集。Bagging策略來源於bootstrap aggregation:從樣本集(假設樣本集N個數據點)中重採樣選出Nb個樣本(有放回的採樣,樣本數據點個數仍然不變爲N),在所有樣本上,對這n個樣本建立分類器(ID3\C4.5\CART\SVM\LOGISTIC),重複以上兩步m次,獲得m個分類器,最後根據這m個分類器的投票結果,決定數據屬於哪一類。

隨機森林在bagging的基礎上更進一步:

1.  樣本的隨機:從樣本集中用Bootstrap隨機選取n個樣本

2.  特徵的隨機:從所有屬性中隨機選取K個屬性,選擇最佳分割屬性作爲節點建立CART決策樹(泛化的理解,這裏面也可以是其他類型的分類器,比如SVM、Logistics)

3.  重複以上兩步m次,即建立了m棵CART決策樹

4.  這m個CART形成隨機森林,通過投票表決結果,決定數據屬於哪一類(投票機制有一票否決制、少數服從多數、加權多數)


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章