(ZT)算法雜貨鋪——分類算法之決策樹(Decision tree)

https://www.cnblogs.com/leoo2sk/archive/2010/09/19/decision-tree.html

3.一、摘要

      在前面兩篇文章中,分別介紹和討論了樸素貝葉斯分類貝葉斯網絡兩種分類算法。這兩種算法都以貝葉斯定理爲基礎,能夠對分類及決策問題進行機率推斷。在這一篇文章中,將討論另外一種被普遍使用的分類算法——決策樹(decision tree)。相比貝葉斯算法,決策樹的優點在於構造過程不須要任何領域知識或參數設置,所以在實際應用中,對於探測式的知識發現,決策樹更加適用。html

3.二、決策樹引導

      通俗來講,決策樹分類的思想相似於找對象。現想象一個女孩的母親要給這個女孩介紹男友,因而有了下面的對話:算法

      女兒:多大年紀了?網絡

      母親:26。測試

      女兒:長的帥不帥?spa

      母親:挺帥的。3d

      女兒:收入高不?日誌

      母親:不算很高,中等狀況。orm

      女兒:是公務員不?htm

      母親:是,在稅務局上班呢。對象

      女兒:那好,我去見見。

      這個女孩的決策過程就是典型的分類樹決策。至關於經過年齡、長相、收入和是否公務員對將男人分爲兩個類別:見和不見。假設這個女孩對男人的要求是:30歲如下、長相中等以上而且是高收入者或中等以上收入的公務員,那麼這個能夠用下圖表示女孩的決策邏輯(聲明:此決策樹純屬爲了寫文章而YY的產物,沒有任何根據,也不表明任何女孩的擇偶傾向,請各位女同胞莫質問我^_^):

      上圖完整表達了這個女孩決定是否見一個約會對象的策略,其中綠色節點表示判斷條件,橙色節點表示決策結果,箭頭表示在一個判斷條件在不一樣狀況下的決策路徑,圖中紅色箭頭表示了上面例子中女孩的決策過程。

      這幅圖基本能夠算是一顆決策樹,說它「基本能夠算」是由於圖中的斷定條件沒有量化,如收入高中低等等,還不能算是嚴格意義上的決策樹,若是將全部條件量化,則就變成真正的決策樹了。

      有了上面直觀的認識,咱們能夠正式定義決策樹了:

      決策樹(decision tree)是一個樹結構(能夠是二叉樹或非二叉樹)。其每一個非葉節點表示一個特徵屬性上的測試,每一個分支表明這個特徵屬性在某個值域上的輸出,而每一個葉節點存放一個類別。使用決策樹進行決策的過程就是從根節點開始,測試待分類項中相應的特徵屬性,並按照其值選擇輸出分支,直到到達葉子節點,將葉子節點存放的類別做爲決策結果。

      能夠看到,決策樹的決策過程很是直觀,容易被人理解。目前決策樹已經成功運用於醫學、製造產業、天文學、分支生物學以及商業等諸多領域。知道了決策樹的定義以及其應用方法,下面介紹決策樹的構造算法。

3.三、決策樹的構造

      不一樣於貝葉斯算法,決策樹的構造過程不依賴領域知識,它使用屬性選擇度量來選擇將元組最好地劃分紅不一樣的類的屬性。所謂決策樹的構造就是進行屬性選擇度量肯定各個特徵屬性之間的拓撲結構。

      構造決策樹的關鍵步驟是分裂屬性。所謂分裂屬性就是在某個節點處按照某一特徵屬性的不一樣劃分構造不一樣的分支,其目標是讓各個分裂子集儘量地「純」。儘量「純」就是儘可能讓一個分裂子集中待分類項屬於同一類別。分裂屬性分爲三種不一樣的狀況:

      一、屬性是離散值且不要求生成二叉決策樹。此時用屬性的每個劃分做爲一個分支。

      二、屬性是離散值且要求生成二叉決策樹。此時使用屬性劃分的一個子集進行測試,按照「屬於此子集」和「不屬於此子集」分紅兩個分支。

      三、屬性是連續值。此時肯定一個值做爲分裂點split_point,按照>split_point和<=split_point生成兩個分支。

      構造決策樹的關鍵性內容是進行屬性選擇度量,屬性選擇度量是一種選擇分裂準則,是將給定的類標記的訓練集合的數據劃分D「最好」地分紅個體類的啓發式方法,它決定了拓撲結構及分裂點split_point的選擇。

      屬性選擇度量算法有不少,通常使用自頂向下遞歸分治法,並採用不回溯的貪心策略。這裏介紹ID3C4.5兩種經常使用算法。

