數據挖掘導論學習筆記 第四章 分類:基本概念、決策樹與模型評估

4.1預備知識

  • 分類任務的輸入數據是記錄的集合
  • 每條記錄也稱實例或者樣例,用元組(x,y)(x,y)表示,xx是屬性的集合,y是樣例的類標號(也成爲分類屬性或目標屬性)
  • 類標號必須是離散的,但屬性值可以是連續的
  • 分類(classfication)的任務就是得到一個目標函數,將每個屬性集映射到一個y上
  • 目標函數也稱分類模型
  • 分爲描述性建模和預測性建模兩種

4.2解決問題的一般方法

分類法的例子:決策樹分類法、基於規則的分類法、神經網絡、支持向量機、樸素貝葉斯分類法
混淆矩陣 (confusion matrix):用fijf_{ij}表示實際類標號爲類ii但卻被預測爲類jj的記錄數。混淆矩陣用來衡量分類模型的性能

預測的類
類=1 類=0
實際的類 類=1 f11f_{11} f10f_{10}
類=0 f10f_{10} f00f_{00}

(accuracy)= 準確率(accuracy)=\frac{正確預測數}{預測總數}

4.3 決策樹歸納(decision tree)

4.3.1決策樹原理

三種結點的定義

  • 根結點(root node)沒有入邊,但有零或多條出邊
  • 內部結點(internal node)恰有一條入邊和兩條或多條出邊
  • 葉結點(leaf node)或終結點,恰有一條入邊,無出邊,每個葉結點都賦予一個類標號

非終結點都有一個屬性測試條件,用來選擇分支

4.3.2 如何建立決策樹

最優決策樹需要指數級的計算往往不可取,因此採取一系列局部最優決策來構造決策樹。

1.Hunt 算法

DtD_t是與結點t相關聯的訓練記錄集,{yc}\{y_c\}是類標號,hunt算法定義如下:

  1. 如果DtD_t中所有記錄都屬於同一個類yty_t,則t是葉結點,用yty_t標記
  2. 如果屬於多個類,那就選擇一個屬性測試條件(attribute test condition),將記錄劃分成較小的子集。對於測試條件的每一個輸出穿緊固件一個子女結點,,將DtD_t中的記錄分配,對每個子女結點,遞歸的調用hunt算法。
2.決策樹歸納的設計問題
  1. 算法必須爲不同類型的屬性指定測試條件的方法,並且提供評估每種測試條件的客觀度量
  2. 如何停止分裂過程

4.3.3表示屬性測試條件的方法

  1. 二元屬性 二元屬性的測試條件產生兩個可能的輸出
  2. 標稱屬性 多路劃分(有幾個分幾個)或者二元劃分(k個屬性值,2k12^{k-1}-11種方法)
  3. 序數屬性 二元劃分或多路劃分,但二元劃分不能打亂原有的順序,比如{1,2,3,4}不能分成{1,3}{2,4}
  4. 連續屬性 二元劃分或多路劃分。對於二元劃分必須選好劃分點。多路劃分要選好區間,如果區間保持有序性,那麼相鄰的區間還可以聚集成較寬的區間。

4.3.4 選擇最佳劃分的度量

p(it)p(i|t)表示給定結點tt中屬於類ii的記錄所佔的比例,有時省略t,直接用p(i)p(i)表示。選擇最佳劃分的度量通常根據劃分後子女結點不純性的程度。不純性程度越低,類分佈(p1,,pi)(p_1,\cdots,p_i)就越傾斜。
不純性度量的例子包括:
Entropy(t)=i=0c1p(it)log2p(it)Gini(t)=1i=0c1[p(it)]2Classificationerror(t)=1maxi[p(it)]熵 Entropy(t)=-\sum_{i=0}^{c-1}p(i|t)log_2p(i|t)\\ \\ Gini(t)=1-\sum_{i=0}^{c-1}[p(i|t)]^2\\ Classification\quad error(t)=1-\max_i[p(i|t)]
其中c是類的個數,不同的度量變化趨勢是一致的,但值不同。
父結點與子女結點的不純程度之差越大,測試條件的效果就越好。增益Δ\Delta可以用來確定劃分效果:
Δ=I(parent)j=1kN(vi)NI(vj)\Delta=I(parent)-\sum_{j=1}^{k}\frac{N(v_i)}{N}I(v_j) 其中I(.)I(.)是給定結點的不純性度量,NN是父結點上的記錄總數,k是屬性值個數,N(vj)N(v_j) 是與子女結點vjv_j相關聯的記錄個數。
I(parent)I(parent)是不變的,所以最大化增益等價於最小化子女結點的不純性度量的加權平均值
當選擇熵作爲不純性度量時,
熵的差就是信息增益(information gain)Δinfo\Delta_{info}

