1. 程式人生 > >[機器學習] LR與SVM的異同

[機器學習] LR與SVM的異同

1 為什麼將LR和SVM放在一起來進行比較?

回答這個問題其實就是回答LR和SVM有什麼相同點。

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

看到這裡很多人就不會認同了,因為在很大一部分人眼裡,LR是迴歸演算法。我是非常不贊同這一點的,因為我認為判斷一個演算法是分類還是迴歸演算法的唯一標準就是樣本label的型別,如果label是離散的,就是分類演算法,如果label是連續的,就是迴歸演算法。很明顯,LR的訓練資料的label是“0或者1”,當然是分類演算法。

第二,如果不考慮核函式,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更能考察你的功底呢?

 

2 LR和SVM的不同。

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

 

對比svm和lr,我們發現,當對一個樣本預測錯誤時,它們是比較類似的,當對樣本剛剛預測正確時,它們的行為也是類似的,只不過一個是曲線,一個是直線而已。但是,當對樣本預測正確並且大於一定程度時,確切說就是當y*f(x)大於1時,二者的行為明顯不同,lr的還會鼓勵f繼續增大y*f(x),而svm則會告訴f,對這個樣本預測已經非常完美了。

 

邏輯迴歸的損失函式:


 

SVM的損失函式:
這裡寫圖片描述
調整後為:
這裡寫圖片描述
當C很大時:w為引數的向量表示,b為第0個引數
這裡寫圖片描述
等價為:
這裡寫圖片描述
1,問題就變成了一個凸二次規劃問題,可以利用任何現成的QP(二次規劃)的優化包進行求解。
2,雖然是一個標準的QP問題,但它也有自己的特殊結構,通過拉格朗日對偶變換成對偶變數的優化問題之後,可以更加有效地求解,也比QP優化包更加高效!

不同的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很少運用核函式機制。​

第四,​線性SVM依賴資料表達的距離測度,所以需要對資料先做normalization,LR不受其影響。(引自http://www.zhihu.com/question/26768865/answer/34078149

因為SVM是基於距離的,而LR是基於概率的,所以LR是不受資料不同維度測度不同的影響,而SVM因為要最小化12||w||2所以其依賴於不同維度測度的不同,如果差別較大需要做normalization
當然如果LR要加上正則化時,也是需要normalization一下的

 

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

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的收斂更好。

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

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

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

每一步梯度的方向都基本指向最小值,可以大踏步地前進。(引自https://www.zhihu.com/question/37129350

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

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

SVM目標函式:

​有木有,那不就是L2正則項嗎?

不用多說了,如果不明白看看L1正則與L2正則吧,參考http://www.mamicode.com/info-detail-517504.html​

第六,SVM不是概率輸出,Logistic Regression是概率輸出。

也就是說,當一個新樣本來了,SVM只會告訴你它的分類,而Logistic Regression會告訴你它屬於某類的概率!
什麼意思呢?當你想要知道某個樣本屬於一個類的概率時,SVM就不適用了。此時,應該使用Logistic Regression。


 

3 LR和SVM在實際應用的區別

根據經驗來看,對於小規模資料集,SVM的效果要好於LR,如果資料量非常大,特徵維度很高,使用SVM搞不定時,SVM的計算複雜度受到限制,而LR因為訓練簡單,可以線上訓練,所以經常會被大量採用

 

4 LR和SVM哪個更能對付異常點out lier

 

知道了svm和lr 區別,我們再來看看,所謂out lier,是怎麼產生的,無非有兩種情況,一種就是這個樣本的標籤y搞錯了,一種就是沒搞錯,但這個樣本是一個個例,不具備統計特性。

不論對於哪一種情況,svm會在f將這個out lier預測的比較正確時,就停止,不會一直優化對out lier的預測,因為沒有什麼太大意義了。而lr則不同,它會繼續要求f對這個out lier的預測進行優化,並且永不停止,顯然,這樣的優化很可能會削弱f的泛化效能,因為沒有必要死磕out lier 。

當訓練樣本中存在異常點時,由於Logistic Regression的lost function中有每一個點的貢獻,所以某種程度上“削弱了”異常點的貢獻。而SVM只需要考慮支援向量,此時支援向量本來就不是很多的情況下,幾個異常點就很有可能極大影響SVM的表現。

答案就是SVM