什么是線性回歸?
根據樣本數據的分布特點,通過線性關系模擬數據分布趨勢,從而進行預測。對於下圖來說,樣本點的連線大致接近於一條直線,所以就可以將函數模擬成線性方程。
設 f(x) = wx + b,所以只要求出w 和 b,就可以得到x與y的關系,從而能夠根據x預測出對應的y。
要求 w 和 b,只能借助於現有的數據樣本。因為存在誤差,這條直線不可能穿過所有的樣本點,所以我們只需讓誤差最小即可。
如何描述誤差(最小二乘法)
誤差可以看做是對於相同的xi,通過模擬得到的和真實的樣本數據y的差。即
。為了方便討論,可以對絕對值求平方:
所以,只要求出所有樣本真實值和預測值誤差的最小值,就是誤差最小的模擬。可用如下公式表示:
其中,w*、b*分別表示使得樣本總體誤差和最小的那組解。
我們在這里使用的是均方誤差,它具有非常好的幾何意義,通過歐幾里得距離描述誤差,顯得非常直觀。通過均方誤差計算 w* 和 b* 的方法就叫做最小二乘法。
注:為什么不用樣本點到直線的距離描述誤差?
誤差是一種相對概念,指樣本真實值y與預測值f(x)的差,所以要基於相同的x。用點到線的距離的話,距離的直線和預測直線f(x)相交的點 與樣本點沒有可比性,這段距離無法解釋誤差的概念,所以基於相同的x更合適。
為了求目標函數的最小值,我們可以通過分別對w和b求導並等於0得到。求解過程如下 :
多項式回歸
相對於直線而言,曲線肯定模擬的效果會更好,換句話說,也就是誤差更小。以二次曲線為例,令f(w, b) = w2x^2 + w1x + b,則圖像為:
注:如果曲線的次數越高,說明f(w, b)值越精確(過於精確可能會導致過擬合的問題)。
可以看出,擬合的效果比直線更好些。
多項式回歸的一般形式:
多項式回歸的求解一般比較復雜,在工程上通常使用近似的方式求解,會用到梯度下降的方法,后面會講到。
多元線性回歸
上面講的是特征只有一個的情況。多數情況下,一個事件的結果是由多種因素(特征)影響的。所以存在多個特征值的情況就叫做多元線性回歸。
與之前的線性回歸相似,我們可以利用最小二乘法對w和b進行近似。為方便推導,我們把整個數據集都使用向量表示:
其中表示樣本的預測值。
可用於分類的邏輯回歸
線性回歸的模型告訴我們,樣本的預測結果是連續的,輸入一個x,總有一個模型中對應的y。如果y的值不是一系列的連續值,而是已知的幾個結果,那就轉化成了分類問題。
考慮一個最簡單的二分類問題,擲硬幣,我們一般會說,擲出正面或反面的概率都是1/2。所以,我們通常將分類問題轉換為概率問題。如果P代表正面(y=1)的概率,P越大,y=1的概率越大;1-P則代表反面(y=0)的概率,P越小,y=0的概率越大。所以我們可以尋找一個邊界,在這個邊界的一邊,全是y=1的正面點;另一邊全是y=0的反面點。而靠近這個邊界的點,則會表現出一定的隨機性。
所以,我們需要找到一個值域為[0, 1]的函數,用來模擬預測模型,輸入值為樣本特征,輸出值為對應分類的概率預測值。最直觀的就是分段函數(也叫單位階躍函數):
而通過該函數的分段函數可知,函數在x=0處不連續,所以,需要尋找一個替代函數,對數幾率函數正是與單位階躍函數相似的函數:
對數幾率函數也叫做Sigmoid函數。
注:為什么會使用 Sigmoid 函數表示預測概率?
它是邏輯回歸概率的另一種表現形式。可根據貝葉斯公式和全概率公式推導而出。
對於邏輯回歸的二分類問題來說,每一次分類實際上都是一次伯努利實驗(A分類或B分類),如果假設每個分類下的樣本屬於正態分布,對於預測概率P(y=1|x),可做如下推導:
對於之前的假設條件:每個分類下的樣本屬於正態分布,可以這么理解。假設下圖是某類人群的身高分布:
可以看出,整體是呈正態分布的,所以假設相對合理。
極大似然法
極大似然法的主要思想:概率最大的事情最容易發生,反過來說發生了的事情概率最大。當前的樣本集既然出現了,說明它的概率就是最大的。所以我們只要求出當前樣本集的聯合概率的最大值,就能得到模型。所以我們設樣本的聯合概率為目標函數:
對右邊取對數,並取負號,將求最大值轉換為最小值:
使用極大似然法推導目標函數
下面我們參照西瓜書對該目標函數進行推導。
假設x具有多元特征,則有:
帶入二分類的概率公式,得:
注:此處沒有用之前推導出的Sigmoid函數,使用的是西瓜書上3.23和3.24的公式(p(y=1)和p(y=0)的公式相反),是為了推導出與之一致的結果,實際上原理是相同的。
使用交叉熵推導目標函數
我們直到信息熵是用來度量某一特定樣本集分布的純度(或者混亂程度/不確定性),信息熵越大,純度越低(混亂程度/不確定性越高),公式如下:
而交叉熵則是考察兩個樣本集,度量這兩個樣本集的差異。交叉熵越大,代表兩個分布的差異越大,反之越小。
凸函數及梯度下降法
至此,我們就最大限度地推導了邏輯回歸的目標函數。那么接下來我們能否仿照線性回歸那樣,直接對目標函數求導,通過令一階導數為零直接求解出最優解呢?其實從公式(10)可以看出,這是一個關於
的高階非線性函數,直接求一階導數的解將非常復雜。所以我們將使用凸優化理論中的經典數值優化算法——梯度下降法。但是,能使用這種優化算法的前提是函數是凸函數。
凸函數的證明
關於凸函數,有如下定理:
翻譯一下就是:
所以,我們就是要證明目標函數的海塞矩陣為半正定矩陣。海塞矩陣即由目標函數對向量各分量的二階偏導數所組成的矩陣:
梯度下降法
證明了目標函數為凸函數后,就可以使用梯度下降法求極值了。那什么是梯度呢?梯度就是使方向導數最大的方向。那什么又是方向導數呢?在多元函數中,我們沿函數圖像上某一點做切線,可以有無數種選擇,因為沿任意方向都可以做該點的切線。我們需要從中找到一個方向,能使函數的變化值最大,這就是梯度。
注:關於梯度的詳細解釋,可以參考這篇文章:《梯度的方向為什么是函數值增加最快的方向?》
我們還可以從微分的角度理解:
當N點逐漸靠近M點,即△x足夠小時,我們可以將曲線MN近似為直線MN,所以tanα ≈ △y/△x。所以有:
\(\Delta{y} \approx \Delta{x} * tan{\alpha}\)
而
\(\Delta{y} = f(x_0 + \Delta{x}) - f(x)\)
\(tan(\alpha) = \frac{\partial{f(x_0)}}{\partial{x}}\)
所以:
\(f(x_0 + \Delta{x}) \approx f(x) + \Delta{x}\frac{\partial{f(x_0)}}{\partial{x}}\)
上式也等價於:
\(\Delta\smash{f(x)} \approx \Delta{x}\frac{\partial{f(x_0)}}{\partial{x}}\)
如果我們要找 \(f(x)\) 的最小值,就需要保證 \(\Delta\smash{f(x)} \le 0\),\(f(x)\) 才會不斷減小。可以觀察出,當 \(\Delta{x} = -\eta\frac{\partial{f(x_0)}}{\partial{x}}\) 時,\(\Delta\smash{f(x)} \approx -\eta(\frac{\partial{f(x_0)}}{\partial{x}})^2 \le 0\) 恆成立。
將 \(\Delta{x} = -\eta\frac{\partial{f(x_0)}}{\partial{x}}\) 寫成一般情況下的式子:
\(\bm{x_{n+1} = x_{n} - \eta\frac{\partial{f(x_{n})}}{\partial{x}}}\)
只要我們使用這個公式,不斷地更新 \(x\),就可以接近最小值(在機器學習中,更習慣使用 \(\bm{w}\) 或者 \(\bm{\theta}\) 表示多維向量)。
(實際上,\(\Delta{x} = -\eta\frac{\partial{f(x_0)}}{\partial{x}}\) 這個式子也解釋了為什么要沿梯度的反方向。)
這里的 \(\eta\) 在機器學習中也叫做學習率,就是每走一步的跨度。它是一個超參數,需要人為進行設定。對學習率的設定,需要注意,如果設置得太小,則可能會經過非常多的迭代次數才能接近最小值,消耗過多的資源;但如果設置得太大,則可能直接跨過最小值,甚至逐漸偏離: