Logistic迴歸以及LR與SVM異同


邏輯迴歸的優缺點

優點:
1)速度快,適合二分類問題
2)簡單易於理解,直接看到各個特徵的權重
3)能容易地更新模型吸收新的數據
缺點:
對數據和場景的適應能力有侷限性,不如決策樹算法適應性那麼強


http://blog.csdn.net/pakko/article/details/37878837/

什麼是邏輯迴歸?

Logistic迴歸與多重線性迴歸實際上有很多相同之處,最大的區別就在於它們的因變量不同,其他的基本都差不多。正是因爲如此,這兩種迴歸可以歸於同一個家族,即廣義線性模型(generalizedlinear model)。

這一家族中的模型形式基本上都差不多,不同的就是因變量不同。

  • 如果是連續的,就是多重線性迴歸;
  • 如果是二項分佈,就是Logistic迴歸;
  • 如果是Poisson分佈,就是Poisson迴歸;
  • 如果是負二項分佈,就是負二項迴歸。

Logistic迴歸的因變量可以是二分類的,也可以是多分類的,但是二分類的更爲常用,也更加容易解釋。所以實際中最常用的就是二分類的Logistic迴歸。

Logistic迴歸的主要用途:

  • 尋找危險因素:尋找某一疾病的危險因素等;
  • 預測:根據模型,預測在不同的自變量情況下,發生某病或某種情況的概率有多大;
  • 判別:實際上跟預測有些類似,也是根據模型,判斷某人屬於某病或屬於某種情況的概率有多大,也就是看一下這個人有多大的可能性是屬於某病。

Logistic迴歸主要在流行病學中應用較多,比較常用的情形是探索某疾病的危險因素,根據危險因素預測某疾病發生的概率,等等。例如,想探討胃癌發生的危險因素,可以選擇兩組人羣,一組是胃癌組,一組是非胃癌組,兩組人羣肯定有不同的體徵和生活方式等。這裏的因變量就是是否胃癌,即“是”或“否”,自變量就可以包括很多了,例如年齡、性別、飲食習慣、幽門螺桿菌感染等。自變量既可以是連續的,也可以是分類的。

 

常規步驟

Regression問題的常規步驟爲:

  1. 尋找h函數(即hypothesis);
  2. 構造J函數(損失函數);
  3. 想辦法使得J函數最小並求得迴歸參數(θ)


構造預測函數h

Logistic迴歸雖然名字裏帶“迴歸”,但是它實際上是一種分類方法,主要用於兩分類問題(即輸出只有兩種,分別代表兩個類別),所以利用了Logistic函數(或稱爲Sigmoid函數),函數形式爲:

Sigmoid 函數在有個很漂亮的“S”形,如下圖所示(引自維基百科):

 

下面左圖是一個線性的決策邊界,右圖是非線性的決策邊界。



對於線性邊界的情況,邊界形式如下:

構造預測函數爲:


函數的值有特殊的含義,它表示結果取1的概率,因此對於輸入x分類結果爲類別1和類別0的概率分別爲:



構造損失函數J

Cost函數和J函數如下,它們是基於最大似然估計推導得到的。



下面詳細說明推導的過程:

(1)式綜合起來可以寫成:

取似然函數爲:


對數似然函數爲:


最大似然估計就是求使取最大值時的θ,其實這裏可以使用梯度上升法求解,求得的θ就是要求的最佳參數。但是,在Andrew Ng的課程中將取爲下式,即:


因爲乘了一個負的係數-1/m,所以取最小值時的θ爲要求的最佳參數。


梯度下降法求的最小值

θ更新過程:

 


θ更新過程可以寫成:

 


向量化Vectorization

Vectorization是使用矩陣計算來代替for循環,以簡化計算過程,提高效率。

如上式,Σ(...)是一個求和的過程,顯然需要一個for語句循環m次,所以根本沒有完全的實現vectorization。


下面介紹向量化的過程:

約定訓練數據的矩陣形式如下,x的每一行爲一條訓練樣本,而每一列爲不同的特稱取值:

g(A)的參數A爲一列向量,所以實現g函數時要支持列向量作爲參數,並返回列向量。由上式可知可由一次計算求得。

θ更新過程可以改爲:


綜上所述,Vectorization後θ更新的步驟如下:

(1)求

(2)求

(3)求 

 

正則化Regularization

過擬合問題

對於線性迴歸或邏輯迴歸的損失函數構成的模型,可能會有些權重很大,有些權重很小,導致過擬合(就是過分擬合了訓練數據),使得模型的複雜度提高,泛化能力較差(對未知數據的預測能力)。

下面左圖即爲欠擬合,中圖爲合適的擬合,右圖爲過擬合。


問題的主因

過擬合問題往往源自過多的特徵。

解決方法

1)減少特徵數量(減少特徵會失去一些信息,即使特徵選的很好)

  • 可用人工選擇要保留的特徵;
  • 模型選擇算法;

2)正則化(特徵較多時比較有效)

  • 保留所有特徵,但減少θ的大小

正則化方法

正則化是結構風險最小化策略的實現,是在經驗風險上加一個正則化項或懲罰項。正則化項一般是模型複雜度的單調遞增函數,模型越複雜,正則化項就越大。

從房價預測問題開始,這次採用的是多項式迴歸。左圖是適當擬合,右圖是過擬合。


直觀來看,如果我們想解決這個例子中的過擬合問題,最好能將的影響消除,也就是讓。假設我們對進行懲罰,並且令其很小,一個簡單的辦法就是給原有的Cost函數加上兩個略大懲罰項,例如:


這樣在最小化Cost函數的時候,

正則項可以取不同的形式,在迴歸問題中取平方損失,就是參數的L2範數,也可以取L1範數。取平方損失時,模型的損失函數變爲:


lambda是正則項係數:

  • 如果它的值很大,說明對模型的複雜度懲罰大,對擬合數據的損失懲罰小,這樣它就不會過分擬合數據,在訓練數據上的偏差較大,在未知數據上的方差較小,但是可能出現欠擬合的現象;
  • 如果它的值很小,說明比較注重對訓練數據的擬合,在訓練數據上的偏差會小,但是可能會導致過擬合。

正則化後的梯度下降算法θ的更新變爲:


正則化後的線性迴歸的Normal Equation的公式爲:



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目標函數:

SVM目標函數

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

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

 

http://www.zhihu.com/question/26768865/answer/34078149

 

 

邏輯迴歸(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。






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