分類模型原理及優缺點整理總結

https://blog.csdn.net/qq_29153321/article/details/105299243

除了上篇博客提到的決策樹與剪枝、bagging與隨機森林、極端隨機樹、Adaboost、GBDT算法外,還有以下幾種算法:

目錄

1 KNN

2 貝葉斯分類

3 邏輯迴歸

4 SVM


1 KNN

KNN算法不僅可以用於分類,還可以用於迴歸。通過找出一個樣本的k個最近鄰居,將這些鄰居的某個(些)屬性的平均值賦給該樣本,就可以得到該樣本對應屬性的值。

優點

一、 簡單、有效。
二、 由於KNN方法主要靠周圍有限的鄰近的樣本,而不是靠判別類域的方法來確定所屬類別的,因此對於類域的交叉或重疊較多的待分樣本集來說,KNN方法較其他方法更爲適合。
三、 該算法比較適用於樣本容量比較大的類域的自動分類,而那些樣本容量較小的類域採用這種算法比較容易產生誤分。

缺點

一、 KNN算法是懶散學習方法(lazy learning,基本上不學習),一些積極學習的算法要快很多。
二、該算法在分類時有個主要的不足是,當樣本不平衡時,如一個類的樣本容量很大,而其他類樣本容量很小時,有可能導致當輸入一個新樣本時,該樣本的K個鄰居中大容量類的樣本佔多數。該算法只計算“最近的”鄰居樣本,某一類的樣本數量很大,那麼或者這類樣本並不接近目標樣本,或者這類樣本很靠近目標樣本。無論怎樣,數量並不能影響運行結果。可以採用權值的方法(和該樣本距離小的鄰居權值大)來改進。
三、 計算量較大。目前常用的解決方法是事先對已知樣本點進行剪輯,事先去除對分類作用不大的樣本。

2 貝葉斯分類

貝葉斯定理

      

樸素貝葉斯分類的思想和工作過程:

      樸素貝葉斯分類的思想真的很樸素,它的思想基礎是這樣的:對於給出的待分類項,求解此項出現的條件下各個類別出現的概率,哪個最大,就認爲此待分類屬於哪個類別。

  樸素貝葉斯分類的工作過程如下:

  (1)、設D是訓練元組和它們相關聯的類標號的集合。每個元組用一個n維屬性向量X={x1,x2,...,xn}表示。

  (2)、假定有m個類C1 ,C2,...Cm。給定元組X,分類法將預測X屬於具有最高後驗概率的類。也就是說,樸素貝葉斯分類法預測X屬於類Ci,當且僅當

          P(Ci|X)>P(Cj|X)     1≤j≤m, j≠i

         這樣,P(Ci|X)最大的類C1稱爲最大後驗概率。根據貝葉斯定理

    

  (3)、由於P(X)對所有類爲常數,所以只需要P(Ci|X)P(Ci)最大即可。若類的先驗概率未知,則通常假定這些類是等概率的,即P(C1)=P(C2)=...=P(Cm),並據此對P(Ci|X)最大化,否則最大化P(Ci|X)P(Ci)

  (4)、給定具有很多屬性的數據集,計算P(Ci|X)的開銷非常大。爲了降低計算開銷,可以做類條件獨立的樸素假定。給定元組的類標號,假定屬性值有條件地相互獨立。因此,

    

        考察該屬性是分類的還是連續值的,例如爲了計算P(X|Ci),考慮如下兩種情況:

    (a)、如果Ak是分類屬性,則P(xk|Ci)是D中屬性A

k的值爲xk的Ci類的元組數除以D中Ci類的元組數|Ci,D|

    (b)、如果Ak是連續值屬性,則假定連續值屬性服從均值爲η、標準差爲σ的高斯分佈,由下式定義:

    

    即P(xk |Ci)=g(xk,ηci,σci)

  (5)、爲了預測X得類標號,對每個類Ci,計算P(Ci|X)P(Ci)。該分類法預測輸入元組X的類爲Ci,當且僅當,P(X|Ci)P(Ci)>P(X|Cj)P(Cj), 1≤j≤m, j≠i。即是,被預測的類標號是使P(X|Ci)P(Ci)最大的類Ci。

拉普拉斯校準(laplace)

  當P(xk|Ci)=0怎麼辦,當某個類別下某個特徵項沒有出現時就出現這種現象,這時會出現的情況是:儘管沒有這個零概率,仍然可能得到一個表明X屬於Ci類的高概率。有一個簡單的技巧來避免該問題,可以假定訓練數據庫D很大,以至於對每個計數加1造成的估計概率的變化可以忽略不計。但可以方便地避免概率值爲0.這種概率估計計數稱爲拉普拉斯校準或拉普拉斯估計法。

優點

一、 樸素貝葉斯模型發源於古典數學理論,有着堅實的數學基礎,以及穩定的分類效率。
二、 NBC模型所需估計的參數很少,對缺失數據不太敏感,算法也比較簡單。

缺點

一、 理論上,NBC模型與其他分類方法相比具有最小的誤差率。但是實際上並非總是如此,這是因爲NBC模型假設屬性之間相互獨立,這個假設在實際應用中往往是不成立的(可以考慮用聚類算法先將相關性較大的屬性聚類),這給NBC模型的正確分類帶來了一定影響。在屬性個數比較多或者屬性之間相關性較大時,NBC模型的分類效率比不上決策樹模型。而在屬性相關性較小時,NBC模型的性能最爲良好。
二、 需要知道先驗概率
三、 分類決策存在錯誤率

3 邏輯迴歸

邏輯迴歸解決的是分類問題。LR可以視作單層單節點的“DNN”, 是一種寬而不深的結構,所有的特徵直接作用在最後的輸出結果上。

邏輯迴歸損失函數

優點

一、預測結果是界於0和1之間的概率;
二、可以適用於連續性和類別性自變量;
三、容易使用和解釋;

缺點

一、對模型中自變量多重共線性較爲敏感,例如兩個高度相關自變量同時放入模型,可能導致較弱的一個自變量回歸符號不符合預期,符號被扭轉。​需要利用因子分析或者變量聚類分析等手段來選擇代表性的自變量,以減少候選變量之間的相關性;
二、預測結果呈“S”型,因此從log(odds)向概率轉化的過程是非線性的,在兩端隨着​log(odds)值的變化,概率變化很小,邊際值太小,slope太小,而中間概率的變化很大,很敏感。 導致很多區間的變量變化對目標概率的影響沒有區分度,無法確定閥值。

4 SVM

      Svmsupport Vector Mac)又稱爲支持向量機,是一種二分類的模型。當然如果進行修改之後也是可以用於多類別問題的分類。支持向量機可以分爲線性核非線性兩大類。其主要思想爲找到空間中的一個更夠將所有數據樣本劃開的超平面,並且使得本本集中所有數據到這個超平面的距離最短。

一、基於最大間隔分隔數據

1.1支持向量與超平面

    希望尋找到這樣的直線,使得距離這條直線最近的點到這條直線的距離最短。這是可以理解的,因爲假如數據樣本是隨機出現的,那麼這樣分割之後數據點落入到其類別一側的概率越高那麼最終預測的準確率也會越高。在高維空間中這樣的直線稱之爲超平面,因爲當維數大於三的時候我們已經無法想象出這個平面的具體樣子。那些距離這個超平面最近的點就是所謂支持向量,實際上如果確定了支持向量也就確定了這個超平面。

https://img-blog.csdn.net/20180521035815684

                                   1                                                 2

 

1.2尋找最大間隔

1.2.1點到超平面的距離公式

      既然這樣的直線是存在的,那麼我們怎樣尋找出這樣的直線呢?與二維空間類似,超平面的方程也可以寫成一下形式:

                                                                                      https://img-blog.csdn.net/20180521035838305                                                      1.1

有了超平面的表達式之後之後,我們就可以計算樣本點到平面的距離了。假設https://img-blog.csdn.net/20180521042813312爲樣本的中的一個點,其中https://img-blog.csdn.net/2018052104282066表示爲第個特徵變量。那麼該點到超平面的距離https://img-blog.csdn.net/2018052104292189就可以用如下公式進行計算:

                                                           https://img-blog.csdn.net/20180521035845894              1.2