屬性的劃分

數據劃分的不純性指標的加權平均值越小,數據劃分越合適。多路劃分往往比二元劃分更合適,二元劃分可以看做是多路劃分合併了某些輸出得到的。
在對連續性屬性劃分時,爲了選取劃分點,節約時間,我們不使用窮舉法,而是先將所有屬性值排序,把兩個相鄰的屬性值的中間值作爲候選劃分點,進一步簡化,我們不必考慮相同類標號之間的劃分點。

增益率

對於像顧客ID這樣的劃分,每個樣本在屬性上的值都是唯一的,每個劃分相關聯的記錄太少,以至於不能做出可靠的預測。解決這個問題的策略有兩種。

  1. 指定限制測試條件只能是二元劃分,如CART決策樹算法
  2. 修改評估劃分的標準,把屬性測試條件產生的輸出也考慮進去,例如決策樹算法C4.5採用稱作增益率(gain ratio)的劃分標準來評估劃分:
    Gain ratio=ΔinfoSplit InfoGain\ ratio=\frac{\Delta_{info}}{Split\ Info}
    其中劃分信息Split Info=i=1kP(vi)log2P(vi)Split\ Info=-\sum_{i=1}^kP(v_i)log_2P(v_i),k是劃分的總數。如果每個屬性值具有相同的記錄數,則劃分信息等於log2klog_2k.這說明如果某個屬性產生了大量的劃分,它的劃分信息將會很大,從而降低了增益率

4.3.5決策樹歸納算法

Tree Growth
1:if    stopping_cond(E,F)=ture then        %判斷是否終止決策樹的增長,通過檢查所有記錄是否都屬於同一類或者都具有相同的屬性值或者記錄數小於某個閾值
2:		leaf=createNode()                         %創建一個結點,這個結點可能是一個測試條件,也可能是一個類標號
3:		leaf.label=Classify(E)                    %爲葉結點確定類標號leaf.label=argmax p(i|t)返回最大化p(i|t)的參數值i
4:else
6:		root=creatNode()       %創建一個根結點
7:		root.test_cond=find_best_solit(E,F)             %選擇最適的屬性最爲測試條件
8:		令V={v|v是root.test_cond的一個可能的輸出}
9:		for 每個v∈V do
10:	E_v={e|root.test_cond(e)=v,並且e∈E}         %E是一個訓練記錄集,F表示屬性集
11:	child=TreeGrowth(E_v,F)
12:		將child作爲root的派生結點添加到樹中,,並將(root→child)標記爲v
13:	end for
14:end if
15:return root

4.3.7決策樹歸納的特點

  1. 不需要任何假設
  2. 尋找最佳決策樹是NP完全問題
  3. 計算代價低。未知樣本分類快,最壞情況下時間複雜度是O(w),w是樹的最大深度
  4. 簡單的數據集上,決策樹可以與其他分類算法媲美
  5. 決策樹是學習得到離散值函數的典型代表。但是對於特定的布爾問題,會產生2d2^d個結點,不適用
  6. 對於噪聲的干擾具有相當好的魯棒性
  7. 冗餘屬性不會產生不利性影響,但是不相關屬性可能會在構造過程中偶然被選中,這需要特徵選擇技術處理
  8. 子樹可能重複多次
  9. 測試條件每次只涉及一個屬性會受到決策邊界限制,對複雜關係建模的表達能力較低,所以需要以下的幾種方法解決
斜決策樹(oblique decision tree)

允許測試條件涉及多個屬性,如x+y<1x+y<1,產生更緊湊的決策樹到那時計算會變得很複雜

構造歸納(constructive induction)

創建複合屬性,代表已有屬性的算術或邏輯組合。在決策樹構造之前就增廣到數據集裏。花費很低,但會產生冗餘屬性。

10.樹剪枝(tree—pruning)減少決策樹規模,防止過擬合。

4.4模型的過分擬合

分類模型的誤差分爲兩種,訓練誤差和泛化誤差。訓練誤差隨着模型複雜度升高而降低,泛化誤差則先降低後升高。

4.4.1噪聲導致的過擬合

4.4.2缺乏代表性樣本導致的過擬合

當決策樹的葉結點沒有足夠的代表性樣本時,,很可能做出錯誤的預測,即錯誤的生成子女結點。

4.4.3過擬合與多重比較過程

T0T_0是初始決策樹,TxT_x是插入屬性x的內部結點後的決策樹。原則上,如果觀察到Δ(T0,Tx)\Delta(T_0,T_x)大於某個預先設定的閾值,就可以將x添加到樹中。但是在實踐中可能會有很多個x, {x1,,xk}\{x_1, \cdots ,x_k\},因此其實是在測試Δ(T0,Tmax)\Delta(T_0,T_{max})。隨着候選個數k的增加,Δ>α\Delta>\alpha的機率也在增大。除非根據k修改增益函數Δ\Delta或者α\alpha,否則算法會在不經意間增加一些欺騙性的結點導致過分擬合。
當選擇屬性xmaxx_{max}的訓練記錄很小時,Δ(T0,Tmax)\Delta(T_0,T_{max})方差會很大。找到Δ(T0,Tmax)>α\Delta(T_0,T_{max})>\alpha的機率也就增大了。決策樹增長到一定深度時就會發生這種情況,降低結點所覆蓋的記錄數,提高了增加不必要結點的可能性。大量候選屬性和少量訓練記錄都會導致過分擬合。

4.4.4泛化誤差估計

1.再帶入估計

假設訓練數據集可以很好的代表整體數據,即訓練誤差等於泛化誤差

2.結合模型複雜度

定義 奧卡姆剃刀:給定兩個具有相同泛化誤差的模型,較簡單的模型比複雜的模型更可取

所有的事情都應該儘可能簡單,但不是簡化
\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad\qquad ——愛因斯坦

下面介紹兩種把模型複雜度與分類模型評估結合在一起的方法
悲觀誤差評估(pessimistic error estimate)
決策樹T的悲觀誤差估計eg(T)e_g(T)表示爲
eg(T)=i=1k[e(ti)+Ω(ti)]i=1kn(ti)=e(T)+Ω(T)Nte_g(T)=\frac{\sum_{i=1}^k[e(t_i)+\Omega(t_i)]}{\sum_{i=1}^kn(t_i)}=\frac{e(T)+\Omega(T)}{N_t}其中n(t)n(t) 是結點t分類的訓練記錄數, e(t)e(t)是被誤分類的記錄數。k是決策樹的葉結點數,e(T)e(T)是決策樹的總訓練誤差,NtN_{t}是訓練記錄數,Ω(ti)\Omega(t_i)是每個結點tit_i對應的罰項。
對於二叉樹來說,如果罰項爲1,那麼說明,除非增加一個結點能夠減少一個以上的誤分類,否則就不再增加結點。

最小描述長度原則(minimum description length MDL)
通過已知的A建模並傳送類標號給B,傳輸的總代價是
=+總代價=模型編碼的開銷+誤分類記錄編碼的開銷
具體開銷方法不唯一,自查。

3.估計統計上界

泛化誤差也可以用訓練誤差的統計修正來估計。統計修正通常是計算訓練誤差的上界,考慮到達決策樹一個特定葉結點的訓練記錄數。
在決策樹算法C4.5中,假設每個葉結點上的錯誤服從二項分佈。用正態分佈近似二項分佈eupper(N,e,α)=e+zα/222N+zα/2e(1e)N+zα/224N21+zα/22Ne_{upper}(N,e,\alpha)=\frac{e+\frac{z_{\alpha /2}^2}{2N}+z_{\alpha /2}\sqrt{\frac{e(1-e)}{N}+\frac{z_{\alpha /2}^2}{4N^2}}}{1+\frac{z_{\alpha /2}^2}{N}}
其中α\alpha是置信水平,zα/2z_{\alpha /2}是標準正態分佈的標準化值,N是計算e的訓練記錄總數

4.使用確認集

將訓練集分成兩個較小的子集,一個用於訓練,另一個叫做確認集,用於估計泛化誤差。
該方法通過控制參數得到不同的模型,直到達到最低的錯誤率。

4.4.5處理決策樹歸納中的過分擬合

