LR和SVM

SVM 基本概念

將實例的特徵向量(以二維爲例)映射爲空間中的一些點,就是如下圖的實心點和空心點,它們屬於不同的兩類。

那麼 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有什麼區別(哈哈,廢話是不是太多)。
不同點
loss function 不同 (重點)

LR 的 loss function
J(θ)=−1m(∑i=1my(i)logŷ (i)(x(i))+(1−y(i))log(1−ŷ (i)))
J(θ)=−1m(∑i=1my(i)logy^(i)(x(i))+(1−y(i))log(1−y^(i)))
SVM 的 loss function
L(w,b,α)=12‖w‖2−∑i=1nαi(yi(wTxi+b)−1)
L(w,b,α)=12‖w‖2−∑i=1nαi(yi(wTxi+b)−1)
SVM 只考慮局部的邊界線附近的點,LR 考慮全局,遠離的點對邊界線的確定也起作用

線性 SVM 不直接依賴於數據分佈,分類平面不受一類點的影響。
LR 則受所有數據點的影響, 如果數據不同類別 strongly unbalance, 一般需要先對數據做 balancing。

在解決非線性問題時,SVM 採用核函數的機制,而 LR 通常不採用核函數的方法

在計算決策面時,SVM算法裏只有少數幾個代表支持向量的樣本參與了計算,也就是隻有少數幾個樣本需要參與覈計算(即kernal machine解的係數是稀疏的)。然而,LR算法裏,每個樣本點都必須參與決策面的計算過程,也就是說,假設我們在LR裏也運用核函數的原理,那麼每個樣本點都必須參與覈計算,這帶來的計算複雜度是相當高的。所以,在具體應用時,LR很少運用核函數機制。​

線性 SVM 依賴數據表達的距離測度,所以需要先對數據做 normalization, LR 則不受影響。

SVM 的損失函數就自帶正則,即12‖w‖212‖w‖2, 這就是爲什麼SVM是結構風險最小化算法的原因!!!而LR必須另外在損失函數上添加正則項!!!
LR 和 SVM 的選擇
在Andrew NG的課裏講到過:

如果Feature的數量很大,跟樣本數量差不多,這時候選用LR或者是Linear Kernel的SVM
如果Feature的數量比較小,樣本數量一般,不算大也不算小,選用SVM+Gaussian Kernel
如果Feature的數量比較小,而樣本數量很多,需要手工添加一些feature變成第一種情況
SVM 的 kernel 一般怎麼選擇?
如果數據量不是特別大的時候,可以使用 RBF kernel,主要要加入正則化;
如果數據量很大,需要把特徵離散化,拉高維度,使用 linear kernel 的 SVM


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章