數據挖掘十大算法之—C4.5


    C4.5是一系列用在機器學習和數據挖掘的分類問題中的算法。它的目標是監督學習:給定一個數據集,其中的每一個元組都能用一組屬性值來描述,每一個元組屬於一個互斥的類別中的某一類。C4.5的目標是通過學習,找到一個從屬性值到類別的映射關系,並且這個映射能用於對新的類別未知的實體進行分類。

    C4.5由J.Ross Quinlan在ID3的基礎上提出的。ID3算法用來構造決策樹。決策樹是一種類似流程圖的樹結構,其中每個內部節點(非樹葉節點)表示在一個屬性上的測試,每個分枝代表一個測試輸出,而每個樹葉節點存放一個類標號。一旦建立好了決策樹,對於一個未給定類標號的元組,跟蹤一條有根節點到葉節點的路徑,該葉節點就存放着該元組的預測。決策樹的優勢在於不需要任何領域知識或參數設置,適合於探測性的知識發現。

    從ID3算法中衍生出了C4.5和CART兩種算法,這兩種算法在數據挖掘中都非常重要。下圖就是一棵典型的C4.5算法對數據集產生的決策樹。

數據集如圖1所示,它表示的是天氣情況與去不去打高爾夫球之間的關系。

image

圖1  數據集

        image

        圖2   在數據集上通過C4.5生成的決策樹

    算法描述

    C4.5並不一個算法,而是一組算法—C4.5,非剪枝C4.5和C4.5規則。下圖中的算法將給出C4.5的基本工作流程:

    image

    圖3  C4.5算法流程

    我們可能有疑問,一個元組本身有很多屬性,我們怎么知道首先要對哪個屬性進行判斷,接下來要對哪個屬性進行判斷?換句話說,在圖2中,我們怎么知道第一個要測試的屬性是Outlook,而不是Windy?其實,能回答這些問題的一個概念就是屬性選擇度量。

    屬性選擇度量

     屬性選擇度量又稱分裂規則,因為它們決定給定節點上的元組如何分裂。屬性選擇度量提供了每個屬性描述給定訓練元組的秩評定,具有最好度量得分的屬性被選作給定元組的分裂屬性。目前比較流行的屬性選擇度量有--信息增益、增益率和Gini指標。

    先做一些假設,設D是類標記元組訓練集,類標號屬性具有m個不同值,m個不同類Ci(i=1,2,…,m),CiD是D中Ci類的元組的集合,|D|和|CiD|分別是D和CiD中的元組個數。

    (1)信息增益

    信息增益實際上是ID3算法中用來進行屬性選擇度量的。它選擇具有最高信息增益的屬性來作為節點N的分裂屬性。該屬性使結果划分中的元組分類所需信息量最小。對D中的元組分類所需的期望信息為下式:

        image (1)