3.3.一、ID3算法

      從信息論知識中咱們直到,指望信息越小,信息增益越大,從而純度越高。因此ID3算法的核心思想就是以信息增益度量屬性選擇,選擇分裂後信息增益最大的屬性進行分裂。下面先定義幾個要用到的概念。

      設D爲用類別對訓練元組進行的劃分,則D的(entropy)表示爲:

      

      其中pi表示第i個類別在整個訓練元組中出現的機率,能夠用屬於此類別元素的數量除以訓練元組元素總數量做爲估計。熵的實際意義表示是D中元組的類標號所須要的平均信息量。

      如今咱們假設將訓練元組D按屬性A進行劃分,則A對D劃分的指望信息爲:

      

      而信息增益即爲二者的差值:

      

      ID3算法就是在每次須要分裂時,計算每一個屬性的增益率,而後選擇增益率最大的屬性進行分裂。下面咱們繼續用SNS社區中不真實帳號檢測的例子說明如何使用ID3算法構造決策樹。爲了簡單起見,咱們假設訓練集合包含10個元素:

      其中s、m和l分別表示小、中和大。

      設L、F、H和R表示日誌密度、好友密度、是否使用真實頭像和帳號是否真實,下面計算各屬性的信息增益。

      

      

      

      所以日誌密度的信息增益是0.276。

      用一樣方法獲得H和F的信息增益分別爲0.033和0.553。

      由於F具備最大的信息增益,因此第一次分裂選擇F爲分裂屬性,分裂後的結果以下圖表示:

      在上圖的基礎上,再遞歸使用這個方法計算子節點的分裂屬性,最終就能夠獲得整個決策樹。

      上面爲了簡便,將特徵屬性離散化了,其實日誌密度和好友密度都是連續的屬性。對於特徵屬性爲連續值,能夠如此使用ID3算法:

      先將D中元素按照特徵屬性排序,則每兩個相鄰元素的中間點能夠看作潛在分裂點,從第一個潛在分裂點開始,分裂D並計算兩個集合的指望信息,具備最小指望信息的點稱爲這個屬性的最佳分裂點,其信息指望做爲此屬性的信息指望。

3.3.二、C4.5算法

      ID3算法存在一個問題,就是偏向於多值屬性,例如,若是存在惟一標識屬性ID,則ID3會選擇它做爲分裂屬性,這樣雖然使得劃分充分純淨,但這種劃分對分類幾乎毫無用處。ID3的後繼算法C4.5使用增益率(gain ratio)的信息增益擴充,試圖克服這個偏倚。

      C4.5算法首先定義了「分裂信息」,其定義能夠表示成:

      

      其中各符號意義與ID3算法相同,而後,增益率被定義爲:

      

      C4.5選擇具備最大增益率的屬性做爲分裂屬性,其具體應用與ID3相似,再也不贅述。

3.四、關於決策樹的幾點補充說明

3.4.一、若是屬性用完了怎麼辦

      在決策樹構造過程當中可能會出現這種狀況:全部屬性都做爲分裂屬性用光了,但有的子集還不是純淨集,即集合內的元素不屬於同一類別。在這種狀況下,因爲沒有更多信息可使用了,通常對這些子集進行「多數表決」,即便用此子集中出現次數最多的類別做爲此節點類別,而後將此節點做爲葉子節點。

3.4.二、關於剪枝

      在實際構造決策樹時,一般要進行剪枝,這時爲了處理因爲數據中的噪聲和離羣點致使的過度擬合問題。剪枝有兩種:

      先剪枝——在構造過程當中,當某個節點知足剪枝條件,則直接中止此分支的構造。

      後剪枝——先構造完成完整的決策樹,再經過某些條件遍歷樹進行剪枝。

      關於剪枝的具體算法這裏再也不詳述,有興趣的能夠參考相關文獻。

相關文章
相關標籤/搜索