通俗易懂--決策樹算法、隨機森林算法講解(算法+案例)

1.決策樹

決策樹模型demogit

隨機森林模型demogithub

1.1從LR到決策樹

相信你們都作過用LR來進行分類,總結一下LR模型的優缺點:算法

優勢

  • 適合須要獲得一個分類機率的場景。編程

  • 實現效率較高。bootstrap

  • 很好處理線性特徵。微信

缺點

  • 當特徵空間很大時,邏輯迴歸的性能不是很好。dom

  • 不能很好地處理大量多類特徵。機器學習

  • 對於非線性特徵,須要進行轉換。編程語言

以上就是LR模型的優缺點,沒錯,決策樹的出現就是爲了解決LR模型不足的地方,這也是咱們爲何要學習決策樹的緣由了,沒有任何一個模型是萬能的。性能

決策樹的優勢

  • 模擬人的直觀決策規則。

  • 能夠處理非線性特徵。

  • 考慮了特徵之間的相互做用。

其實用一下圖片能更好的理解LR模型和決策樹模型算法的根本區別,咱們能夠思考一下一個決策問題:是否去相親,一個女孩的母親要給這個女海介紹對象。

image

你們都看得很明白了吧!LR模型是一古腦兒的把全部特徵塞入學習,而決策樹更像是編程語言中的if-else同樣,去作條件判斷,這就是根本性的區別。

1.2「樹」的成長過程

決策樹基於「樹」結構進行決策的,這時咱們就要面臨兩個問題 :

  • 「樹」怎麼長。

  • 這顆「樹」長到何時停。

弄懂了這兩個問題,那麼這個模型就已經創建起來了,決策樹的整體流程是「分而治之」的思想,一是自根至葉的遞歸過程,一是在每一箇中間節點尋找一個「劃分」屬性,至關於就是一個特徵屬性了。接下來咱們來逐個解決以上兩個問題。

這顆「樹」長到何時停

  • 當前結點包含的樣本全屬於同一類別,無需劃分;例如:樣本當中都是決定去相親的,屬於同一類別,就是無論特徵如何改變都不會影響結果,這種就不須要劃分了。

  • 當前屬性集爲空,或是全部樣本在全部屬性上取值相同,沒法劃分;例如:全部的樣本特徵都是同樣的,就形成沒法劃分了,訓練集太單一。

  • 當前結點包含的樣本集合爲空,不能劃分。

1.3「樹」怎麼長

在生活當中,咱們都會碰到不少須要作出決策的地方,例如:吃飯地點、數碼產品購買、旅遊地區等,你會發如今這些選擇當中都是依賴於大部分人作出的選擇,也就是跟隨大衆的選擇。其實在決策樹當中也是同樣的,當大部分的樣本都是同一類的時候,那麼就已經作出了決策。

咱們能夠把大衆的選擇抽象化,這就引入了一個概念就是純度,想一想也是如此,大衆選擇就意味着純度越高。好,在深刻一點,就涉及到一句話:信息熵越低,純度越高。我相信你們或多或少都據說過「熵」這個概念,信息熵通俗來講就是用來度量包含的「信息量」,若是樣本的屬性都是同樣的,就會讓人以爲這包含的信息很單一,沒有差別化,相反樣本的屬性都不同,那麼包含的信息量就不少了。

一到這裏就頭疼了,由於立刻要引入信息熵的公式,其實也很簡單:

image

Pk表示的是:當前樣本集合D中第k類樣本所佔的比例爲Pk。

信息增益

廢話很少說直接上公式:

image

看不懂的先無論,簡單一句話就是:劃分前的信息熵--劃分後的信息熵。表示的是向純度方向邁出的「步長」。

1.3.1ID3算法

解釋:在根節點處計算信息熵,而後根據屬性依次劃分並計算其節點的信息熵,用根節點信息熵--屬性節點的信息熵=信息增益,根據信息增益進行降序排列,排在前面的就是第一個劃分屬性,其後依次類推,這就獲得了決策樹的形狀,也就是怎麼「長」了。

若是不理解的,能夠查看我一下分享的示例,結合我說的,包你看懂:

1.www.wailian.work/images/2018…

2.www.wailian.work/images/2018…

3.www.wailian.work/images/2018…

4.www.wailian.work/images/2018…

不過,信息增益有一個問題:對可取值數目較多的屬性有所偏好,例如:考慮將「編號」做爲一個屬性。這就引出了另外一個 算法C4.5。

1.3.2C4.5

爲了解決信息增益的問題,引入一個信息增益率:

image

屬性a的可能取值數目越多(即V越大),則IV(a)的值一般就越大。**信息增益比本質: 是在信息增益的基礎之上乘上一個懲罰參數。特徵個數較多時,懲罰參數較小;特徵個數較少時,懲罰參數較大。**不過有一個缺點:

  • 缺點:信息增益比偏向取值較少的特徵。