Info(D)又稱為熵。

    現在假定按照屬性A划分D中的元組,且屬性A將D划分成v個不同的類。在該划分之后,為了得到准確的分類還需要的信息由下面的式子度量:

        image       (2)

    信息增益定義為原來的信息需求(即僅基於類比例)與新需求(即對A划分之后得到的)之間的差,即

        image       (3)

    我想很多人看到這個地方都覺得不是很好理解,所以我自己的研究了文獻中關於這一塊的描述,也對比了上面的三個公式,下面說說我自己的理解。

    一般說來,對於一個具有多個屬性的元組,用一個屬性就將它們完全分開幾乎不可能,否則的話,決策樹的深度就只能是2了。從這里可以看出,一旦我們選擇一個屬性A,假設將元組分成了兩個部分A1和A2,由於A1和A2還可以用其它屬性接着再分,所以又引出一個新的問題:接下來我們要選擇哪個屬性來分類?對D中元組分類所需的期望信息是Info(D) ,那么同理,當我們通過A將D划分成v個子集Dj(j=1,2,…,v)之后,我們要對Dj的元組進行分類,需要的期望信息就是Info(Dj),而一共有v個類,所以對v個集合再分類,需要的信息就是公式(2)了。由此可知,如果公式(2)越小,是不是意味着我們接下來對A分出來的幾個集合再進行分類所需要的信息就越小?而對於給定的訓練集,實際上Info(D)已經固定了,所以選擇信息增益最大的屬性作為分裂點。

    但是,使用信息增益的話其實是有一個缺點,那就是它偏向於具有大量值的屬性。什么意思呢?就是說在訓練集中,某個屬性所取的不同值的個數越多,那么越有可能拿它來作為分裂屬性。例如一個訓練集中有10個元組,對於某一個屬相A,它分別取1-10這十個數,如果對A進行分裂將會分成10個類,那么對於每一個類Info(Dj)=0,從而式(2)為0,該屬性划分所得到的信息增益(3)最大,但是很顯然,這種划分沒有意義。

  (2)信息增益率

   正是基於此,ID3后面的C4.5采用了信息增益率這樣一個概念。信息增益率使用“分裂信息”值將信息增益規范化。分類信息類似於Info(D),定義如下:

        image    (4)

這個值表示通過將訓練數據集D划分成對應於屬性A測試的v個輸出的v個划分產生的信息。信息增益率定義:

        image         (5)

選擇具有最大增益率的屬性作為分裂屬性。

    (3)Gini指標

    Gini指標在CART中使用。Gini指標度量數據划分或訓練元組集D的不純度,定義為:

        image         (6)

    其它特征

    樹剪枝

    在決策樹的創建時,由於數據中的噪聲和離群點,許多分枝反映的是訓練數據中的異常。剪枝方法是用來處理這種過分擬合數據的問題。通常剪枝方法都是使用統計度量,剪去最不可靠的分枝。

    剪枝一般分兩種方法:先剪枝和后剪枝。

    先剪枝方法中通過提前停止樹的構造(比如決定在某個節點不再分裂或划分訓練元組的子集)而對樹剪枝。一旦停止,這個節點就變成樹葉,該樹葉可能取它持有的子集最頻繁的類作為自己的類。先剪枝有很多方法,比如(1)當決策樹達到一定的高度就停止決策樹的生長;(2)到達此節點的實例具有相同的特征向量,而不必一定屬於同一類,也可以停止生長(3)到達此節點的實例個數小於某個閾值的時候也可以停止樹的生長,不足之處是不能處理那些數據量比較小的特殊情況(4)計算每次擴展對系統性能的增益,如果小於某個閾值就可以讓它停止生長。先剪枝有個缺點就是視野效果問題,也就是說在相同的標准下,也許當前擴展不能滿足要求,但更進一步擴展又能滿足要求。這樣會過早停止決策樹的生長。

    另一種更常用的方法是后剪枝,它由完全成長的樹剪去子樹而形成。通過刪除節點的分枝並用樹葉來替換它。樹葉一般用子樹中最頻繁的類別來標記。

    C4.5采用悲觀剪枝法,它使用訓練集生成決策樹又用它來進行剪枝,不需要獨立的剪枝集。

    悲觀剪枝法的基本思路是:設訓練集生成的決策樹是T,用T來分類訓練集中的N的元組,設K為到達某個葉子節點的元組個數,其中分類錯誤地個數為J。由於樹T是由訓練集生成的,是適合訓練集的,因此J/K不能可信地估計錯誤率。所以用(J+0.5)/K來表示。設S為T的子樹,其葉節點個數為L(s),image 為到達此子樹的葉節點的元組個數總和,image 為此子樹中被錯誤分類的元組個數之和。在分類新的元組時,則其錯誤分類個數為image ,其標准錯誤表示為:image  。當用此樹分類訓練集時,設E為分類錯誤個數,當下面的式子成立時,則刪掉子樹S,用葉節點代替,且S的子樹不必再計算。

        image

   


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM