1. 程式人生 > >從Logistic迴歸到神經網路的一點感悟

從Logistic迴歸到神經網路的一點感悟


1 線性迴歸 (Linear Regression)

大略總結下

迴歸來源

我們關心的東西沒有辦法用一個或多個變數確定的表示,即無函式關係;但是又存在著較強的關聯性。這種關係就叫統計關係或相關關係。衍生兩個分支是迴歸分析和相關分析。二者側重不同,迴歸分析用的更廣泛。
迴歸分析中,x稱為解釋變數,是非隨機變數;y稱為響應變數,是隨機變數。
迴歸有線性迴歸和非線性迴歸;以最小二乘法(Least Square)為主的線性迴歸是最經典的迴歸模型。
迴歸和分類的問題是相同的,僅區別於響應變數的形式。y是分類變數時(例:0-1),模型為分類;是連續變數時稱為迴歸。

線性迴歸總結

Gauss-Markov 假設:

高斯-馬爾科夫是核心假設,後面迴歸出現的問題都由此而來。

  1. 線性模型成立 y=β0+β1x1+...+βpxp+ϵy=β0+β1x1+...+βpxp+ϵ是常數。

常見問題及解決辦法

  • 異方差性:即GM假設第5條不滿足,σiσi不再是常數。解決辦法:加權最小二乘。打個廣告,解決異方差性,這篇推送寫的不錯:如何收服異方差性
  • 多重共線性:第3條不滿足。舉例:自變數同時有一天進食量和中午以後進食量。解決辦法:根據多重共線性檢驗刪除一些不重要的變數;逐步迴歸、主成分迴歸、偏最小二乘,Ridge,Lasso(嶺迴歸與LASSO為正則化方法,在解釋性上強於前面兩種)
    線性迴歸示意圖

  • 當響應變數是定性變數。解決辦法:

  • 在資料處理上設定啞變數(dummy variable)
  • 響應變數是定性變數在生活中有廣泛的應用,其屬於廣義線性模型(generialized linear model,GLM)的研究範疇。

2 感知機 (Perceptron)

定義

當響應變數 yy 是分類變數時,建模過程就是分類了。感知機(Perceptron)是二分類的線性分類模型。可以看做是線性迴歸的兄弟(線性分類)。同時也是神經網路和支援向量機(support vector machine)的基礎。
下一篇學習筆記會試著寫寫從感知機到支援向量機。

在周志華老師的機器學習一書中側重於將其作為神經網路的基礎概念,對感知機的定義如下:

感知機由兩層神經元組成,輸入層接受外界輸入訊號後傳遞給輸出層,輸出層是M-P神經元,亦稱“閾值邏輯單元”(threshold logic unit)。如下圖所示:

這裡寫圖片描述

學習策略

在感知機模型中,假設資料集是線性可分的。因此,感知機的目標是找到一個超平面,將兩類點(正 or 負)完全分隔開來。因此,學習策略的核心是找到這樣的超平面方程:wx+b=0wx+b=0

因此,訓練需要得到的引數是 ww的連續可導函式,不便於優化。

損失函式:

L(w,b)=xiMyi(wxi+b)L(w,b)=−∑xi∈Myi(w⋅xi+b)是誤分類點的集合。這個損失函式就是感知機學習的經驗風險函式;所以問題就轉化為一個求解損失函式最小的最優化問題,最優化的方法是 隨機梯度下降(Stochastic gradient descent)。對於更多細節可以看李航的統計學習方法這本書;感知機這部分在書中有很全面的介紹。

3 Logistic Regression

怎麼來的

在前面已經提到了廣義線性模型,其一般表示形式為:

y=g1(wTx+b)y=g−1(wTx+b),而不知道被解釋變數的分佈情況,沒啥用,什麼也幹不了。 (歡迎大佬補充)

因此在Logistic迴歸中,取連線函式為logitlogit

那大佬們說的Sigmoid函式是什麼意思呢?
我們將上式寫成迴歸函式的樣子(兩邊取指數,挪一挪就得了):

p(y=1|x)=11+e(wTx+b)p(y=1|x)=11+e−(wTx+b)

機器學習中,一般令 z=wTx+bz=wTx+b

怎麼求解

首先介紹一下常見的幾種損失函式 :
  1. 平方損失:

    L=(yy^)2L=(y−y^)2 的一範數作為懲罰項。

