1. 程式人生 > >實驗二 分類演算法實驗

實驗二 分類演算法實驗

一.實驗目的

1.鞏固4種基本的分類演算法的演算法思想:樸素貝葉斯演算法,決策樹演算法,人工神經網路,支援向量機演算法;
2.能夠使用現有的分類器演算法程式碼進行分類操作
3.學習如何調節演算法的引數以提高分類效能;

二、實驗的硬體、軟體平臺

硬體:計算機
軟體:作業系統:WINDOWS 2000
應用軟體:C,Java或者Matlab,Weka

三、實驗內容及步驟

利用現有的分類器演算法對文字資料集進行分類
實驗步驟:
1.瞭解文字資料集的情況並閱讀演算法程式碼說明文件;
2.利用文字資料集中的訓練資料對演算法進行引數學習;
3.利用學習的分類器對測試資料集進行測試;
4.統計測試結果;

四、思考題

1.如何在引數學習或者其他方面提高演算法的分類效能?

五、使用WeKa進行問題求解

資料分析

視覺化資料集
這裡寫圖片描述

我們發現只有第6列的圖形存在4種顏色且各種顏色之間具有明顯的分類邊界,因此Class_Values可以作為我們進行分類的類別。

特徵分析

這裡寫圖片描述

從上面的結果可知:
資料集存在7中特徵,使用Class_Values作為類別劃分的特徵。

由此我們得知,我們可以對資料集可以使用分類演算法,使用Class_Values作為類別劃分的特徵,並且存在4種類別。

測試型別

這裡寫圖片描述

樸素貝葉斯演算法

樸素貝葉斯法是基於貝葉斯定理與特徵條件獨立假設的分類方法。訓練的時候,學習輸入輸出的聯合概率分佈;分類的時候,利用貝葉斯定理計算後驗概率最大的輸出。

貝葉斯公式

貝葉斯定理之所以有用,是因為我們在生活中經常遇到這種情況:我們可以很容易直接得出P(A|B),P(B|A)則很難直接得出,但我們更關心P(B|A),貝葉斯定理就為我們打通從P(A|B)獲得P(B|A)的道路。
下面不加證明地直接給出貝葉斯公式:
這裡寫圖片描述
換個表達形式就會明朗很多,如下:
這裡寫圖片描述

條件獨立性

設輸入空間輸入空間這裡寫圖片描述為n維向量的集合,輸出空間為類標記集合輸出空間y={c1……ck}。輸入特徵向量x和輸出類標記y分屬於這兩個集合。X是輸入空間上的隨機變數,Y是輸出空間上的隨機變數。P(X,Y)是X和Y的聯合概率分佈,訓練資料集

這裡寫圖片描述
以及條件概率分佈:
這裡寫圖片描述


於是根據聯合概率分佈密度函式:
這裡寫圖片描述
學習到聯合概率分佈P(X,Y)。

而條件概率分佈條件概率分佈這裡寫圖片描述的引數數量是指數級的,也就是X和Y的組合很多,假設xj可能取值Sj個,Y可能取值有K個,那麼引數的個數是引數個數這裡寫圖片描述。特別地,取xj=S,那麼引數個數為KSn,當維數n很大的時候,就會發生維數災難。如下圖:
這裡寫圖片描述
這種指數級的複雜度增長被稱為維數災難。
為了計算它,樸素貝葉斯法對它做了條件獨立性的假設:
這裡寫圖片描述
也就是各個維度的特徵在類確定的情況下都是獨立分佈的。這一假設簡化了計算,也犧牲了一定的分類準確率。

樸素貝葉斯演算法

基於條件獨立性假設,以及貝葉斯公式,得到後驗概率為:
這裡寫圖片描述

將獨立性假設代入上式,得到:
這裡寫圖片描述

樸素貝葉斯分類器可以表示為:

這裡寫圖片描述

也就是給定引數,找一個概率最大的ck出來。注意到上式分母其實就是P(X=x),x給定了就固定了,跟ck一點關係都沒有,所以分母可以去掉,得到:
這裡寫圖片描述

極大似然估計

前面說過,樸素貝葉斯法要學習的東西就是P(Y=ck)和P(X=x|Y=ck),這兩個概率的估計用極大似然估計法(簡單講,就是用樣本猜測模型引數,或者說使得似然函式最大的引數)進行:
這裡寫圖片描述
也就是用樣本中ck的出現次數除以樣本容量。

