http://www.iliuye.com/index.php/Wap/Index/article/id/190886
lr 和 svm本質不同在於loss function的不同,不過想想這幾乎對所有的單層模型都使用,lr的損失函數是 cross entropy loss, adaboost的損失函數是 expotional loss ,svm是hinge loss,常見的回歸模型通常用 均方誤差 loss。
兩種方法都是常見的分類算法,從目標函數來看,區別在於邏輯回歸采用的是logistical loss,svm采用的是hinge loss。這兩個損失函數的目的都是增加對分類影響較大的數據點的權重,減少與分類關系較小的數據點的權重。SVM的處理方法是只考慮support vectors,也就是和分類最相關的少數點,去學習分類器。而邏輯回歸通過非線性映射,大大減小了離分類平面較遠的點的權重,相對提升了與分類最相關的數據點的權重。兩者的根本目的都是一樣的。此外,根據需要,兩個方法都可以增加不同的正則化項,如l1,l2等等。所以在很多實驗中,兩種算法的結果是很接近的。
但是邏輯回歸相對來說模型更簡單,好理解,實現起來,特別是大規模線性分類時比較方便。而SVM的理解和優化相對來說復雜一些。但是SVM的理論基礎更加牢固,有一套結構化風險最小化的理論基礎,雖然一般使用的人不太會去關注。還有很重要的一點,SVM轉化為對偶問題后,分類只需要計算與少數幾個支持向量的距離,這個在進行復雜核函數計算時優勢很明顯,能夠大大簡化模型和計算量。
在Andrew NG的課里講到過:
1. 如果Feature的數量很大,跟樣本數量差不多,這時候選用LR或者是Linear Kernel的SVM
2. 如果Feature的數量比較小,樣本數量一般,不算大也不算小,選用SVM+Gaussian Kernel
3. 如果Feature的數量比較小,而樣本數量很多,需要手工添加一些feature變成第一種情況
Linear SVM 和 LR 有什么異同?
他們都是線性分類器,模型求解的就是一個超平面(假設問題是2類分類);以下主要談一談 不同點。
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)時則不需要或者結果不敏感。
LR在NLP界還有另一個名字就是最大熵模型,當然我不准備花時間解釋這個,有興趣的可以看比如
http://www.win-vector.com/dfiles/LogisticRegressionMaxEnt.pdf
如果理解最大熵模型的內蘊,應該不難看出LR是不依賴數據的距離測度的。
總結一下
-
Linear SVM和LR都是線性分類器
-
Linear SVM不直接依賴數據分布,分類平面不受一類點影響;LR則受所有數據點的影響,如果數據不同類別strongly unbalance一般需要先對數據做balancing。
-
Linear SVM依賴數據表達的距離測度,所以需要對數據先做normalization;LR不受其影響
-
Linear SVM依賴penalty的系數,實驗中需要做validation
-
Linear SVM和LR的performance都會收到outlier的影響,其敏感程度而言,誰更好很難下明確結論。
注:不帶正則化的LR,其做normalization的目的是為了方便選擇優化過程的起始值,不代表最后的解的performance會跟normalization相關,如果用最大熵模型解釋,實際上優化目標是和距離測度無關的,而其線性約束是可以被放縮的(等式兩邊可同時乘以一個系數),所以做normalization只是為了求解優化模型過程中更容易選擇初始值。初學者容易把模型的建立和模型的求解混淆。
注2:查閱了一下Linear SVM和LR在UCI數據集上的表現,在小規模數據集上,Linear SVM是要略好於LR的,但差別也不是特別大,而且Linear SVM的計算復雜度受數據量限制,對海量數據LR使用更加廣泛。Do we Need Hundreds of Classifiers to Solve Real World Classification Problems?
其實這兩個分類器還是很類似的,都是在最大化兩類點之間的距離,但是 LR 把所有點都納入模型考量的范圍了,而 SVM 則只看 support vectors, 也就是離分類平面最近的點。所以說 SVM 的優點就在於,通過忽略已經分類正確的點,最后訓練出來的模型更加穩健,對 outlier 不敏感。
具體到 loss function 上來看, LR 用的是 log-loss, SVM 用的是 hinge-loss, 兩者的相似之處在於 loss 在錯誤分類的時候都很大,但是對於正確分類的點,hinge-loss 就不管了,而 log-loss 還要考慮進去。此外因為 log-loss 在 mis-classified 的點上是指數級增長的,而 hinge-loss 是線性增長,所以 LR 在偶爾出現 mis-label 的情況下的表現會比較糟糕。
此外還有一點就是用 SVM 來預測概率意義不大,人家模型本身就不是基於概率的。LR 則是基於 log-likelihood ratio,方便給出概率,並且向 multi-class 的擴展更加直接。(SVM 做 multi-class 也不是不可以,但是 objective function 很亂,實踐中一般直接用 one-vs-all)
另外 regularization 在這里沒有區別,L1/L2 兩個都能用,效果也差不多。Class imbalance 的話 SVM 一般用 weight 解決,LR 因為可以預測概率,所以也可以直接對最后的結果進行調整,取不同的閾值來達到理想的效果。
實踐中 LR 的速度明顯更快,維度小的時候 bias 小也不容易 overfit. 相反 Kernel SVM 在大規模數據集的情況下基本不實用,但是如果數據集本身比較小而且維度高的的話一般 SVM 表現更好。