Logistic迴歸的損失函式:負對數損失

我們已經得到了Logistic迴歸模型,等式左邊的 p(y=1|x)p(y=1|x)為單調增函式,不改變損失函式的極大值點 ,且將冪運算變為乘法,簡化計算,所以似然項可重寫為:

p(y|x)=ylog(y^)+(1y)log(1y^)p(y|x)=y∗log(y^)+(1−y)∗log(1−y^) 。最優化理論中,我們習慣求解極小化問題,所以添個負號,變為找最小值的優化問題。

l(w,b)=ni=1[yilog(y^i)+(1yi)log(1y^i)]l(w,b)=−∑i=1n[yi∗log(y^i)+(1−yi)∗log(1−y^i)]

這個時候損失函式是高階可導的連續凸函式,梯度下降法就可以求解了。

Tips

統計中關心的 比值 oddsodds)

OddsOdds ,值域從0到正無窮 擴大到 負無窮到正無窮,吻合一般的線性模型對響應變數的要求。

oddsodds

優勢比經常被用來解釋變數的變動帶來的事件 風險變化

log(oddslog(odds

參加交大研究夏令營面試的時候,一位生物統計的老師問到這個,當時有點懵圈,因為上課的時候老師也沒咋講。誒,想學生物統計的還是把這一塊好好了解一下吧。

4 神經網路 (Neural Network)

怎麼理解

神經元:


這裡寫圖片描述

上圖是一個神經元,高中生物學過。簡要來說:樹突接受訊號,胞體處理訊號,如果訊號產生的電位達到閾值(threshold),胞體變為“興奮”狀態(啟用狀態),通過軸突給下一個神經元傳出訊號。

神經元模型:

在機器學習中,談論神經網路時指的是 “神經網路學習“,是機器學習和生物神經網路的交叉部分。

神經元模型是神經網路學習中最基本的成分。下圖可以抽象的看做神經元模型,和上面的生物神經元對照著看。

這裡寫圖片描述

左邊的x1,x2,....xnx1,x2,....xn.
舉個例子:用手撓一下神經元,可能強度達不到閾值,神經元不理你;如果你用針用力刺一下它,疼痛感立馬大於閾值,神經元分泌化學物質,即輸出相應的訊號。

最簡單的幾種形式

感知機

前面介紹了感知機,它可以看做是兩層神經元組成,啟用函式是 Heaviside函式(階躍函式)的神經元模型。當輸入訊號大於閾值,神經元興奮,輸出1;否則神經元抑制,輸出 0。

Logistic迴歸

Logistic迴歸可以看做是兩層神經元,啟用函式是Sigmoid函式的神經網路。

這裡寫圖片描述

正如前面所說,可以給Logistic迴歸看做兩步驟,第一:z=wTx+bz=wTx+b

後記

  • 多層的我也不知道咋解釋,函式一層巢狀一層的,現在也很難解釋。

  • 有理論證明:神經網路層數多一點,比一層個數裡面多一點效果好;可以模擬任何的函式;隨著樣本量的增大,效果會好起來,但是肯定有極限。

  • 反正第一次寫,不知道寫多了還是寫少了。有什麼意見儘管提,爭取下次改正。大家都菜的摳腳,一起學習一起進步。


				<script>
					(function(){
						function setArticleH(btnReadmore,posi){
							var winH = $(window).height();
							var articleBox = $("div.article_content");
							var artH = articleBox.height();
							if(artH > winH*posi){
								articleBox.css({
									'height':winH*posi+'px',
									'overflow':'hidden'
								})
								btnReadmore.click(function(){
									if(typeof window.localStorage === "object" && typeof window.csdn.anonymousUserLimit === "object"){
										if(!window.csdn.anonymousUserLimit.judgment()){
											window.csdn.anonymousUserLimit.Jumplogin();
											return false;
										}else if(!currentUserName){
											window.csdn.anonymousUserLimit.updata();
										}
									}
									
									articleBox.removeAttr("style");
									$(this).parent().remove();
								})
							}else{
								btnReadmore.parent().remove();
							}
						}
						var btnReadmore = $("#btn-readmore");
						if(btnReadmore.length>0){
							if(currentUserName){
								setArticleH(btnReadmore,3);
							}else{
								setArticleH(btnReadmore,1.2);
							}
						}
					})()
				</script>
				</article>