其中||W||爲超平面的範數,常數b類似於直線方程中的截距。

上面的公式可以利用解析幾何或高中平面幾何知識進行推導,這裏不做進一步解釋。

1.2.2最大間隔的優化模型

    現在我們已經知道了如何去求數據點到超平面的距離,在超平面確定的情況下,我們就能夠找出所有支持向量,然後計算出間隔margin。每一個超平面都對應着一個margin,我們的目標就是找出所有margin中最大的那個值對應的超平面。因此用數學語言描述就是確定wb使得margin最大。這是一個優化問題其目標函數可以寫成:

                                                               https://img-blog.csdn.net/20180521035922810                         1.3

其中https://img-blog.csdn.net/20180521043023931表示數據點的標籤,且其爲-11。距離用https://img-blog.csdn.net/201805210430080計算,這是就能體會出-11的好處了。如果數據點在平面的正方向(+1)那麼https://img-blog.csdn.net/201805210430080是一個正數,而當數據點在平面的負方向時(-1)https://img-blog.csdn.net/201805210430080依然是一個正數,這樣就能夠保證始終大於零了。注意到當wb等比例放大時,d的結果是不會改變的。因此我們可以令所有支持向量的u1,而其他點的u1這是可以辦通過調節wb求到的。因此上面的問題可以簡化爲: 

                                                                                  https://img-blog.csdn.net/20180521040724600                  1.4

爲了後面計算的方便,我們將目標函數等價替換爲:

                                                                                        https://img-blog.csdn.net/20180521035939837                                        1.5

這是一個有約束條件的優化問題,通常我們可以用拉格朗日乘子法來求解。拉格朗日乘子法的介紹可以參考這篇博客。應用拉格朗日乘子法如下:

令    

                                                  https://img-blog.csdn.net/20180521040036958                           1.6

L關於求偏導數得:

                                                                       https://img-blog.csdn.net/20180521040043988                             1.7

(1.7)代入到(1.6)中化簡得:

                                              https://img-blog.csdn.net/20180521040054915         1.8

原問題的對偶問題爲:

                                                                     https://img-blog.csdn.net/20180521040907231                         1.9

該對偶問題的KKT條件爲

                                                              https://img-blog.csdn.net/2018052104011217                                1.10

到此,似乎問題就能夠完美地解決了。但是這裏有個假設:數據必須是百分之百可分的。但是實際中的數據幾乎都不那麼“乾淨”,或多或少都會存在一些噪點。爲此下面我們將引入了鬆弛變量來解決這種問題。

1.2.3鬆弛變量

    由上一節的分析我們知道實際中很多樣本數據都不能夠用一個超平面把數據完全分開。如果數據集中存在噪點的話,那麼在求超平的時候就會出現很大問題。從圖三中課看出其中一個藍點偏差太大,如果把它作爲支持向量的話所求出來的margin就會比不算入它時要小得多。更糟糕的情況是如果這個藍點落在了紅點之間那麼就找不出超平面了。

                                   https://img-blog.csdn.net/20180521040126854

                                                          3

因此引入一個鬆弛變量ξ來允許一些數據可以處於分隔面錯誤的一側。這時新的約束條件變爲:

                                                                            https://img-blog.csdn.net/20180521040136753  1.11

式中ξi的含義爲允許第i個數據點允許偏離的間隔。如果讓ξ任意大的話,那麼任意的超平面都是符合條件的了。所以在原有目標的基礎之上,我們也儘可能的讓ξ的總量也儘可能地小。所以新的目標函數變爲:

                                                                                           https://img-blog.csdn.net/20180521040143381.12

                                                                         https://img-blog.csdn.net/201805210401546171.13

其中的C是用於控制“最大化間隔”和“保證大部分的點的函數間隔都小於1”這兩個目標的權重。將上述模型完整的寫下來就是:

                                                                       https://img-blog.csdn.net/201805210402034331.14

