1. 程式人生 > >資料探勘概念與分析第八章筆記

資料探勘概念與分析第八章筆記

分類的基本概念

分類 

分類是一種重要的資料分析形式,它提取刻畫重要資料類的模型,這種模型稱為分類器,預測分類(離散的,無序的)類標號。

分類和數值預測是預測問題的兩種主要型別。

分類的一般方法 

資料分類涉及兩個過程:

1:學習階段:建立描述預先定義的資料類或概念集的分類器。分類演算法通過分析或從訓練集"學習"來構造分類器。

訓練集是由資料庫元組和與它們相關聯的類標號組成,用向量來表示X=(x1,x2,x3,x4...),類標號屬性是離散值或者是無序的。由於提供了每個訓練元組的類標號,這一階段也稱為監督學習。對應的還有無監督學習,這兩者的區分就是訓練集的類標號是否是已知的。無監督學習的例子是聚類。

2:分類階段 :我們通過學習階段就可以得到一個分類器,但是我們在使用分類器之前我們應該先評估一下分類器的預測準確率來確定該分類器是否是優秀的。

分類器在檢驗集上進行檢驗,檢驗集是由檢驗元組和與他們相關聯的類標號組成的。分類器在給定檢驗集上的準確率是分類器正確分類的檢驗元組所佔的百分比。如果得到的準確率是我們能夠接受的,就說明這個分類器模型是能夠被我們接受的,然後就可以對資料進行分類了。

決策樹歸納

當下有很多的分類器模型,決策樹分類器是一個相當經典的分類器,只要是接觸機器學習,資料等方面的同學,一定聽到過這個名詞。

決策樹分類為何如此流行?決策樹分類器的構造不需要任何領域的知識或引數設定,因此適合於探測式知識發現。此外,這個分類器還可以處理高維資料,而且採用的是類似於樹這種形式,也特別直觀和便於理解。因此,決策樹是許多商業規則歸納系統的基礎。

決策樹歸納是從有類標號的訓練元組中學習決策樹,其中的內部結點表示在一個屬性上的測試,每個分支代表該測試的一個輸出,而每個樹葉節點存放一個類標號。決策樹的基本演算法有ID3,C4.5,CART。這三個方法都採用了貪心(非回溯)方法,其中決策樹以自頂向下遞迴的分治方式構造。

決策樹的步驟如下:(書中p214-p217有具體的講解)

1:我們從單節點N開始,N代表的是D中的訓練元組,如果D中的元組為同一類,那麼我們就用不著對該元組進行分類,那麼N的話就變成樹葉,我們用該類標記它。

2:如果D中的訓練元組不是同一類,那麼我們就要對其進行分類,所以,我們應該按照什麼順序分類呢?就拿書上的例子來說,現在有屬性age,name,income,lan_decision這四個屬性,我們是先按照age來分還是先按照那name來分。這個不能隨便分,要是隨便分都可以的話,這個方法也就沒意義了。書中圖8.3中的attribute_list為候選的屬性集合

,而根據劃分的依據是根據度量依次選出屬性集合中最合適的屬性來作為分裂屬性。理想的情況下,分裂準則使得每個分支上的輸出分割槽都能儘可能"純"。書中介紹了三種方法:Gain(資訊增益),Gainratio(增益率),Giniindex(基尼指數)。把這三種方法弄清楚之後,就知道選擇哪一個屬性作為分裂屬性是最合適的

3:當我們選出分裂屬性之後,我們根據分裂屬性劃分元組的情況進行討論。分裂屬性是讓我們只是要劃分哪一個,但是怎麼劃分還是一個問題。因為屬性可以是離散和連續的,所以劃分規則有如下:

A:若A是離散的,則對A的每個已知值劃分一個分支

B:若A是連續的,則產生兩個分支 A<=split-point 和 A>split-point

C:A是離散的並且必須要產生一個二叉樹,則進行子集的劃分

4:返回決策樹

這裡對遞迴劃分步驟的終止條件進行一下總結:

1:分割槽D的所有元組都屬於用一個類

2:沒有剩餘屬性可以用來進一步劃分元組

3:給定的分支沒有元組,即D的分割槽為空。

屬性選擇度量

剛剛我們在產生決策樹的過程中提到了屬性選擇度量,用來確定使用那一個屬性作為分裂屬性最好,這裡有三個方法:

1:資訊增益

設節點N代表或存放分割槽D的元組。選擇具有最高資訊增益的屬性作為結點N的分裂屬性。該屬性使結果分割槽中對元組分類所需要的資訊量最小,並反映這些分割槽中的最小隨機性或"不純性"。資訊增益定義為原來的資訊需求與新的資訊需求(即對A進行劃分之後)之間的差。公式在書中已經給出,結合書中的例8.1來理解。

在p219下方提出了一個問題,如何計算連續值屬性的資訊增益?書中簡單說了一下,但是說的並不是很明白,所以我去查閱了一些相關資料,這裡可以進行參考計算連續值的資訊增益