前面介紹的是估計分類模型泛化誤差的方法,來防止過擬合。下面介紹兩種在決策樹歸納上避免過分擬合的策略
先剪枝(提前終止規則):通過設定一些閾值來提前終止,但閾值往往很難確定,既不能太高也不能太低。
後剪枝:先生成最大規模的樹,然後自下而上剪枝。剪枝有兩種做法(1)子樹提升(subtree rasing):用新的葉結點替換子樹,該結點的類標號 由子樹下記錄中的多數類確定。 (2)子樹替換(subtree replacement)用子樹中最常使用的分支代替子樹。後剪枝的結果優於先剪枝但會消耗較多的計算量,而且剪枝後,一部分計算量被浪費了。

4.5評估分類器的性能

這一節回顧了一些常用的評估分類器性能的方法

保持方法

一部分訓練,一部分檢驗。侷限性在於:(1)訓練樣本減少,模型不如使用全部記錄好(2)模型可能依賴訓練集和檢驗集的構成,一方面訓練集越小,方差越大,另一方面,在一個子集中超出比例的類在另一個子集中就低於比例,反之亦然。

隨機二次抽樣

即多次重複保持方法。缺陷在於訓練集減少,和沒有控制每個記錄用於訓練和檢驗的次數,因此有些用於訓練的記錄使用的頻率可能比其他記錄高得多

交叉驗證

一分爲多,每一個子集檢驗,剩下的訓練。k折交叉檢驗.缺點是開銷很大。

自助法

之前的方法都是不放回抽樣,自助法(bootstrap)是有放回的抽樣。
原始數據有N個記錄,一個記錄被抽到的概率是0.632,沒有被抽到的做檢驗集,得到的自主樣本準確率的一個估計εi\varepsilon_i.抽樣b次,產生b個自主樣本。總準確率計算如下
accboot=1bi=1b(0.632×εi+0.368×accs){acc}_{boot}=\frac{1}{b} \sum_{i=1}^{b}(0.632 \times \varepsilon_i+0.368\times acc_s)

4.6比較分類器的方法

4.6.1估計準確度的置信區間

預測檢驗預測類標號的任務可以被看做二項式實驗。給定一個N個記錄的檢驗集。N充分大時用正態分佈近似,推導出準確率的置信區間
P(Zα/2<=accpp(1p)/N<=Z1α/2)=1αP(-Z_{\alpha /2}<=\frac{acc-p}{\sqrt{p(1-p)/N}}<=Z_{1-\alpha/2})=1-\alpha
Z是在置信水平(1α)(1-\alpha)下的置信界限,acc表示準確率,p表示檢驗正確的概率。通過查表可知不同置信水平下的Zα/2Z_{\alpha/2}

4.6.2比較兩個模型的性能

考慮一對模型M1M_1M2M_2,他們兩個獨立的檢驗集D1D_1D2D_2上進行評估,令 nin_iDiD_i中的記錄數,M1M_1D1D_1的錯誤率爲e1e_1,目標是檢驗e1e_1e2e_2 的觀測差是否統計顯著
設檢驗集充分大,可以用正態分佈近似,,令d=e1e2d=e_1-e_2.d的方差爲
σd2σ^d2=e1(1e1)n1+e2(1e2)n2\sigma^2_d\approx \hat{\sigma}^2_d=\frac{e_1(1-e_1)}{n_1}+\frac{e_2(1-e_2)}{n_2}
最後在置信水平(1α)%(1-\alpha)\%下,dtd_t的置信區間由下式:dt=d±zα/2σ^d2d_t=d\pm z_{\alpha/2}\hat{\sigma}^2_d

4.6.3比較兩種分類法的性能

假設我們想用k折交叉驗證的方法比較兩種分類法的性能。MijM_{ij}表示分類計數LiL_i在第j次迭代產生的模型,觀察的差的總方差用下式進行估計:
σ^dcv2=j=1k(djdˉ)k(k1)\hat{\sigma}^2_{d^{cv}}=\frac{\sum_{j=1}^{k}(d_j-\bar{d})}{k(k-1)}
其中dˉ\bar{d}是平均差。對於這個方法我們需要用tt分佈計算dcvd^{cv}的置信區間:
dcv=dˉ±t(1α),k1σ^dcv2d^{cv}=\bar{d}\pm t_{(1-\alpha),k-1}\hat{\sigma}^2_{d^{cv}}
係數t(1α),k1t_{(1-\alpha),k-1}可以通過兩個參數(置信水平(1-a)和自由度k-1)查概率表得到

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章