原文:http://blog.sina.com.cn/s/blog_818f5fde0102vvpy.html
在大大小小的面試過程中,多次被問及這個問題:“請說一下邏輯回歸(LR)和支持向量機(SVM)之間的相同點和不同點”。第一次被問到這個問題的時候,含含糊糊地說了一些,大多不在點子上,后來被問得多了,慢慢也就理解得更清楚了,所以現在整理一下,希望對以后面試機器學習方向的同學有所幫助(至少可以瞎扯幾句,而不至於啞口無言ha(*^-^*))。
(1)為什么將LR和SVM放在一起來進行比較?
回答這個問題其實就是回答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更能考察你的功底呢?
(2)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很少運用核函數機制。
第四,線性SVM依賴數據表達的距離測度,所以需要對數據先做normalization,LR不受其影響。(引自http://www.zhihu.com/question/26768865/answer/34078149)
一個機遇概率,一個機遇距離!
第五,SVM的損失函數就自帶正則!!!(損失函數中的1/2||w||^2項),這就是為什么SVM是結構風險最小化算法的原因!!!而LR必須另外在損失函數上添加正則項!!!
以前一直不理解為什么SVM叫做結構風險最小化算法,所謂結構風險最小化,意思就是在訓練誤差和模型復雜度之間尋求平衡,防止過擬合,從而達到真實誤差的最小化。未達到結構風險最小化的目的,最常用的方法就是添加正則項,后面的博客我會具體分析各種正則因子的不同,這里就不扯遠了。但是,你發現沒,SVM的目標函數里居然自帶正則項!!!再看一下上面提到過的SVM目標函數:
有木有,那不就是L2正則項嗎?
不用多說了,如果不明白看看L1正則與L2正則吧,參考http://www.mamicode.com/info-detail-517504.html
邏輯回歸(logistic regression)和支持向量機(SVM)的比較
Liblinear支持兩個熱門的二元線性分類器:常規邏輯回歸LR和線性SVM。給出一組實例標簽(xi,yi),i=1,...l,xi∈Rn,yi∈{-1,1},這兩個分類器使用了不同的損失算法解決下面的約束優化問題。其中,C是大於0的懲罰因子。對於SVM來說,有兩個常用的損失算法max(1-yiwTxi,0)和max(1-yiwTxi,0)2,分別指的是L1-SVM和L2-SVM。對LR來說,損失算法是log(1+e-yiwTxi),得自一個概率模型。在有些案例中,分類器的判別式還要包含一個偏差項b。Liblinear通過對每個實例和緯度加強影響來實現偏差:wT<-[wT,b],XiT<-[XiT,B].其中B是用戶指定的常量。與此不同,L1-SVM和L2-SVM的算法是坐標下降法。Liblinear為L2-SVM和LR都實現了信任區域的牛頓方法。在測試階段,我們預測一個數據點上x>0,如果WTx>0.對於多元實例訓練,我們為之提供了1Vrest的策略。
無意間看到上面這段話,想起了那天吃飯的時候一個同事說他碰到一個面試題目是: svm 和 lr 的異同,當時思考了一下,之后想起了曾經在學習logistic regression classification model的梯度的時候,推到和一個簡單的兩層的sigmoid輸出的的梯度是一樣,后來發現神經網絡擬合的時候,我們用的是均方誤差的loss function ,而在這個lr 的推倒的時候,我同樣用了均方誤差的loss,因此得到一樣的結果,但是通常在lr的推倒的時候,我們是直接用 最大似然估計的,然后只有當 誤差的分布滿足高斯分布的時候,最大似然的結果才會和最小二乘相同(loss function 為均方誤差)
剛才看到上面的loss function 的形式,想到了cross entropy loss,在網上找到這篇文章印證了這個
http://www.cs.mcgill.ca/~dprecup/courses/ML/Lectures/ml-lecture05.pdf,不做這個ppt中的lable是0和1,所以和上面的公式有所不同,表達形式沒有那么漂亮,但是是一樣的,有時間再把這幾個公式整理一下吧。
lr 和 svm本質不同在於loss function的不同,不過想想這幾乎對所有的單層模型都使用,lr的損失函數是 cross entropy loss, adaboost的損失函數是 expotional loss ,svm是hinge loss,常見的回歸模型通常用 均方誤差 loss。