申明:此文爲學習記錄過程html
決策樹是一種非線性有監督分類模型,隨機森林是一種非線性有監督分類模型。線性分類模型好比說邏輯迴歸,可能會存在不可分問題,可是非線性分類就不存在。決策樹是機器學習中最接近人類思考問題的過程的一種算法,經過若干個節點,對特徵進行提問並分類(能夠是二分類也可使多分類),直至最後生成葉節點(也就是隻剩下一種屬性)。算法
決策樹是一種簡單可是普遍使用的分類器。經過訓練數據構建決策樹,能夠高效的對未知的數據進行分類。決策數有兩大優勢:1)決策樹模型能夠讀性好,具備描述性,有助於人工分析;2)效率高,決策樹只須要一次構建,反覆使用,每一次預測的最大計算次數不超過決策樹的深度。bootstrap
信息熵:熵表明信息的不肯定性,信息的不肯定性越大,熵越大;好比「明天太陽從東方升起」這一句話表明的信息咱們能夠認爲爲0;由於太陽從東方升起是個特定的規律,咱們能夠把這個事件的信息熵約等於0;說白了,信息熵和事件發生的機率成反比:數學上把信息熵定義以下:H(X)=H(P1,P2,…,Pn)=-∑P(xi)logP(xi)app
互信息:指的是兩個隨機變量之間的關聯程度,即給定一個隨機變量後,另外一個隨機變量不肯定性的削弱程度,於是互信息取值最小爲0,意味着給定一個隨機變量對肯定一另外一個隨機變量沒有關係,最大取值爲隨機變量的熵,意味着給定一個隨機變量,能徹底消除另外一個隨機變量的不肯定性dom
定義爲:對於特徵A的信息增益爲:g(D,A)=H(D)-H(D|A),信息增益就是給定訓練集D時,特徵A和訓練集D的互信息I(D,A).選取信息增益最大的特徵做爲分支的節點.(後面有舉例)機器學習
其中,條件熵H(D|A)的計算公式以下:函數
信息增益的缺點:對數目較多的屬性有偏好,且生成額決策樹層次多,深度淺,爲改善這些問題,提出方法二.post
其等於信息增益/屬性A的熵學習
信息增益率的缺點:對數目較少的屬性有偏好,後又有方法三.測試
其計算公式以下:
Gini係數能夠理解爲y=-lnx在x=1處的一階展開.
總結之,一個屬性的信息增益(率)/gini指數越大,代表屬性對樣本的熵較少的程度越大,那麼這個屬性使得樣本從不肯定性變爲肯定性的能力越強,分支時選擇該屬性做爲判斷模塊使得決策樹生成的越快.
看了一遍概念後,咱們先從一個簡單的案例開始,以下圖咱們樣本:
對於上面的樣本數據,根據不一樣特徵值咱們最後是選擇是否約會,咱們先自定義的一個決策樹,決策樹以下圖所示:
對於上圖中的決策樹,有個疑問,就是爲何第一個選擇是「長相」這個特徵,我選擇「收入」特徵做爲第一分類的標準能夠嘛?
如今咱們就把信息熵運用到決策樹特徵選擇上,對於選擇哪一個特徵咱們按照這個規則進行「哪一個特徵能使信息的肯定性最大咱們就選擇哪一個特徵」;好比上圖的案例中;
第一步:假設約會去或不去的的事件爲Y,其信息熵爲H(Y);
第二步:假設給定特徵的條件下,其條件信息熵分別爲H(Y|長相),H(Y|收入),H(Y|身高)
第三步:分別計算信息增益(互信息):G(Y,長相) = I(Y,長相) = H(Y)-H(Y|長相) 、G(Y,) = I(Y,長相) = H(Y)-H(Y|長相)等
第四部:選擇信息增益最大的特徵做爲分類特徵;由於增益信息大的特徵意味着給定這個特徵,能很大的消除去約會仍是不約會的不肯定性;
第五步:迭代選擇特徵便可;
按以上就解決了決策樹的分類特徵選擇問題,上面的這種方法就是ID3方法,固然仍是別的方法如 C4.5;等;
決策樹對訓練樣本具備很好的分類能力。而一棵對樣本徹底分類的決策樹(完整樹),對未知的測試數據未必有很好的預測能力,泛化能力較差,容易出現過擬合現象。
完整樹:決策樹T的每一個葉子節點的樣本集合中的樣本都爲同一類型。
過擬合會致使構建出過於複雜的決策樹,爲解決這個問題,能夠經過剪枝的方法來簡化已生成的決策樹,即將某個劃分屬性的節點的分支減掉,並將該節點做爲一個某個決策結果的葉子節點(對應的決策結果可採用佔多數的樣本標記)。那怎麼判斷某個劃分屬性的節點是否須要剪枝呢?(剪枝在於減小葉子節點的數量)
於是,咱們須要設計一個分類偏差評估函數,而後經過極小化決策樹總體的損失函數實現剪枝。
設決策樹 T 有 n 個葉子節點,設第t個葉子節點的樣本集合Dt有Nt個樣本,這些樣本的標記類別不必定相同,假設樣本集合Dt中的樣本有k種標記類別,第i種類別的樣本有Nti個。
那麼,第t個葉子節點的樣本集合的經驗熵 定義爲: 。
能夠看出,當第t個葉子節點的樣本集合只有一種標記類型時,經驗熵爲0。
下面給出咱們的決策樹 T 的損失函數的定義:。其中n爲葉子節點數,也能夠用|T|來表示,α爲經驗值參數(α≥0)。
C(T)表示決策樹對訓練數據的預測偏差,參數α控制二者之間的影響,α越大,要求模型越簡單,α=0表示不考慮模型的複雜度(便可以產生較多的葉子節點)。
剪枝的過程,就是當α肯定時,選擇損失函數最小的模型。分類越細,葉子節點的經驗熵就越小,C(T)越小,可是因爲分類越細會致使葉子節點的數目會不少,α|T|(或αn)越大。損失函數反映的是二者的平衡。
決策樹的生成過程只考慮了樣本集合分類的純度,只考慮更好地擬合訓練數據,而剪枝過程在於減少總體的複雜度。
決策樹的剪枝算法:固定某個經驗值α,對劃分屬性的結點進行剪枝預估,若剪枝後,決策樹損失函數減少了,則減掉該結點的葉節點,將該結點做爲新的葉節點,該結點對應的決策結果能夠爲其樣本集合中佔多數的樣本標記。(或構造不一樣的α值獲得一些備選樹,經過交叉驗證的方法獲得最優樹)
若決策樹的度過深的話會出現過擬合現象,對於決策樹的過擬合有二個方案:
先剪枝和後剪紙(能夠在構建決策樹的時候經過指定深度,每一個葉子的樣本數來達到剪枝的做用)
引入評價函數(損失函數):全部葉節點的加權求熵,其值越小代表分類越精準,那麼該決策樹分類覺越好.Nt是葉節點中樣本的個數.
剪枝方法之預剪枝:
從前日後生成樹的過程當中,從樹根開始,逐一輩子成節點,比較其生成與不生成的C(T),在驗證集上選擇C(T)小的做爲最終的數.
剪枝方法以後剪枝:
剪枝係數:
決策樹生成後,查找剪枝係數最小的節點,視爲一顆決策樹,重複以上,知道只剩下一個節點,這樣獲得多顆決策樹,在驗證集上計算損失函數最小的那棵樹做爲最終的決策樹.
構建大量的決策樹組成森林來防止過擬合;雖然單個樹可能存在過擬合,但經過廣度的增長就會消除過擬合現象
隨機森林(Random forest):生成多顆決策樹,投票選舉的原則
引入兩種方法:bootstrapping(有放回的隨機抽取)和bagging(bootstrap aggragation)
bagging的方法以下:
隨機森林是在bagging上作了改進,計算過程以下:
注意:隨機森林或者bagging是基於若干個弱分類器組成的基本分類器進行vote決定最終的分類的,基本分類器也能夠選擇強分類器(如LR,SVM等),但可能由於強分類器某些特徵太多明顯而不能被多個分類器的平均抹掉,不能很好達到過擬合的效果.
->計算簡單,易理解,可解釋性強
->適合處理確實屬性的樣本,對樣本的類別要求不高(能夠是數值,布爾,文本等混合樣本)
->能處理不相干特徵
->容易過擬合
->忽略了數據之間的相關性
->不支持在線學習,對新樣本,決策樹須要所有重建