1. 程式人生 > >機器學習——LR與SVM的比較

機器學習——LR與SVM的比較

為什麼把SVM和LR放在一起進行比較?

一是因為這兩個模型應用廣泛。 
二是因為這兩個模型有很多相同點,在使用時容易混淆,不知道用哪個好,特別是對初學者。

一、LR與SVM的相同點:

第一,LR和SVM都是分類演算法。

看到這裡很多人就不會認同了,因為在很大一部分人眼裡,LR是迴歸演算法。我是非常不贊同這一點的,因為我認為判斷一個演算法是分類還是迴歸演算法的唯一標準就是樣本label的型別,如果label是離散的,就是分類演算法,如果label是連續的,就是迴歸演算法。很明顯,LR的訓練資料的label是“0或者1”,當然是分類演算法。其實這樣不重要啦,暫且遷就我認為他是分類演算法吧,再說了,SVM也可以迴歸用呢。

第二,如果不考慮核函式,LR和SVM都是線性分類演算法,也就是說他們的分類決策面都是線性的。

這裡要先說明一點,那就是LR也是可以用核函式的,至於為什麼通常在SVM中運用核函式而不在LR中運用,後面講到他們之間區別的時候會重點分析。總之,原始的LR和SVM都是線性分類器,這也是為什麼通常沒人問你決策樹和LR什麼區別,決策樹和SVM什麼區別,你說一個非線性分類器和一個線性分類器有什麼區別?

第三,LR和SVM都是監督學習演算法。

這個就不贅述什麼是監督學習,什麼是半監督學習,什麼是非監督學習了。

第四,LR和SVM都是判別模型。

判別模型會生成一個表示P(Y|X)的判別函式(或預測模型),而生成模型先計算聯合概率p(Y,X)然後通過貝葉斯公式轉化為條件概率。簡單來說,在計算判別模型時,不會計算聯合概率,而在計算生成模型時,必須先計算聯合概率。或者這樣理解:生成演算法嘗試去找到底這個資料是怎麼生成的(產生的),然後再對一個訊號進行分類。基於你的生成假設,那麼那個類別最有可能產生這個訊號,這個訊號就屬於那個類別。判別模型不關心資料是怎麼生成的,它只關心訊號之間的差別,然後用差別來簡單對給定的一個訊號進行分類。常見的判別模型有:KNN、SVM、LR,常見的生成模型有:樸素貝葉斯,隱馬爾可夫模型。當然,這也是為什麼很少有人問你樸素貝葉斯和LR以及樸素貝葉斯和SVM有什麼區別。

講完了LR和SVM的相同點,你是不是也認為有必要將他們進行比較一下了呢?而且比較LR和SVM,是不是比讓你比較決策樹和LR、決策樹和SVM、樸素貝葉斯和LR、樸素貝葉斯和SVM更能考察你的功底呢?

二、LR與SVM的不同點:

第一,本質上是其loss function不同。

邏輯迴歸的損失函式:


 

支援向量機的目標函式:

不同的loss function代表了不同的假設前提,也就代表了不同的分類原理,也就代表了一切!!!簡單來說,​邏輯迴歸方法基於概率理論,假設樣本為1的概率可以用sigmoid函式來表示,然後通過極大似然估計的方法估計出引數的值,具體細節參考http://blog.csdn.net/pakko/article/details/37878837

支援向量機​基於幾何間隔最大化原理,認為存在最大幾何間隔的分類面為最優分類面,具體細節參考http://blog.csdn.net/macyang/article/details/38782399

第二,支援向量機只考慮區域性的邊界線附近的點,而邏輯迴歸考慮全域性(遠離的點對邊界線的確定也起作用,雖然作用會相對小一些)。

當​你讀完上面兩個網址的內容,深入瞭解了LR和SVM的原理過後,會發現影響SVM決策面的樣本點只有少數的結構支援向量,當在支援向量外新增或減少任何樣本點對分類決策面沒有任何影響;而在LR中,每個樣本點都會影響決策面的結果。用下圖進行說明:

支援向量機改變非支援向量樣本並不會引起決策面的變化:

邏輯迴歸中改變任何樣本都會引起決策面的變化:

​理解了這一點,有可能你會問,然後呢?有什麼用呢?有什麼意義嗎?對使用兩種演算法有什麼幫助麼?一句話回答:

因為上面的原因,得知:線性SVM不直接依賴於資料分佈,分類平面不受一類點影響;LR則受所有資料點的影響,如果資料不同類別strongly unbalance,一般需要先對資料做balancing。​(引自http://www.zhihu.com/question/26768865/answer/34078149

第三,在解決非線性問題時,支援向量機採用核函式的機制,而LR通常不採用核函式的方法。

​這個問題理解起來非常簡單。分類模型的結果就是計算決策面,模型訓練的過程就是決策面的計算過程。通過上面的第二點不同點可以瞭解,在計算決策面時,SVM演算法裡只有少數幾個代表支援向量的樣本參與了計算,也就是只有少數幾個樣本需要參與核計算即kernal machine解的係數是稀疏的)。然而,LR演算法裡,每個樣本點都必須參與決策面的計算過程,也就是說,假設我們在LR裡也運用核函式的原理,那麼每個樣本點都必須參與核計算,這帶來的計算複雜度是相當高的。所以,在具體應用時,LR很少運用核函式機制。​

一個基於概率,一個基於距離!​

