學號:17101223364
姓名:張海潮
轉載自:https://m.baidu.com/from=1013966v/bd_page_type=1/ssid=0/uid=0/pu=usm%402%2Csz%40320_1001%2Cta%40iphone_2_6.0_19_5.2/baiduid=AA1EA5EC1B8323634E64640561F1A868/w=0_10_/t=iphone/l=3/tc?ref=www_iphone&lid=9334704617209648540&order=6&fm=alop&tj=www_normal_6_0_10_title&vit=osres&m=8&srd=1&cltj=cloud_title&asres=1&nt=wnor&title=%E6%95%B0%E6%8D%AE%E6%8C%96%E6%8E%98%E5%8D%81%E5%A4%A7%E7%AE%97%E6%B3%95%E4%B9%8BC4.5-CoreHua-%E5%8D%9A%E5%AE%A2%E5%9B%AD&dict=30&w_qd=IlPT2AEptyoA_yi7SI8sn3r4OVYi&sec=25189&di=9469560b534a5e37&bdenc=1&tch=124.399.320.1695.1.378&nsrc=IlPT2AEptyoA_yixCFOxXnANedT62v3IEQGG_ytK1DK6mlrte4viZQRAUSLfNWmOFkTywSPQps-DcyzyKTEz7qR2rKtmxmdN78bwdcbqhgCAKxYLfwppOQKAUDYpzK&eqid=818b886457fad8001000000159fdbe4f&wd=&clk_info=%7B%22srcid%22%3A1599%2C%22tplname%22%3A%22www_normal%22%2C%22t%22%3A1509801587723%2C%22xpath%22%3A%22div-div-div2-a-p%22%7D&sfOpen=1,有刪節
【嵌牛導讀】:
C4.5是一系列用在機器學習和數據挖掘的分類問題中的算法。它的目標是監督學習:給定一個數據集,其中的每一個元組都能用一組屬性值來描述,每一個元組屬于一個互斥的類別中的某一類。C4.5的目標是通過學習,找到一個從屬性值到類別的映射關系,并且這個映射能用于對新的類別未知的實體進行分類。
【嵌牛鼻子】:數據挖掘 算法 C4.5
【嵌牛提問】:如何理解C4.5算法?
【嵌牛正文】:
C4.5由J.Ross Quinlan在ID3的基礎上提出的。ID3算法用來構造決策樹。決策樹是一種類似流程圖的樹結構,其中每個內部節點(非樹葉節點)表示在一個屬性上的測試,每個分枝代表一個測試輸出,而每個樹葉節點存放一個類標號。一旦建立好了決策樹,對于一個未給定類標號的元組,跟蹤一條有根節點到葉節點的路徑,該葉節點就存放著該元組的預測。決策樹的優勢在于不需要任何領域知識或參數設置,適合于探測性的知識發現。
? ? 從ID3算法中衍生出了C4.5和CART兩種算法,這兩種算法在數據挖掘中都非常重要。下圖就是一棵典型的C4.5算法對數據集產生的決策樹。
數據集如圖1所示,它表示的是天氣情況與去不去打高爾夫球之間的關系。
?
C4.5并不一個算法,而是一組算法—C4.5,非剪枝C4.5和C4.5規則。下圖中的算法將給出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中的元組分類所需的期望信息為下式:
Info(D)又稱為熵。
? ? 現在假定按照屬性A劃分D中的元組,且屬性A將D劃分成v個不同的類。在該劃分之后,為了得到準確的分類還需要的信息由下面的式子度量:
信息增益定義為原來的信息需求(即僅基于類比例)與新需求(即對A劃分之后得到的)之間的差,即
一般說來,對于一個具有多個屬性的元組,用一個屬性就將它們完全分開幾乎不可能,否則的話,決策樹的深度就只能是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),定義如下:
這個值表示通過將訓練數據集D劃分成對應于屬性A測試的v個輸出的v個劃分產生的信息。信息增益率定義:
選擇具有最大增益率的屬性作為分裂屬性。
? ? (3)Gini指標
? ? Gini指標在CART中使用。Gini指標度量數據劃分或訓練元組集D的不純度,定義為:
其它特征
? ? 樹剪枝
? ? 在決策樹的創建時,由于數據中的噪聲和離群點,許多分枝反映的是訓練數據中的異常。剪枝方法是用來處理這種過分擬合數據的問題。通常剪枝方法都是使用統計度量,剪去最不可靠的分枝。
? ? 剪枝一般分兩種方法:先剪枝和后剪枝。
? ? 先剪枝方法中通過提前停止樹的構造(比如決定在某個節點不再分裂或劃分訓練元組的子集)而對樹剪枝。一旦停止,這個節點就變成樹葉,該樹葉可能取它持有的子集最頻繁的類作為自己的類。先剪枝有很多方法,比如(1)當決策樹達到一定的高度就停止決策樹的生長;(2)到達此節點的實例具有相同的特征向量,而不必一定屬于同一類,也可以停止生長(3)到達此節點的實例個數小于某個閾值的時候也可以停止樹的生長,不足之處是不能處理那些數據量比較小的特殊情況(4)計算每次擴展對系統性能的增益,如果小于某個閾值就可以讓它停止生長。先剪枝有個缺點就是視野效果問題,也就是說在相同的標準下,也許當前擴展不能滿足要求,但更進一步擴展又能滿足要求。這樣會過早停止決策樹的生長。
? ? 另一種更常用的方法是后剪枝,它由完全成長的樹剪去子樹而形成。通過刪除節點的分枝并用樹葉來替換它。樹葉一般用子樹中最頻繁的類別來標記。
? ? C4.5采用悲觀剪枝法,它使用訓練集生成決策樹又用它來進行剪枝,不需要獨立的剪枝集。
? ? 悲觀剪枝法的基本思路是:設訓練集生成的決策樹是T,用T來分類訓練集中的N的元組,設K為到達某個葉子節點的元組個數,其中分類錯誤地個數為J。由于樹T是由訓練集生成的,是適合訓練集的,因此J/K不能可信地估計錯誤率。所以用(J+0.5)/K來表示。設S為T的子樹,其葉節點個數為L(s),K的累加和為到達此子樹的葉節點的元組個數總和,J的累加和為此子樹中被錯誤分類的元組個數之和。在分類新的元組時,則其錯誤分類個數為
當用此樹分類訓練集時,設E為分類錯誤個數,當下面的式子成立時,則刪掉子樹S,用葉節點代替,且S的子樹不必再計算。