線性迴歸
假設函數(Hypotheses function)
首先應該設計一個假設函數,這個假設函數是用來表示一個線性迴歸的問題,不是一個單獨的函數,而是一個函數集合,包含很多個有可能可以很好的表示這個線性迴歸問題的函數,也就是通常所說的model。一般來講線性迴歸的假設函數我們表示成這個樣子:
其中 是第i個特徵, 是第i個特徵的權重, 是bias偏移量。爲了將這個式子更加簡化,可以將 用 代替,其中 ,因此我們可以寫成向量相乘的形式:
,
其中和都是向量,
,
以上是線性迴歸的假設函數。
設計好模型後,就應該根據訓練集使 儘可能的接近,此時的就是最終要找的函數,向量就是所找的目標參數。爲了衡量 與之間的距離,需要設計一個損失函數表示兩者之間的誤差。
損失函數(Cost function)
假設對於每一個樣例,目標函數與真實的函數之間相差一個誤差,且這個誤差是獨立同分布的(IID:Independently and Identically Distribution),
根據中心極限定理:在適當的條件下,大量相互獨立隨機變量的均值經適當標準化後依分佈收斂於高斯分佈。因此,假設獨立這些誤差服從均值爲0的高斯分佈:。
因此可以寫出高斯分佈的概率密度函數:
其中,
因此,
由於獨立同分布,使用極大似然估計法來計算x條件下取到y的最大概率,其中theta是變量,可以寫出極大似然函數:
取對數化簡,取對數後單調性不變,
可以從化簡結果中看出,除了一個平方項,其他均爲常數,因此使用平方誤差當作損失函數。其中,所以損失函數爲,
其中1/2是爲了後面計算方便化簡。
最優化算法(Optimization algorithm)
-
矩陣滿秩時可以直接求解
-
矩陣不滿秩時使用一系列最優化算法求解
主要使用了梯度下降算法求解目標函數 。梯度下降法主要思想是在一點上求梯度,沿梯度的反方向就是下降最快的方向,移動一個小的步長,每次更新和梯度,不斷迭代直到收斂。具體可以看這篇。
需要注意的有幾點:
- 隨機起始點
- 每次迭代應該同步更新完所有後進行下一次迭代
淺顯的解釋一下爲什麼可以隨機起始點,目標函數是一個二次函數,線性迴歸構成一個線性最小二乘問題,也就是說線性迴歸的代價函數是個凸函數,所以當x是一維的情況時,目標函數是一個開口向上的拋物線,局部最優解就是全局最優解,只有在全局最優解處梯度爲0,因此在任意位置開始梯度下降,一定會穩定收斂於全局最優解。
寫出梯度下降的公式如下:
梯度可化簡爲:
最終:
邏輯迴歸
假設函數(Hypotheses function)
邏輯迴歸與線性迴歸最直觀的區別就是邏輯迴歸的target是離散的數據,對於二分類問題,邏輯迴歸的target取值就是0或1,理論上可以直接用線性迴歸對邏輯迴歸的分類值預測,但是實際上效果非常差,直觀上因爲y只能取到0或1,但是線性迴歸能取到全體實數。因此,選擇了sigmoid函數作爲假設函數,這個函數的作用可以理解爲講輸入的全體實數映射到[0,1]區間內。
,
圖像如下:
損失函數(Cost function)
根據上面線性迴歸的思路,應該把這個假設函數轉化爲概率,然後利用極大似然估計最大化概率從而學習的值,因此假設:
寫成一個式子可以表示爲:
利用極大似然估計法寫出要最優化的目標,然後取對數化簡:
最優化算法(Optimization algorithm)
至此,得到了待優化的目標函數,仍然根據上面線性迴歸的思路,使用梯度下降的思路求解:。這裏是加而不是減,是因爲在線性迴歸中最大化轉化爲了最大化一個負平方誤差,也就是最小化一個平方誤差。這裏直接使用的是最大化。
因此邏輯迴歸的迭代式爲:
可以看到邏輯迴歸的迭代式和線性迴歸很像,但是這兩個用的損失函數截然不同,僅僅是化簡完後形式很像而已。線性迴歸用到的是平方誤差,而邏輯迴歸用到的是對數誤差,這從剛剛的推導過程中也可以看出來。
邏輯迴歸和線性迴歸的異同
兩者雖然都叫做迴歸,線性迴歸是用於迴歸問題,而邏輯迴歸用於分類問題,這是最本質的區別。線性迴歸我們是通過假設了真實值與預測模型有一個誤差,,然後假設這個誤差服從正態分佈,根據這個誤差項來處理迴歸問題。而邏輯迴歸是因變量服從一個特殊的二項分佈,也就是伯努利分佈,根據模型是根據這個分佈的期望得出,剛好是sigmoid函數,並基於此來預測分類問題,包括爲什麼講假設函數假設爲y=1的概率從而得出後面的極大似然估計,這些在後面對於廣義線性模型的總結中會詳細推導。
我們也可以將邏輯迴歸看做是線性迴歸,p(y=1|x)看作服從正太分佈,我認爲和高斯判別分析法有一些關聯,後面我也會進行推導。同時兩種迴歸都用到了梯度下降的思路去求解,這也是一個共同點。