LR和SVM的相同和不一樣

以前一篇博客中介紹了Logistics Regression的理論原理:http://www.cnblogs.com/bentuwuying/p/6616680.htmlhtml

在大大小小的面試過程當中,常常會有這個問題:「請說一下邏輯迴歸(LR)和支持向量機(SVM)之間的相同點和不一樣點」。如今整理一下,但願對之後面試機器學習方向的同窗有所幫助。面試

(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什麼區別,你說一個非線性分類器和一個線性分類器有什麼區別?spa

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

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

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

判別模型會生成一個表示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

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

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​

相關文章
相關標籤/搜索