資訊增益度量偏向具有許多輸出的測試,就是傾向於選擇具有大量值的屬性

2:增益率

同資訊增益相同,選擇具有最高的增益率的屬性作為結點N的分裂屬性。

當通過一個屬性的劃分將導致大量分割槽,每個元祖只包含一個元祖。由於每個分割槽都是純的,所以基於該劃分對資料集D分類所需要的資訊為0,因此,通過該屬性的劃分得到的資訊增益最大。顯然這種劃分對分類沒有用,所以提出了增益率的思想。

書中已經給出公式和例子。
3:基尼指數 

基尼指數度量資料分割槽或訓練元組集D的不純度。書中寫的很詳細,還考慮了A是離散和連續的情況,看書中的例8.3就很好理解了。

決策樹演算法的差別:

 決策樹演算法之間的差別包括在建立樹時如何選擇屬性和利用剪枝的機制

ID3使用資訊增益,C4.5使用Gainratio,CART使用Giniindex(基尼指數)

所有的度量都具有某種偏倚,已經證明,決策樹歸納的時間複雜度一般隨樹的高度指數增加。因此,傾向於產生較淺的樹的度量儘可能更可取,然而,某些研究發現,較淺的樹趨向於具有大量樹葉和較高的錯誤率。所以這個好壞也不是絕對的,遇到具體問題具體再說吧,大部分度量都產生相當好的結果。

樹剪枝

在決策樹建立時,由於資料中的噪聲和離群點,許多分支反應的是訓練資料中的異常。剪枝方法處理這種過分擬合數據問題。

常用的兩種剪枝方法:先剪枝和後剪枝。

1:先剪枝:通過提前停止樹的構建而對樹"剪枝".一旦停止,節點就成為樹葉,該樹葉可以持有子集元組中最頻繁的類

2:後剪枝:這個更常用,就是在完全生長好的樹上減去子樹。通過刪除結點的分支並用樹葉替換它而剪掉非定節點上的子樹。該樹葉的類標號用子樹中最頻繁的類標記。

決策分類樹的發展 

1:決策樹的可伸縮性 

在前面的ID3,C4.5,CART演算法中,我們會遇到一個問題就是這個決策樹演算法都限制訓練元祖駐留在記憶體中,針對這個問題,我們也提出了新的決策樹演算法,如RainForest能適應可用的記憶體量,並用於任意決策樹歸納演算法,p224 8.2.4節有具體講解。

2.決策樹歸納的視覺化挖掘 
隨著發展,我們對決策樹的構建越來越希望有一種視覺化的方式,能夠使我們以一種互動式的方式進行構建。那麼有沒有這麼一種工具呢? 書P225,8.2.5節詳細討論了這麼一個問題。有點看不懂,這個瞭解一下就好了

貝葉斯分類演算法

可以參考這篇文章貝葉斯演算法

貝葉斯演算法是基於貝葉斯定理的,所以我們需要知道貝葉斯定理,書中已經給出了計算公式。

這一小節主要是把計算公式弄清楚就好了,書中也寫的很詳細了,如果還有不懂的,也可以借鑑我給找出的那篇部落格來理解。

基於規則的分類

規則是表示資訊或少量知識的好方法,基於規則的分類器使用一組IF-THEN規則表示。 

如何建立基於規則的分類器呢? 

1:由決策樹提取規則

對每條從根到樹葉結點的路徑建立一個規則。沿著給定路徑上的每個分裂準則的邏輯AND形成規則前件,存放類預測的樹葉結點形成規則的後件。由於這些規則直接從樹中提取,所以他們是互斥的和窮舉的。

因為是從決策樹上面提取的規則,所以存在異常的點,處理異常有兩種方法:

1:先對決策樹進行剪枝,再提取資料

2:直接提取資料,然後對規則進行修剪

2.使用順序覆蓋演算法提取規則 

使用順序覆蓋演算法可以直接從訓練資料中提取IF-THEN規則(即不必產生決策樹),順序覆蓋演算法是最廣泛使用的挖掘分類規則析取集的方法。

演算法的一般策略是:一次學習一個規則,每學習一個規則,就刪除該規則覆蓋的元組,並在剩下的元組上重複該過程,這種演算法的思想與決策樹的完全不同。我們回想一下決策樹的演算法思想,它是把一整塊的資料經過數次劃分之後,細化成規則。所以它是在同時學習一組規則,而順序覆蓋演算法是一次學習一條規則 

該演算法具體是怎樣實現的呢?書中有例8.11,我們結合這個例子來看。學習的過程是從一般逐漸到特殊,最開始從規則前件條件為空的規則開始,然後逐步添加當時看上去最好的一個屬性,然後重複這個過程直至最後。 

同決策樹一樣,我們新增規則的時候我們怎麼知道那個屬性是當時最好的呢?順序覆蓋演算法也有一個規則質量度量 

同決策樹的屬性選擇度量有:Gain,Gainration.Giniindex幾個指標一樣,順序覆蓋演算法的的規則質量度量也有幾個指標:熵,基於資訊增益的度量
其實,就我們自己單純的認知來說,每新增一個條件,只要提高這個規則的準確率不就好了嗎? 但事實上這是並不行的,準確率本身並非規則質量的可靠估計,覆蓋率本身也沒有用。最好的做法是整合準確率和覆蓋率。 書P234,例8.8詳細討論了這個問題。 

模型評估與選擇

 評估分類器效能的度量

 使用訓練資料匯出分類器,然後評估結果模型的準確率可能錯誤地導致過於樂觀的估計。分類器的準確率最好在檢驗集上估計

書中p237介紹了正元組負元組真正例真負例假正例、假負例 等的概念,要先了解這些概念,才能更好的理解公式

混淆矩陣是分析分類器識別不同類元組的一種有用工具。給定m個類,混淆矩陣是一個至少為m * m的表,前m行和m列中的表目指出類i的元組被分類器標記為類j的個數。

通過混淆矩陣我們可以計算準確率,錯誤率,敏感度(真正例率)、真負例率、精度。圖8.13給出了計算公式,結合例子很好理解。p239下方要求證明F度量是精度和召回率的調和均值。調和均值就是總體各統計量倒數的算術平均數的倒數,很好證明。

保持方法和隨即二次抽樣

保持:在這種方法中,給定資料隨即地分成兩個獨立的集合:訓練集和檢驗集。通常2/3的資料分配到訓練集,剩下的分配到檢驗集,使用訓練集匯出模型,其準確率用檢驗集估計。

隨即二次抽樣:將保持方法重複k次。總準確率估計取每次迭代準確率的平均值

交叉驗證

第一次:D2,D3,D4,D5,D6..Dk一起做訓練集,D1做檢驗集

第二次:D1,D3,D4,D5,D6..Dk一起做訓練集,D2做檢驗集

第三次:D1,D2,D4,D5,D6..Dk一起做訓練集,D3做檢驗集

.....................

一般建議使用分層10-折交叉驗證估計準確率,因為它具有相對較低的偏倚和方差。對於分類,準確率是k次迭代正確分類的元組總數除以初始資料中的元組總數

自助法

在資料集中有放回的均勻抽樣,最常用的是一種.632自助法,在平均情況下,63.2%原資料元組將出現在自助樣本中,其餘的餓38.8%的元組將形成檢驗集,其中書中有推導方法。

 使用統計顯著性檢驗選擇模型

我們在前面講了使用一些方法來預測分類的準確率,假設已經由資料產生了兩個分類器M1,M2。他們的評估度量都不相同,那麼我們應該選擇哪一個分類器最好呢?直觀地,我們可以選擇具有最低錯誤率的模型。然而,平均錯誤率只是對未來資料真實總體上的錯誤估計,所以我們要評估兩個分類器的準確率之差是否是偶然的,這裡要用統計顯著性來驗證 

實際上,在比較兩個模型的效能這件事情上遠比大家想象的複雜得多。 因為這涉及到幾個重要的因素:首先,我們希望比較的是泛化效能,然後通過實驗評估方法我們獲得的只是測試集上的效能,兩者的對比結果可能未必相同;第二,測試集上的效能與測試集本身上的選擇有很大關係。且不論使用不同大小的測試集會得到不同的結果,即便使用相同大小的測試集,若包含的測試樣例不同,測試結果也會不同。第三,很多演算法實際上都是有一定的隨機性的,即便使用相同的的引數設定,在同一個測試集上執行多次,其結果也會有不同。因此,正因為有這麼多的無法確定的因素,所以我們才要在統計學上去尋求幫助。 

為了確定兩個模型之間存在真正的差別,我們需要進行統計顯著性檢驗。最後我們希望得到的是這樣一個陳述:經檢驗,A分類器比B分類器好,且這種論斷的誤差在正負4%以內。

我們使用的是t-檢驗,不論是卡方檢驗,還是t-檢驗還是z-檢驗等,都是為了統計樣本的實際觀測值與理論推斷值之間的偏離程度(第三章的學習記錄)。在這裡,我們假設這兩個分類器是相同的,如果計算值大於標準閾值,則我們拒絕假設,則這兩個分類器之間存在統計顯著的差別。p242中講解了,但是還是有點理解不到,做個記號後面再看看。

ROC曲線先放一放

提高分類準確率的技術

組合分類器比其他的成員分類器更準確

組合分類把k個學習得到的模型M1,M2,M3,M4...Mk組合在一起,旨在建立一個改進的複合分類模型M*。給定一個待分類的新資料元組,每個基分類器通過返回類預測投票。組合分類器基於分類器的投票返回類預測。 

裝袋,提升和AdaBoost,隨即森林