新的拉格朗日函數變爲:

                                                       https://img-blog.csdn.net/201805210402174791.15

接下來將拉格朗日函數轉化爲其對偶函數,首先對https://img-blog.csdn.net/20180521043256697分別求https://img-blog.csdn.net/20180521043306596ξ的偏導,並令其爲0,結果如下:

                                                             https://img-blog.csdn.net/201805210402303651.16

代入原式化簡之後得到和原來一樣的目標函數:

                                                                     https://img-blog.csdn.net/201805210402394081.17

但是由於我們得到https://img-blog.csdn.net/2018052104334596https://img-blog.csdn.net/20180521043355944,因此有https://img-blog.csdn.net/20180521043406321所以對偶問題寫成:

                                                   https://img-blog.csdn.net/201805210402498871.18

經過添加鬆弛變量的方法,我們現在能夠解決數據更加混亂的問題。通過修改參數C,我們可以得到不同的結果而C的大小到底取多少比較合適,需要根據實際問題進行調節。

1.2.4核函數

    以上討論的都是在線性可分情況進行討論的,但是實際問題中給出的數據並不是都是線性可分的,比如有些數據可能是如圖4樣子。

     https://img-blog.csdn.net/20180521040302593

                                                          圖4

那麼這種非線性可分的數據是否就不能用svm算法來求解呢?答案是否定的。事實上,對於低維平面內不可分的數據,放在一個高維空間中去就有可能變得可分。以二維平面的數據爲例,我們可以通過找到一個映射將二維平面的點放到三維平面之中。理論上任意的數據樣本都能夠找到一個合適的映射使得這些在低維空間不能劃分的樣本到高維空間中之後能夠線性可分。我們再來看一下之前的目標函數:

https://img-blog.csdn.net/201805210403192321.19

定義一個映射使得將所有映射到更高維空間之後等價於求解上述問題的對偶問題:

https://img-blog.csdn.net/201805210403343381.20

這樣對於線性不可分的問題就解決了,現在只需要找出一個合適的映射即可。當特徵變量非常多的時候在,高維空間中計算內積的運算量是非常龐大的。考慮到我們的目的並不是爲找到這樣一個映射而是爲了計算其在高維空間的內積,因此如果我們能夠找到計算高維空間下內積的公式,那麼就能夠避免這樣龐大的計算量,我們的問題也就解決了。實際上這就是我們要找的核函數https://img-blog.csdn.net/20180521043454252,即兩個向量在隱式映射後的空間中的內積。下面的一個簡單例子可以幫助我們更好地理解核函數。

通過以上例子,我們可以很明顯地看到核函數是怎樣運作的。上述問題的對偶問題可以寫成如下形式:

https://img-blog.csdn.net/20180521040346411.21

那麼怎樣的函數纔可以作爲核函數呢?下面的一個定理可以幫助我們判斷。

Mercer定理:任何半正定的函數都可以作爲核函數。其中所謂半正定函數https://img-blog.csdn.net/20180521043517679是指擁有訓練集數據集合,我們定義一個矩陣的元素https://img-blog.csdn.net/20180521043539526,這個矩陣是https://img-blog.csdn.net/2018052104355651的矩陣,如果這個矩陣是半正定的,那麼https://img-blog.csdn.net/20180521043612421就稱爲半正定函數。

值得注意的是,上述定理中所給出的條件是充分條件而非充要條件。因爲有些非正定函數也可以作爲核函數。

下面是一些常用的核函數:

                                             常用核函數表

核函數名稱

核函數表達式

核函數名稱

核函數表達式

線性核

https://img-blog.csdn.net/20180521043843457

指數核

https://img-blog.csdn.net/20180521043911229

多項式核

https://img-blog.csdn.net/20180521043852784

拉普拉斯核

https://img-blog.csdn.net/20180521043921148

高斯核

https://img-blog.csdn.net/20180521043900473

Sigmoid

