決策樹算法(ID3算法)

1.決策樹算法算法

決策樹(decision tree):app

決策樹相似於流程圖的一個樹形結構,如圖1。其中每一個內部結點表示在一個屬性上的測試,每一個分支表明一個屬性的輸出,每一個葉子結點表明類或者類的分佈。樹的最頂層是根結點。一個決策樹如圖1所示機器學習

圖1 決策樹示例學習

該示例是一個經過室外的天氣狀況決定是否進行室外運動的決策樹,方框內表明有多少個實例屬於對應的分類,這裏有9個屬於play,有5個屬於don't play,一共有14個實例。圖中的outlook表示預測的天氣,做爲該決策樹的根結點,根結點下面有三個分支,分別是sunny(晴天)、overcast(多雲)、rain(雨天)三種天氣狀況。若是是sunny(晴天),屬於play的個數是2,屬於don't play的個數是3;(overcast)多雲的話,屬於paly的個數是4,屬於don't play的個數是0,一樣若是是rain(雨天)的話,屬於play的個數是3,屬於don't play的個數是2。在sunny(晴天)結點下還分出了一個分支humidity(溼度),這裏將溼度這個連續值做了一個離散處理,取一個閾值(這裏取70),將這個連續值分爲兩個部分;一樣在rain下有一個分支windy(是否有風),用true和false來做爲分支的條件。測試

1.1 構造決策樹的基本算法ui

下面用一個數據集來簡單說明構造決策樹的基本算法過程。如圖23d

圖2 是否購買電腦的數據集excel

這個數據集是關於顧客在電腦城裏面是否購買電腦的信息,有age(年齡)、income(收入狀況)、student(是不是學生)、credit_rating(信用等級)和分類:buys_computer(是否買電腦)。首先咱們先給出對應的決策樹,如圖3。orm

圖3 構建的決策樹blog

從這個決策樹能夠看出,首先將年齡進行分類,分爲youth、middle_aged、senior三種,若是是middle_aged,那麼是yes,表明會購買電腦,返回數據集中能夠驗證。在youth中又出現一個分支student,student爲yes的時候,結果是yes,表明會購買電腦;student爲no的時候,結果是no,表明不會購買電腦。一樣的,在senior中有一個分支credit_rating,有兩種狀況,fair和excellent,若是credit_rating是fair,結果是no,表明不會購買電腦;若是credit_rating是excellent,結果是yes,表明會購買電腦。這個決策樹爲何是這樣構造的呢?下面咱們先來講幾個概念。

熵(entropy):

信息是一個抽象的概念,如何度量信息呢?1948年,香農提出了「信息熵」的概念,描述了信源的不肯定度,解決了對信息的量化度量的問題。香農指出,任何信息都存在冗餘,冗餘大小與信息中每一個符號(數字、字母或單詞)的出現機率或者說不肯定性有關。即信息的度量就等於不肯定性的大小。一般,一個信源發送出什麼符號是不肯定的,衡量它能夠根據其出現的機率來度量。機率大,出現機會多,不肯定性小;反之不肯定性就大。比特(bit)來衡量信息的多少,用P(Xi)表示一個某個符號出現的機率,那麼信息熵H(X)的值就是

變量的不肯定性越大,熵也就越大,信息熵的取值範圍是0到1之間。

ID3算法

1.選擇結點

信息獲取量(Information Gain):Gain(A)=info(D)- info_A(D),經過A來做爲結點分類獲取了多少信息。下面來用這個公式來計算,加深理解

這個式子表示的是隻用Class:buys_computer來計算信息熵的值,不涉及其餘分類。

下面用年齡(age)來對這個Class:buys_computer進行分類,計算對應的信息熵:

在age分類中youth有5個,middle_aged有4個,senior有5個。在youth中的5我的裏面有2我的買電腦是yes,3我的是no,因此對應的信息熵是

一樣的,在middle_aged中的4我的裏面4我的買電腦都是yes,那麼0我的買電腦是no,因此對應的信息熵是

在senior中的5我的裏面有3我的買電腦是yes,2我的買電腦是no,因此對應的信息熵是

注意信息熵的公式是

將上式相加以後就獲得結果了。因此計算出age的信息獲取量以下:

相似能夠計算出Gain(income)=0.029,Gain(student)=0.151,Gain(credit_rating)=0.048

因此選取age做爲第一個結點,即根結點。根結點分出來以後,以下圖

而後繼續以上的步驟,計算出各個屬性的信息獲取量,選擇最大的一個做爲下一個結點,直到出現目標結果(這裏是買電腦爲yes或者no)全是一種狀況爲止。注意到年齡爲middle_aged的人買電腦都是yes,此時不須要再分結點。年齡爲youth中分別有yes和no,年齡爲senior中也是有yes和no,這兩種狀況就須要構建新的結點。在income、student、credit_rating中分別計算各自的信息獲取量,選擇最大的做爲下一個結點。計算方法和上面的同樣。

下面總結一下ID3算法:

  • 樹以表明訓練樣本的單個結點開始。
  • 若是樣本都在同一個類,則該結點成爲樹葉,並用該類標號。
  • 不然,算法使用稱爲信息增益的基於熵的度量做爲啓發信息,選擇可以最好地將樣本分類的屬性。該屬性成爲該結點的「測試」或「斷定」屬性。在算法的該版本中,
  • 全部的屬性都是分類的,即離散值。連續屬性必須離散化。
  • 對測試屬性的每一個已知的值,建立一個分枝,並據此劃分樣本。
  • 算法使用一樣的過程,遞歸地造成每一個劃分上的樣本斷定樹。一旦一個屬性出如今一個結點上,就沒必要該結點的任何後代上考慮它。
  • 遞歸劃分步驟僅當下列條件之一成立中止:
  • (a) 給定結點的全部樣本屬於同一類。
  • (b) 沒有剩餘屬性能夠用來進一步劃分樣本。在此狀況下,使用多數表決。
  • 這涉及將給定的結點轉換成樹葉,並用樣本中的多數所在的類標記它。替換地,能夠存放結點樣本的類分佈。
  • (c) 分枝,test_attribute = a i 沒有樣本。在這種狀況下,以 samples 中的多數類建立一個樹葉

其餘算法:

C4.5:  Quinlan

Classification and Regression Trees (CART): (L. Breiman, J. Friedman, R. Olshen, C. Stone)

共同點:都是貪心算法,自上而下(Top-down approach)

區別:屬性選擇度量方法不一樣: C4.5 (gain ratio), CART(gini index), ID3 (Information Gain)

在機器學習中,若是樹的深度太大,會表現爲在訓練集上表現很是好,在測試集上的表現很差,這是由於樹的葉子分得太多,太細化,致使該狀況的出現,這被稱爲overfitting(過擬合)。爲了不overfitting,有兩種方法:

1.先剪枝。分到必定狀況下,就再也不分下去,好比設定一個閾值,在類的純度達到該閾值以後就再也不分下去。

2.後剪枝。將樹徹底建好,再根據某些條件去將多餘的樹葉剪去。

決策樹的優缺點:

優勢:直觀,便於理解,小規模數據集有效

缺點:處理連續變量很差;類別較多時,錯誤增長的比較快(算法複雜度大);可規模性通常

相關文章
相關標籤/搜索