Linear SVM直觀上是trade-off兩個量 
1)a large margin,就是兩類之間可以畫多寬的gap ;不妨說是正樣本應該在分界平面向左gap/2(稱正分界),負樣本應該在分解平面向右gap/2(稱負分界)(見下圖)
2)L1 error penalty,對所有不滿足上述條件的點做L1 penalty

可以看到,給定一個數據集,一旦完成Linear SVM的求解,所有資料點可以被歸成兩類
1)一類是落在對應分界平面外並被正確分類的點,比如落在正分界左側的正樣本或落在負分界右側的負樣本
2)第二類是落在gap裡或被錯誤分類的點。
假設一個數據集已經被Linear SVM求解,那麼往這個資料集裡面增加或者刪除更多的一類點並不會改變重新求解的Linear SVM平面。這就是它區分與LR的特點,下面我們在看看LR。

值得一提的是求解LR模型過程中,每一個數據點對分類平面都是有影響的,它的影響力遠離它到分類平面的距離指數遞減。換句話說,LR的解是受資料本身分佈影響的。在實際應用中,如果資料維度很高,LR模型都會配合引數的L1 regularization。

要說有什麼本質區別,那就是兩個模型對資料和引數的敏感程度不同,Linear SVM比較依賴penalty的係數和資料表達空間的測度,而(帶正則項的)LR比較依賴對引數做L1 regularization的係數。但是由於他們或多或少都是線性分類器,所以實際上對低維度資料overfitting的能力都比較有限,相比之下對高維度資料,LR的表現會更加穩定,為什麼呢?

因為Linear SVM在計算margin有多“寬”的時候是依賴資料表達上的距離測度的,換句話說如果這個測度不好(badly scaled,這種情況在高維資料尤為顯著),所求得的所謂Large margin就沒有意義了,這個問題即使換用kernel trick(比如用Gaussian kernel)也無法完全避免。所以使用Linear SVM之前一般都需要先對資料做normalization,而求解LR(without regularization)時則不需要或者結果不敏感。(引自http://www.zhihu.com/question/26768865/answer/34078149

同時會有:feature scaling會使得gradient descent的收斂更好。

如果不歸一化,各維特徵的跨度差距很大,目標函式就會是“扁”的:

(圖中橢圓表示目標函式的等高線,兩個座標軸代表兩個特徵)
這樣,在進行梯度下降的時候,梯度的方向就會偏離最小值的方向,走很多彎路。

如果歸一化了,那麼目標函式就“圓”了:

第五,SVM的損失函式就自帶正則!!!(損失函式中的1/2||w||^2項),這就是為什麼SVM是結構風險最小化演算法的原因!!!而LR必須另外在損失函式上新增正則項!!!

以前一直不理解為什麼SVM叫做結構風險最小化演算法,所謂結構風險最小化,意思就是在訓練誤差和模型複雜度之間尋求平衡,防止過擬合,從而達到真實誤差的最小化。未達到結構風險最小化的目的,最常用的方法就是新增正則項,後面的部落格我會具體分析各種正則因子的不同,這裡就不扯遠了。但是,你發現沒,SVM的目標函式里居然自帶正則項!!!再看一下上面提到過的SVM目標函式:

SVM目標函式:

這就是L2正則項!

總結一下:

  • 1、樣本點對模型的作用不同。SVM中,只有關鍵的樣本點(支援向量)對模型結果有影響,而LR中,每一個樣本點都對模型有影響。

  • 2、損失函式不同。SVM是hinge損失函式,LR是log損失函式

  • 3、理論基礎不同。SVM基於嚴格的數學推導,LR基於統計。

  • 4、輸出不同。LR可以對每個樣本點給出類別判斷的概率值,SVM無法做到。

  • 5、防過擬合能力不同。SVM模型中內含了L2正則,可有效防止過擬合。LR要自己新增正則項。

  • 6、處理非線性分類問題能力不同。SVM演算法裡,只有少數幾個代表支援向量的樣本參與分類決策計算,也就是隻有少數幾個樣本需要參與核函式的計算。LR演算法裡,每個樣本點都必須參與分類決策的計算過程,也就是說,假設我們在LR裡也運用核函式的原理,那麼每個樣本點都必須參與核計算,這帶來的計算複雜度是相當高的。尤其是資料量很大時,我們無法承受。所以,在具體應用時,LR很少運用核函式機制。LR如果要做到這一點,需要自己手動地進行特徵轉換。

  • 7、計算複雜度不同。在小規模資料集上,Linear SVM要略好於LR,但差別也不是特別大,對於海量資料,SVM的效率較低,LR效率比較高。

  • 8、對資料要求不同。SVM依賴於資料表達出的距離測度,所以需要對資料進行normalization,而LR不需要。

  • 9、能力範圍不同。 SVM拓展後,可解決迴歸問題,LR不能。

  • 10、抗噪聲資料能力不同。SVM的損失函式基於距離測度,抗噪聲能力要強於LR。

那怎麼根據特徵數量和樣本量來選擇SVM和LR模型呢?Andrew NG的課程中給出了以下建議:

如果Feature的數量很大,跟樣本數量差不多,這時候選用LR或者是Linear Kernel的SVM
如果Feature的數量比較小,樣本數量一般,不算大也不算小,選用SVM+Gaussian Kernel
如果Feature的數量比較小,而樣本數量很多,需要手工新增一些feature變成第一種情況。(LR和不帶核函式的SVM比較類似。)

以上是根據網上資料自行總結得到。