https://img-blog.csdn.net/20180521043933455


    現在我們已經瞭解了一些支持向量機的理論基礎,我們通過對偶問題的的轉化將最開始求https://img-blog.csdn.net/20180521043642596的問題轉化爲求https://img-blog.csdn.net/20180521043655659的對偶問題。只要找到所有的https://img-blog.csdn.net/20180521043655659(即找出所有支持向量),我們就能夠確定https://img-blog.csdn.net/20180521043710476。然後就可以通過計算數據點到這個超平面的距離從而判斷出該數據點的類別。

二、Smo算法原理

2.1 約束條件

     根據以上問題的分析,我們已經將原始問題轉化爲了求的值,即求下面優化模型的解:

https://img-blog.csdn.net/201805210413594292.1

求解https://img-blog.csdn.net/20180521043655659的值的方法有很多,Smo算法就是其中一種比較常用的方法。該算法是由John Platt在1996年發佈,他的思路是將大的優化問題轉化爲小的優化問題。而這些小的優化問題往往更容易求解,並且對它們進行順序求解的結果和將它們作爲整體求解的結果完全一致但是Smo算法的時間要小得多。

     Smo算法的原理爲:每次任意抽取兩個乘子https://img-blog.csdn.net/2018052104411870和,https://img-blog.csdn.net/20180521044126838然後固定https://img-blog.csdn.net/2018052104411870https://img-blog.csdn.net/20180521044126838以外的其它乘子https://img-blog.csdn.net/20180521044226430,使得目標函數只是關於https://img-blog.csdn.net/2018052104411870https://img-blog.csdn.net/20180521044126838的函數。然後增大其中一個乘子同時減少另外一個。這樣,不斷的從一堆乘子中任意抽取兩個求解,不斷的迭代求解子問題,最終達到求解原問題的目的。

     而原對偶問題的子問題的目標函數可以表達成:

https://img-blog.csdn.net/201805210414115532.2

其中:

https://img-blog.csdn.net/201805210414216242.3

這裏之所以算兩個https://img-blog.csdn.net/20180521043655659是因爲https://img-blog.csdn.net/20180521044423152的限制,如果只改變其中的一個量,那麼這個約束條件可能就不成立了。要解決這個問題,我們必須得選取這樣的兩個乘子。那麼怎樣確定這樣的https://img-blog.csdn.net/2018052104411870https://img-blog.csdn.net/20180521044126838呢?這是我們首先要考慮的問題,在《機器學習實戰》這本書中,作者首先給出了一種簡化版的方法,遍歷每一個https://img-blog.csdn.net/20180521043655659然後在剩餘的https://img-blog.csdn.net/20180521043655659中隨機選取一個進行優化。雖然樣也能夠解決問題,但是運算量太大,因此考慮找一種更好的方法來尋找對。

爲了表述方便,定義一個特徵到輸出結果的輸出函數:

https://img-blog.csdn.net/201805210414338152.4

該對偶問題中KKT條件爲:

https://img-blog.csdn.net/201805210414467112.5

根據上述問題的KKT條件可以得出目標函數中的https://img-blog.csdn.net/20180521044601574含義如下:

1、 https://img-blog.csdn.net/20180521044639106,表明是正常分類,在邊界外;

2https://img-blog.csdn.net/20180521044648455,表明是支持向量,在邊界上;

3https://img-blog.csdn.net/20180521044714944,表明在兩邊界之間。

最優解需要滿足KKT條件,因此需要滿足以上的三個條件都滿足。而不滿足這三個條件的情況也有三種:

1https://img-blog.csdn.net/20180521044800853<=1但是<C則是不滿足的,而原本https://img-blog.csdn.net/20180521044601574=C;

2https://img-blog.csdn.net/20180521044800853>=1但是>0則是不滿足的,而原本https://img-blog.csdn.net/20180521044601574=0;

3https://img-blog.csdn.net/20180521044800853=1但是=0或者=C則表明不滿足的,而原本應該是0<https://img-blog.csdn.net/20180521044601574<C.