這裡寫圖片描述
分子是樣本中變數組合的出現次數,分母是上面說過的樣本中ck的出現次數。

分類演算法

先從訓練資料中計算先驗概率和條件概率,然後對於給定的例項計算最大的條件概率,輸出該條件對應的類別。形式化的描述如下:
這裡寫圖片描述

實驗結果(使用NaiveBayes演算法)

這裡寫圖片描述
正確率:
87.0949%

執行時間

0s

決策樹演算法

決策樹學習演算法包含特徵選擇、決策樹的生成與剪枝過程。決策樹的學習演算法一般是遞迴地選擇最優特徵,並用最優特徵對資料集進行分割。開始時,構建根節點,選擇最優特徵,該特徵有幾種值就分割為幾個子集,每個子集分別遞迴呼叫此方法,返回節點,返回的節點就是上一層的子節點。直到資料集為空,或者資料集只有一維特徵為止。

不同的決策樹演算法使用不同特徵選擇方式。比如:
ID3 演算法選擇資訊增益最大的特徵進行劃分
C4.5 演算法選擇資訊增益比最大的特徵進行劃分
CART演算法選擇基尼指數最大的特徵進行劃分

本次實驗選擇J48演算法(C4.5演算法)進行求解。

資訊熵

對於一個可能有n種取值的隨機變數:
這裡寫圖片描述

其熵為:
這裡寫圖片描述

X的熵與X的值無關,只與分佈有關,所以也可以將X的熵記作H(p),即:
這裡寫圖片描述

條件熵H(Y|X)

表示在已知隨機變數X的條件下隨機變數Y的不確定性,定義為在X給定的條件下,Y的條件概率分佈對X的數學期望:
這裡寫圖片描述

資訊增益

資訊增益表示得知特徵X的資訊而使類Y的資訊的熵減少的程度。形式化的定義如下:
這裡寫圖片描述

資訊增益比

這裡寫圖片描述

C4.5 演算法

這裡寫圖片描述

實驗結果(使用J48演算法)

這裡寫圖片描述
正確率:
96.2936%

模型建立時間

0.05s

視覺化決策樹

這裡寫圖片描述

人工神經網路

人工神經網路簡介

人工神經網路由三部分組成:
- 架構:描述神經元的層次與連線神經元的結構
- 激勵函式
- 找出最優權重值的學習演算法

人工神經網路主要型別:
1. 前饋神經網路:最常用的神經網路型別,一般定義為有向無環圖,訊號只能沿著最終出入的那個方向傳播
2. 反饋神經網路:網路圖中有環.反饋環表示網路的一種內部狀態

多層感知器

多層感知器(multilayer perceptron,MLP)是最流行的人工神經網路之一。它的名稱不太恰當,多層感知器並非指單個帶有多個層次的感知器,而是指可以是感知器的人工神經元組成的多個層次。MPL的層次結構是一個有向無環圖。通常,每一層都全連線到下一層,某一層上的每個人工神經元的輸出成為下一層若干人工神經元的輸入。MLP至少有三層人工神經元。網路結構如下,分為輸入,隱層與輸出層:
這裡寫圖片描述

激勵函式

隱藏層中的人工神經元,也稱單元,通常用非線性激勵函式,如雙曲正切函式和邏輯函式:
f(x)=tanh(x)
f(x)=1/(1+e^(-x))

成本函式

和其他監督模型一樣,目標是找到成本函式最小化的權重值,通常,mlp的成本函式是殘差平方和的均值,計算公式如下:

這裡寫圖片描述

成本函式最小化

反向傳播(backpropagation)演算法經常用來連線優化演算法求解成本函式最小化問題,比如梯度下降法。這個演算法名稱是反向(back)和傳播(propagation)的合成詞,是指誤差在網路層的流向。理論上,反向傳播可以用於訓練具有任意層、任意數量隱藏單元的前饋人工神經網路,但是計算能力的實際限制會約束反向傳播的能力。

BP演算法

前向傳播

在前向傳播(forward propagation)階段,特徵變數被輸入到網路,然後傳播到下一層產生輸出激勵(activation)。首先,我們計算Hidden1單元的激勵。我們找到Hidden1單元的的加權和,然後用激勵函式處理輸入的加權和。注意Hidden1單元會收到一個常誤差項輸入單元,並沒有在下圖中畫出。其中 g(x)是一個激勵函式:

這裡寫圖片描述

然後,我們計算第二個隱藏單元Hidden2。和Hidden1類似,它也會收到一個常誤差項輸入單元。我們計算輸入單元的加權和,或成為預激勵,經過激勵函式處理的激勵如下圖所示:

這裡寫圖片描述

同理,我們計算第三個隱藏單元Hidden3的激勵:
這裡寫圖片描述

第一個隱藏層三個隱藏單元的激勵計算完之後,我們再處理第二個隱藏層。本例中,第一個隱藏層第一個隱藏層到第二個隱藏層。與第一個隱藏層三個隱藏單元計算過程類似,都有一個常誤差項輸入單元.
當第二個隱藏層三個隱藏單元的激勵計算完成後,我們計算輸出層。Output1的激勵是第二個隱藏層三個隱藏單元的激勵的加權和經過激勵函式處理的結果。類似與隱藏單元,有一個常誤差項的輸入單元,如下圖所示:

這裡寫圖片描述

同理,我們可以計算第二個輸出單元Output2的激勵。

計算完神經網路中所有單元的激勵之後,我們就完成了前向傳播過程。用這些隨機生成的權重值是不可能很好的近似網路的真實函式的。我們必須更新權重值來生成一個更好的近似函式。

反向傳播

我們把輸出單元計算的誤差作為網路誤差。隱藏單元表示不可見的變數;沒有資料可以進行對照,因此我們無法度量隱藏單元。為了更新權重,我們必須把網路的誤差反向傳回。於是,我們先從Output1輸出單元開始。其誤差等於真實值與預測值的差,乘以激勵函式對Output1輸出單元的偏導數:

這裡寫圖片描述

算完輸出層的誤差之後,我們把誤差傳回第二個隱藏層。首先,我們計算Hidden4的誤差。把Output1的誤差乘以連線Hidden4與Output1的權重,再Output2的誤差乘以連線Hidden4與Output2的權重,再把它們相加就得到了Hidden4的誤差:

這裡寫圖片描述

算完第一個隱藏層的誤差之後,我們用這些誤差來升級權重值。首先升級連線輸入單元與Hidden1的邊的權重,以及連線常誤差項與Hidden1的邊的權重。我們將連線Input1與Hidden1的邊的權重Weight1增加學習速率,Hidden1的誤差以及Input1的值的乘積。

按同樣的方法處理權重Weight2,我們把學習速率,Hidden1的誤差以及Input2的值的乘積增加到Weight2。最後,我們計算常誤差項輸入的權重,把學習速率,Hidden1的誤差以及常誤差項的值1的乘積增加到常誤差項輸入的權重,如下圖所示:

這裡寫圖片描述

使用同樣的方法更新其它權重。這個階段網路權重的更新工作就完成了。我們現在可以用心的權重再執行一遍前向傳播,成本函式的值應該會減少。重複這個過程直到模型收斂或者停止條件得到了滿足為止。與之前我們介紹過的線性模型不同,反向傳播不能優化凸函式。反向傳播可能用某個區域性最小值的引數值達到收斂,而不是全域性最小值。實際應用中,區域性最小值通常可以解決問題。

實驗結果(使用MLP演算法)

這裡寫圖片描述

正確率:
100%

執行時間

5.06s

視覺化神經網路

這裡寫圖片描述

支援向量機演算法

線性可分支援向量機:

假設給定一個特徵空間上的訓練資料集
這裡寫圖片描述

學習的目標是在特徵空間中找到一個分離超平面,能將例項分到不同的類。分離超平面對應於方程法向量方程這裡寫圖片描述它由法向量w和截距b決定,可用(w,b) 來表示。分離超平面將特徵空間劃分為兩部分,一部分是正類,一部分是負類。法向量指向的一側為正類,另一側為負類。

一般地,當訓練資料集線性可分時,存在無窮個分離超平面可將兩類資料正確分開。感知機利用誤分類最小的策略,求得分離超平面,不過這時的解有無窮多個。線性可分支援向量機利用間隔最大化求最優分離超平面,這時,解是唯一的。

給定線性可分訓練資料集,通過間隔最大化或等價地求解相應的凸二次規劃問題學習得到的分離超平面為:
這裡寫圖片描述
以及相應的分類決策函式 :
這裡寫圖片描述

稱為線性可分支援向量機。

考慮如圖所示的二維特徵空間中的分類問題。圖中“。”表示正例,“x ”表示負例。訓練資料集線性可分,這時有許多直線能將兩類資料正確劃分。線性可分支援向量機對應著將兩類資料正確劃分並且間隔最大的直線,如圖所示。
這裡寫圖片描述

函式間隔和幾何間隔

對於給定的訓練資料集T和超平面(w,b),定義超平 面(w,b)關於樣本點(xi,yi)的函式間隔為
這裡寫圖片描述

定義超平面(w,b)關於訓練資料集T的函式間隔為超平面(w,b)關於T中所有樣本點樣本點.png的函式間隔之最小值,即
這裡寫圖片描述

函式間隔可以表示分類預測的正確性及確信度。但是當我們成比例地改變w和b,例如將它們改為2w和2b,超平面並沒有改變,但函式間隔卻成為原來的2倍。這一事實啟示我們,函式間隔不能用作間隔最大化的標準。

於是得到幾何間隔

對於給定的訓練資料集T和超平面(w,b),定義超平 面(w,b)關於樣本點樣本點這裡寫圖片描述的幾何間隔為
這裡寫圖片描述

所以同樣可以得到資料集的幾何間隔為:
這裡寫圖片描述

我們發現函式間隔與集合間隔具有如下關係:

這裡寫圖片描述

當我們成倍地增加w和b的值時,超平面並不會改變。

間隔最大化

支援向量機學習的基本想法是求解能夠正確劃分訓練資料集並且幾何間隔最大的分離超平面。對線性可分的訓練資料集而言,線性可分分離超平面有無窮多個(等價於感知機),但是幾何間隔最大的分離超平面是唯一的。這裡的間隔最大化又稱為硬間隔最大化(與將要討論的訓練資料集近似線性可分時的軟間隔最大化相對應)。

間隔最大化的直觀解釋是:對訓練資料集找到幾何間隔最大的超平面意味著以充分大的確信度對訓練資料進行分類。也就是說,不僅將正負例項點分開,而且對最難分的例項點(離超平面最近的點)也有足夠大的確信度將它們分開。這樣的超平面應該對未知的新例項有很好的分類預測能力。

1、最大間隔分離超平面

下面考慮如何求得一個幾何間隔最大的分離超平面,即最大間隔分離超平面。具體地,這個問題可以表示為下面的約束最優化問題:

這裡寫圖片描述

考慮幾何間隔和函式間隔的關係式幾何間隔和函式間隔的關係式,可將這個問題改寫為
這裡寫圖片描述

我們上面說到:成倍地改變w和b的值,超平面不會改變。因此可以改寫該問題,在約束條件的兩邊同時除以這裡寫圖片描述,使得最右邊為1,並且最大化這裡寫圖片描述和最小化這裡寫圖片描述是等價的,因此得到新關係式:
這裡寫圖片描述

這是一個凸二次規劃(convex quadratic programming)問題。

支援向量和間隔邊界

線上性可分情況下,訓練資料集的樣本點中與分離超平面距離最近的樣本點的例項稱為支援向量(support vector)。支援向量是使約束條件式這裡寫圖片描述成立的點。

如圖所示,在H1和H2上的點就是支援向量。
這裡寫圖片描述

注意到H1和H2平行,並且沒有例項點落在它們中間。在H1和H2之間形成一條長帶,分離超平面與它們平行且位於它們中央。長帶的寬度,即H1和H2之間的距離稱為間隔(margin)。間隔依賴於分離超平面的法向量w。H1和H2稱為間隔邊界。

在決定分離超平面時只有支援向量起作用,而其他例項點並不起作用。如果移動支援向量將改變所求的解;但是如果在間隔邊界以外移動其他例項點,甚至去掉這些點,則解是不會改變的。由於支援向量在確定分離超平面中起著決定性作用,所以將這種分類模型稱為支援向量機。支援向量的個數一般很少,所以支援向量機由很少的“重要的”訓練樣本確定。

學習的對偶演算法

原始的最優化問題為:

這裡寫圖片描述

首先構建拉格朗日函式(Lagrange function)。為此,對每一個不等式約束不等式約束。引進拉格朗日乘子(Lagrauge multiplier)拉格朗日乘子這裡寫圖片描述得到拉格朗日函式:

這裡寫圖片描述

根據拉格朗日對偶性,原始問題的對偶問題是極大極小問題:

這裡寫圖片描述

最後得到等價的最優化問題(證明過程省略):
這裡寫圖片描述

引數的計算:

通過引入拉格朗日函式,我們得到原問題:
這裡寫圖片描述

的等價問題為:

這裡寫圖片描述

w的求解:

這裡寫圖片描述

b的求解:

這裡寫圖片描述

分類超平面:

這裡寫圖片描述

分類決策函式:

這裡寫圖片描述

鬆弛變數

通常情況是,訓練資料中有一些特異點(outlier),將這些特異點除去後,剩下大部分的樣本點組成的集合是線性可分的。線性不可分意味著某些樣本點不能滿足函式間隔大於等於1的約束條件。
為了解決這個問題,可以對每個樣本點引進一個鬆池變數,使函式間隔加上鬆弛變數大於等於1。這樣,約束條件變為:
這裡寫圖片描述

這樣最優化問題變為:

這裡寫圖片描述

非線性支援向量機與核函式

對解線性分類問題,線性分類支援向量機是一種非常有效的方法。但是,有時分類問題是非線性的,這時可以利用核技巧來實現非線性可分支援向量機。

我們注意到線上性支援向量機的對偶問題中,無論是目標函式還是決策函式(分離超平面)都只涉及輸入例項與例項之間的內積。在對偶問題的目標函式

這裡寫圖片描述中的內積這裡寫圖片描述可以用核函式這裡寫圖片描述來代替。此時對偶問題的目標函式成為
這裡寫圖片描述
同樣,分類決策函式中的內積也可以用核函式代替,而分類決策函式式成為
這裡寫圖片描述

SMO演算法

輸入:這裡寫圖片描述其中 這裡寫圖片描述這裡寫圖片描述

輸出:近似解這裡寫圖片描述

(1)取初始值 這裡寫圖片描述

(2)選取優化變數 這裡寫圖片描述 解析求解兩個變數的最優化問題

這裡寫圖片描述 求得最優解這裡寫圖片描述 更新這裡寫圖片描述這裡寫圖片描述

(3)若在精度 這裡寫圖片描述範圍內滿足停機條件

這裡寫圖片描述

其中,

這裡寫圖片描述

則轉(4);否則令這裡寫圖片描述

(4) 取這裡寫圖片描述

實驗結果(使用SMO演算法)

這裡寫圖片描述

正確率

95.1389%

執行時間

0.24s

演算法比較

這裡寫圖片描述

結果分析

樸素貝葉斯演算法:
模型建立時間最短。因為樸素貝葉斯演算法是基於概率的一種分類演算法,沒有涉及引數優化的求解過程,因此不需要時間來建立模型,由於樸素貝葉斯演算法是基於條件獨立性的假設,即各特徵之間是條件獨立的,而實際上有些特徵之間並不是條件獨立,因此求解出的正確率會降低。

C4.5演算法:
決策樹演算法的正確率比較高,而且模型建立的時間也很少,因為決策樹演算法是一種基於最優特徵劃分資料集的演算法,不需要求解最優引數。主要的時間耗費在於最優特徵選擇。是一種比較理想的分類演算法。

MLP:

我們發現MLP求解出的正確率是100%,理論上,多層神經網路可以表示任意分類函式。但是模型建立的時間耗費太大。這是因為MLP中的引數比較多。而且還涉及前向傳播和後向傳播的引數更新過程。因此需要耗費更多的時間來求解。

支援向量機:
正確率和C4.5差不多,但是需要更多的時間耗費來求解模型。這是因為。支援向量機演算法的核心過程就是求解最優引數。每次通過某種引數優化方法來更新引數。因此需要比較的時間來更新引數。相對於神經網路,支援向量機的引數更少,因此模型建立的時間也相對較少。

六、如何提高演算法的分類效能?

我們以MLP演算法為例:

迭代次數:

首先設定迭代500次

得到結果

這裡寫圖片描述

然後迭代700次:

這裡寫圖片描述

我們發現模型建立的時間增加了,但是誤差減小了。

學習率:

首先設定為0.3

這裡寫圖片描述

然後修改為0.5

這裡寫圖片描述

我們發現模型建立的時間增加了,但是誤差減小了。

我們可以通過適當的修改學習率或者增加迭代次數來減少誤差,但是可能會增加模型建立的耗費時間。