回归、线性回归和逻辑回归【逻辑回归部分待完成】
一、回歸
“回歸”這個詞很有誤導性,在陳希孺的《概率論與數理統計》中對這個詞的來源有過解釋。是個外國人,在做數據分析的時候,發現將數據畫出來后,不管大的小的數據都會有一種趨于中間的趨勢,這樣的趨勢在他看來叫做”回歸“,因此,regression這個詞就誕生了。
從現在的角度來看,尤其是對漢字而言,”回歸“從字面上并不很容易理解?!被貧w“的本質是”參數估計“,所以,如果我們把”回歸“改作”參數估計“,甚至是”估參“,那就好理解多了,如:估參、線性估參、邏輯估參。hah。
二、線性回歸
線性回歸顧名思義,就是使用線性函數來對數據進行建模,并對線性函數中的參數進行估計。
最常見的線性函數就是二維函數: f(x) = a*x + b。
中學學物理的時候,估計做過很多,通過實驗檢測實驗數據,將數據描點到圖紙上,畫出數據中的直線,通過度量直線與坐標軸的交點來得計算直線的方程。這其實就算是線性回歸了,因為,在這個過程中,我們用數據進行建模,并根據結果對線性參數進行了估計。
當然,在實際中,要比這個復雜。二維的數據很容易看出規律,但是10維,20維,100維之后,既不容易在紙上畫出來,人也不容易在腦中對模型進行構建。這時候就顯現出計算機的優勢了,它不會有這方面的困難。我們可以建立100維的線性函數為:f(x) = w0 + w1*x1 + w2*x2 + ... + w100*x100,之后就可以通過數據來對參數進行估計了。
問題就出來了。即便我們已經有了N個100維的數據點,那么我們該如何去對參數進行估計呢?
通過對數據點畫圖來觀察的方法已經是不可能的了,這時候我們就需要引出兩個常用的方法。他們分別是評估方法和計算方法。
1. 最小二乘法
最小二乘法是評估方法,而不是計算方法。也就是說,它是用來對已經有的參數進行評價好壞的,而不是根據已有的數據來計算得出參數的。
最小二乘法英文是Least squares,square即是平方的意思。對于已經得到的參數[w0, w1, ..., w100],我們將每個數據點的數據[x1, x2, ..., x100]帶入函數y=f(x)中去,從而得到該參數的模型對該點的輸出f(x)。該點使用該模型的輸出f(x)與該點本身的輸出y差值即是模型對該點的的結果誤差。將所有點的誤差的平方求和后取均值,即是所有數據點在該模型的總誤差函數J(w),即:
J(x) = J(x|[w→]) = ∑(f(x) - y) ^2 / 2*N
其中,w→是已經得到的w參數向量,最終結果J(x)是關于x的參數。分母中的N即是數據點的個數,包含2的意思一般是方便對x進行求導時,可以把導數中得到的2消掉(數學中經常這么干,來方便后續計算)。
我們的目標,就是選出效果最好的參數向量w→,也即是使得J(x)達到最小,這樣的模型就是最優模型。
2. 梯度下降法
說了半天怎么去評估模型的好壞,還是沒有說到到底怎么去求參數向量w→。
對于這樣有很多參數,并且參數的選取并沒有一定的規則可循的時候,我們就用到一種常用的解題思路:”瞎猜法“。也就是說,沒有任何一種條件可以給我們信息,來對模型的參數進行估計,那么,我們可以隨機的選擇一個參數向量作為初始參數,之后,通過評估函數(如上面提到的最小二乘法等)來對結果進行評估,并根據評估結果來對模型的參數進行修正,最終得到滿意的模型參數(如:選取的參數使最小二乘法的J(x)<k,其中k是我們的足夠好的模型參數)。
思路很正確:隨即選取初始參數 → 使用參數建立模型方程 → 使用評估函數對模型進行評價 → 根據評價結果反饋對參數進行改進 → 循環重復直至滿足設定的條件。
看一下流程,前三步都已經如何做了,只剩下關鍵的一步:根據評價結果反饋對參數進行改進。
如何進行改進呢?參數應該朝哪個方向改進?那些參數該變大,那些參數該變小?這都是問題。
這就用到了梯度下降法,叫做gradient descent。
學過高數的都知道,對于函數y = x ^2,我們可以在任一點對函數取導數,其幾何意義是函數在這個方向上增大或減小。我們想要讓函數最終取到最凹下來的那個位置,就需要沿著導數的反方向前進。
同樣的,我們把這個擴展到三維甚至更多維的平面上,在其中的一點取函數的導數,并沿著導數的反方向不斷前進,則最終就可以達到函數的最低點。
可以想象成爬山,我們沿著山向上爬就相當于沿著山的曲線的導數方向前進,最終可以達到山頂。下山的時候也是如此,沿著山谷走,相當于沿著山的曲線的導數的反方向前進,最終可以達到山谷。
在這個例子中,就是想要找到最小二乘法得到的誤差函數J(x)的山谷,從而達到模型的最小誤差。
使用梯度下降法需要注意幾個問題:
2.1 容易達到局部最優而非全局最優
就像是在下山谷的過程中,我們總是沿著下山最快的方向前進,結果可能進入到了山腰上的一個小凹地中無法出來。也就是找到了局部最優值而非全局最優值。這一點,在神經網絡ANN中的反向傳播算法backpropagation中,由于也用了梯度下降法,因此也會遇到。
解決辦法:
1) 在多維的結構中,每一步的前進方向不是尋找到所有維度的最優方向前進,而是分開,在每一維度各自最優的方向分別前進一小步。這是對在所有維度的最優方向上前進的近似,但是二者并不是完全一樣的(否則就是同一個方法了)。這叫做incremental gradient descent,優點是有可能避開局部最優。但是,并不能完全保證。
2) 與上面類似的,在每一次的前進方向中,我們并不想要讓他總是朝著所有維度最優的方向前進,那么,我們可以采取其他措施來對前進的方向進行影響從而盡量避免進入局部最優值。比如:我們可以使每次前進的方向收到前一次方向的影響,也就是說,w(n+1) = w(n+1) + k*w(n),其中,k是我們設定的參數,如0.1。這樣,每次前進的方向相當于不僅受到當前位置的所有維度的最優方向影響,還受到上一步中的方向的影響。從而,也許可以逃出局部最優值。其中,k*w(n)叫做momentum,這個方法叫adding momentum。這種方法可能避開局部最優,而且通過add momentum,加快了步距和收斂速度。
按照以上兩種思路,我們還可以設定其他影響當前前進方向的因素,只要能夠合理的解釋并經過實驗驗證,都可以是一種新的方法。
3) 還有一種思路是加入隨即因素,即在前進的方向中,加入一定的概率使得前進方向不是按照既定的所有維度的最優方向,而是有一定的幾率隨即的轉到其他方向。這樣,相當于人下山走著走著突然莫名的轉了個彎,然后再繼續按照最優方向前進。這樣,也有可能概率性的避開局部最優從而趨向全局最優解。這種隨機跳出的思想有點類似page rank,以及模擬退火算法。
其他方法我現在想不起來太多了,反正思路就是影響原來的方向,不管是從將從多維方向走變為從單維方向走,還是添加上次方向的影響,還是隨機跳出來重新挑方向,都是”標新立異“,”不走尋常路“。
2.2 可能產生震蕩
在進入到最終收斂的步驟的時候,如果此時步距設定的太大,就有可能在最優值附近來回擺動,就像鐘擺一樣,走一步走多了,錯過了最優點;回來的時候又走多了,又錯過了。從而無限震蕩。
解決的方法一般是在迭代次數多,或者誤差函數J(x)達到一定程度了之后,將步距的控制參數逐漸調小,從而最終區域最優解。
2.3 數據歸一化
在實際應用中,由于有些數據的標準不一,最終導至數據的大小差別很大。比如說,在對結果產生影響的兩個維度的數據中,一維中數據的取值范圍是[1000,2000],另一維中數據的取值范圍是[0.1, 0.5],那么,如果我們在函數中將他們均等的對待,顯然是不合適的。因此,實際在使用回歸分析是,一般先需要對數據進行歸一化。(如:在之前的文章中提到,使用SVM對MNIST手寫數字數據集進行分類,如果不對圖像的灰度數據[0,255]進行歸一化到[0,1],則完全沒有效果,基本和瞎猜的正確率相同)
歸一化是將數據的取值范圍調整為[-1, 1]或[0,1],從而方便對數據處理。
歸一化也不只一種方法,最常用的歸一化方法是,計算該維度數據的平均值x_mean,最大值max和最小值min,對數據x進行歸一化:
x = (x - x_mean) / (max - min)
這樣,新的x的取值范圍就是[0, 1]了。
當然還有其他歸一化方法,例如:我們下面要講的邏輯回歸。
三、邏輯回歸
邏輯回歸本質上還是線性回歸,只不過對其進行了一個變種。
如上文所示,如果在數據歸一化處理中,使用logistic函數(也就是sigmoid函數)來進行歸一化,這就變成了邏輯回歸。
與線性回歸相比,邏輯回歸通過logistic函數,也是將數據映射到了[0, 1]的范圍內,但是,在logistic函數中,大部分的函數值都映射到接近0或接近1的位置上,而非原來的歸一化中的均勻分布。這就給線性回歸帶來了新的特性。
這個新的特性是什么呢?
我們先來看一下logistic函數映射的特點。
1. 連續的,可導的;
2. 基本將數據分開為0和1兩大類。
---
至于邏輯函數給邏輯回歸到底帶來了什么性質?到底是如何影響的?使用其他函數來做歸一化可以嗎?(當然可以)還可以有什么歸一化方法?其他的歸一化方法又有什么行的特性?也有特定的名字嗎?為什么邏輯回歸這么重要?logistic函數比其他函數好在哪里了?
另外,對于線性回歸中,假如對不同維度不只是求線性的參數,還包括多維乘積的參數,應該是可以表現非線性函數的吧?比如,y = w0 + w1 * x1 + w2 * x1^2 +?w3 * x2 + w4 * x2^2 + w5 * x1 * x2。對于K維數據,最終參數個數應該有多少個?這樣的模型的表現如何?有沒有對應的名字?
這些問題,,,下次研究明白了再來解答。
供參考:
http://hi.baidu.com/hehehehello/item/40025c33d7d9b7b9633aff87?中說:
至于所以用logistic而不用其它,是因為這種歸一化的方法往往比較合理(人家都說自己叫logistic了嘛?呵呵),能夠打壓過大和過小的結果(往往是噪音),以保證主流的結果不至于被忽視。
參考資料:
http://hi.baidu.com/hehehehello/item/40025c33d7d9b7b9633aff87
總結
以上是生活随笔為你收集整理的回归、线性回归和逻辑回归【逻辑回归部分待完成】的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Logistic Function ==
- 下一篇: 如何来玩MNIST数据集?