也就是說如果存在不滿足這些KKT條件的,我們就要更新它,這就是約束條件之一。其次,https://img-blog.csdn.net/20180521044601574還受到約束條件https://img-blog.csdn.net/20180521044944422的限制,因此假設選擇的兩個因子爲https://img-blog.csdn.net/2018052104411870https://img-blog.csdn.net/20180521044126838,他們在更新前分別爲https://img-blog.csdn.net/20180521045117422在更新後爲https://img-blog.csdn.net/20180521045126124,爲了保證上述約束條件成立必須要保證下列等式的成立:

https://img-blog.csdn.net/201805210415011442.6

其中https://img-blog.csdn.net/20180521045157848爲常數。

2.2參數優化

    因爲兩個因子不好同時求解,所以可先求第二個乘子https://img-blog.csdn.net/20180521045426787的解https://img-blog.csdn.net/20180521045458225,然後再用https://img-blog.csdn.net/20180521045426787的解https://img-blog.csdn.net/20180521045458225表示https://img-blog.csdn.net/20180521045530896的解https://img-blog.csdn.net/20180521045545383。爲了求解https://img-blog.csdn.net/20180521045458225,得先確定https://img-blog.csdn.net/20180521045458225的取值範圍。假設它的上下邊界分別爲HL,那麼有:https://img-blog.csdn.net/20180521041513702.6

接下來,綜合https://img-blog.csdn.net/20180521045620315https://img-blog.csdn.net/20180521045631375這兩個約束條件,求取https://img-blog.csdn.net/20180521045458225的取值範圍。

https://img-blog.csdn.net/2018052104565956時,根據https://img-blog.csdn.net/20180521045708540可得https://img-blog.csdn.net/20180521045720836,所以有https://img-blog.csdn.net/20180521045730119

https://img-blog.csdn.net/20180521045740934時,同樣根據https://img-blog.csdn.net/20180521045750839可得:https://img-blog.csdn.net/20180521045802273,所以有https://img-blog.csdn.net/2018052104581072

回顧第二個約束條件 :https://img-blog.csdn.net/201805210419337012.7

令其兩邊同時乘y1,可得:

                          https://img-blog.csdn.net/20180521041632294. (2.8)

其中:https://img-blog.csdn.net/20180521050150597.

因此https://img-blog.csdn.net/20180521045904224可以用https://img-blog.csdn.net/20180521045910939表示,即:     https://img-blog.csdn.net/20180521041649448          (2.9

令          https://img-blog.csdn.net/20180521041705773          (2.10

經過轉化之後可得:

                   https://img-blog.csdn.net/20180521041723840,https://img-blog.csdn.net/20180521041736270.        (2.11)

那麼如何來選擇乘子https://img-blog.csdn.net/20180521050004964呢?對於第一個乘子,我們可以按照3種不滿足KTT的條件來尋找。對於第二個乘子,我們可以尋找滿足條件https://img-blog.csdn.net/2018052105002150的乘子。

b在滿足以下條件時需要更新:

        https://img-blog.csdn.net/20180521041837578               (2.12)

且更新後的和如下:

                      https://img-blog.csdn.net/2018052104180671(2.13

每次更新完兩個乘子之後,都需要重新計算b以及對應的E。最後更新完所有的https://img-blog.csdn.net/20180521050052356,yb,這樣模型也就出來了,從而可以計算出開始所說的分類函數:

https://img-blog.csdn.net/201805210418177542.14

三 SVR

SVM是要使到超平面最近的樣本點的“距離”最大;

SVR則是要使到超平面最遠的樣本點的“距離”最小。

優點

一、 可以解決小樣本情況下的機器學習問題。
二、 可以提高泛化性能。
三、 可以解決高維問題。
四、 可以解決非線性問題。
五、 可以避免神經網絡結構選擇和局部極小點問題。

缺點

一、 對缺失數據敏感。
二、 對非線性問題沒有通用解決方案,必須謹慎選擇Kernelfunction來處理。

 

參考博客:
https://www.cnblogs.com/luonet/p/4028990.html

https://www.cnblogs.com/pinard/p/6029432.html

https://www.jianshu.com/p/169dc01f0589

https://blog.csdn.net/d__760/article/details/80387432

 

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