使用信息增益比:基於以上缺點,並非直接選擇信息增益率最大的特徵,而是如今候選特徵中找出信息增益高於平均水平的特徵,而後在這些特徵中再選擇信息增益率最高的特徵。

1.3.3CART算法

數學家真實聰明,想到了另一個表示純度的方法,叫作基尼指數(討厭的公式):

image

表示在樣本集合中一個隨機選中的樣本被分錯的機率。舉例來講,如今一個袋子裏有3種顏色的球若干個,伸手進去掏出2個球,顏色不同的機率,這下明白了吧。Gini(D)越小,數據集D的純度越高。

舉個例子

假設如今有特徵 「學歷」,此特徵有三個特徵取值: 「本科」,「碩士」, 「博士」,

當使用「學歷」這個特徵對樣本集合D進行劃分時,劃分值分別有三個,於是有三種劃分的可能集合,劃分後的子集以下:

1.劃分點: 「本科」,劃分後的子集合 : {本科},{碩士,博士}

2.劃分點: 「碩士」,劃分後的子集合 : {碩士},{本科,博士}

3.劃分點: 「碩士」,劃分後的子集合 : {博士},{本科,碩士}}

對於上述的每一種劃分,均可以計算出基於 劃分特徵= 某個特徵值 將樣本集合D劃分爲兩個子集的純度:

image

於是對於一個具備多個取值(超過2個)的特徵,須要計算以每個取值做爲劃分點,對樣本D劃分以後子集的純度Gini(D,Ai),(其中Ai 表示特徵A的可能取值)

而後從全部的可能劃分的Gini(D,Ai)中找出Gini指數最小的劃分,這個劃分的劃分點,即是使用特徵A對樣本集合D進行劃分的最佳劃分點。到此就能夠長成一棵「大樹」了。

1.3.4三種不一樣的決策樹

  • ID3:取值多的屬性,更容易使數據更純,其信息增益更大。

    訓練獲得的是一棵龐大且深度淺的樹:不合理。

  • C4.5:採用信息增益率替代信息增益。

  • CART:以基尼係數替代熵,最小化不純度,而不是最大化信息增益。

1.4隨機森林(Random Forest)

Bagging思想

Bagging是bootstrap aggregating。思想就是從整體樣本當中隨機取一部分樣本進行訓練,經過屢次這樣的結果,進行投票獲取平均值做爲結果輸出,這就極大可能的避免了很差的樣本數據,從而提升準確度。由於有些是很差的樣本,至關於噪聲,模型學入噪聲後會使準確度不高。

舉個例子

假設有1000個樣本,若是按照之前的思惟,是直接把這1000個樣本拿來訓練,但如今不同,先抽取800個樣原本進行訓練,假如噪聲點是這800個樣本之外的樣本點,就頗有效的避開了。重複以上操做,提升模型輸出的平均值。

隨機森林

RandomForest(隨機森林)是一種基於樹模型的Bagging的優化版本,一棵樹的生成確定仍是不如多棵樹,所以就有了隨機森林,解決決策樹泛化能力弱的特色。(能夠理解成三個臭皮匠頂過諸葛亮)

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

總的來講就是隨機選擇樣本數,隨機選取特徵,隨機選擇分類器,創建多顆這樣的決策樹,而後經過這幾課決策樹來投票,決定數據屬於哪一類(投票機制有一票否決制、少數服從多數、加權多數)

優勢:

  • 在當前的不少數據集上,相對其餘算法有着很大的優點,表現良好。

  • 它可以處理很高維度(feature不少)的數據,而且不用作特徵選擇(由於特徵子集是隨機選擇的)。

  • 在訓練完後,它可以給出哪些feature比較重要。

  • 訓練速度快,容易作成並行化方法(訓練時樹與樹之間是相互獨立的)。

  • 在訓練過程當中,可以檢測到feature間的互相影響。

  • 對於不平衡的數據集來講,它能夠平衡偏差。

  • 若是有很大一部分的特徵遺失,仍能夠維持準確度。

缺點:

  • 隨機森林已經被證實在某些噪音較大的分類或迴歸問題上會過擬合。

  • 對於有不一樣取值的屬性的數據,取值劃分較多的屬性會對隨機森林產生更大的影響,因此隨機森林在這種數據上產出的屬性權值是不可信的。

1.5Python代碼

決策樹模型demo

隨機森林模型demo

尋覓互聯網,少有機器學習通俗易懂之算法講解、案例等,項目立於這一問題之上,整理一份基本算法講解+案例於文檔,供你們學習之。通俗易懂之文章亦不能夠面概全,但凡是有不正確或爭議之處,望告知,自當不吝賜教!

.

.

.

.

image

歡迎添加微信交流!請備註「機器學習」。

相關文章
相關標籤/搜索