吳恩達機器學習——第2、5章 線性迴歸

概述

線性迴歸問題,是用來解決迴歸問題的最簡單的算法。
線性迴歸(Linear Regression)是一種通過屬性的線性組合來進行預測的線性模型,其目的是找到一條直線或者一個平面或者更高維的超平面,使得預測值與真實值之間的誤差最小化。
在這裏插入圖片描述
如果特徵只有一個,則稱之爲“一元線性分析”;如果特徵有多個,則稱之爲“多元線性分析”。

基本原理

一元線性函數可以表達爲:hθ(x)=θ0+θ1xh_θ(x)=θ_0 + θ_1x,多元線性函數可以表達爲hθ(x)=θ0+θ1x1+θ2x2+....+θixih_θ(x)=θ_0+θ_1x_1+θ_2x_2+....+θ_ix_i,我們把這個函數作爲線性迴歸的“評估函數”。
其中θθ稱之爲“參數”,我們的目的就是找到最合適的θθ,使真實值和預測值之間的差異足夠小。
一般採用梯度下降、最小二乘法去計算該參數。

代價函數

代價函數就是爲了獲得最合適的θ0θ_0 θ1θ_1而使用的函數。

平方誤差函數

平方誤差函數是最常用的代價函數,尤其在迴歸場景下的效果非常好:J(θ0,θ1)=12mi=1m(h(xi)yi)2J(θ_0,θ_1)=\frac{1}{2m}\sum_{i=1}^{m}{(h(x_i)-y_i)}^2

最合適的θ0θ_0 θ1θ_1,就是使代價函數J(θ0,θ1)J(θ_0,θ_1)值最小的參數。

分析一下這個函數:

  • h(xi)h(x_i):代表的是第i個預測結果。
  • yiy_i:代表的是第i個真實結果。
  • (h(xi)yi)2{(h(x_i)-y_i)}^2:代表的是真實值與預測值的差的平方,之所以求平方是不是爲了獲得正數??
  • 12m\frac{1}{2m}:m代表的是訓練樣本的數量,除以m可以理解,求平均值,除2m就不知道是爲啥了??

梯度下降

如何求得代價函數的最小值呢?

梯度下降是求解函數最小值的常用方法。梯度下降的步驟是:

  • 設置θ0θ1θ_0 θ_1爲某個值,比如0;
  • 同時改變θ0θ1θ_0 θ_1的值,使J(θ0,θ1)J(θ_0, θ_1)越好越小,直到接近局部最優。
  • 此時的θ0θ1θ_0 θ_1就是最優解。

用一個形象的方式來描述梯度下降算法,如下圖所示:
取自吳恩達教程

  • 這是一座小山,目的是從山頂快速下山。
  • 假設從點1開始下山,向周圍看看哪個方向是下山最快的方向,然後往前走一步,比如到了1.1.
  • 以1.1爲始重複上述的步驟,一步步往山下走,最終走到了山腳。
  • 而如果從點2開始下山的話,也會一步步走下山來,只不過終點可能是不一樣的。
  • 這正是梯度下降算法的一個特點:不同的起始點,可能到達不同的局部最優點。

梯度下降公式

下面給出梯度下降的公式:
取自吳恩達教程
推導過程就算了,沒這個本事,下面看看該公式各個部分的含義:

  • 目的:梯度下降的目的是求出最優點的θ0θ1θ_0 θ_1的取值。
  • 最外層的repeat代表這個公式需要不斷遞歸,直到達到最優點爲止。
  • for j=0 and j=1的意思是:因爲只有兩個θ\theta,分別是θ0,θ1\theta_0,\theta_1
  • := 這個符號是賦值的意思,即迭代更新θjθ_j的值。這個在java中是很常見的用法,例如 i=i+1i = i + 1
  • αα :學習速率,代表着梯度下降的步長,α越大,則下降的越快,否則下降的越慢。
    • 太大:造成無法收斂,過於發散的問題。
    • 太小:迭代過程及其緩慢。
  • σσθjJ(θ0,θ1)\frac{\sigma}{\sigma θ_j}{J(θ_0,θ_1)}:是導數,後面再詳細描述導數的含義。

梯度下降的計算方式,稱爲同步更新方式,即使用同樣的樣本、參數來計算θ0θ1θ_0 θ_1的值。計算過程是這樣的:
在這裏插入圖片描述
在計算θ1θ_1的時候,θ0θ_0依然是之前的θ0θ_0

導數的作用

吳恩達老師介紹的導數概念,非常簡單易懂:導數就是斜率。爲了容易理解,假設θ0=0θ_0=0,我們看看θ1θ_1的變化情況:
在這裏插入圖片描述
如上圖所示,沿着曲線畫一條切線出來,該切線隨着橫軸變大的趨勢,所以斜率是正值(=斜率角=\frac{垂直距離}{水平距離},如上圖所示該斜率角爲銳角,則斜率爲正),則θ1=θ1αθ_1=θ_1 - α *正數,則θ1θ_1變小,往函數的底部移動;

在這裏插入圖片描述
而如果起始點在局部最優點的左邊,切線不斷變小,斜率爲負數,則θ1=θ1αθ_1=θ_1 - α *負數,則θ1θ_1變大,往函數的底部移動;
斜率可以參考:斜率的計算公式

這兩種情況下,都能保證θ1θ_1向着局部最優點移動。當到達局部最優點時,斜率爲0,則θ1θ_1就不會再發生變化了。

通過梯度下降求解平方誤差函數

把平方誤差函數的公式帶入梯度下降算法中,梯度下降算法變成如下所示的公式:
repeat{
θ0=θ0α1mi=1m(hθ(xi)yi)θ_0=θ_0-α\frac{1}{m}\sum_{i=1}^m(h_θ(x_i)-y_i)
θ1=θ1α1mi=1m((hθ(xiyi)xiθ_1=θ_1-α\frac{1}{m}\sum_{i=1}^m((h_θ(x_i-y_i)*x_i
}

這個公式,恕我推導不出來。

多變量線性迴歸

多變量線性迴歸,指的是樣本特徵的數量大於1個的情況,現實世界中這種情況更通用。

符號表

  • x1,x2,......xnx_1, x_2, ......x_n:表示特徵。
  • y:預測結果。
  • m:樣本數量。
  • n:特徵數量
  • x(i)x^{(i)}:代表第i個樣本的特徵,是一個向量。
  • xj(i)x_j^{(i)}:代表第i個樣本的第j個特徵。

評估函數

多變量線性迴歸的評估函數是hθ(x)=θ0+θ1x1+θ2x2+θ3x3+......+θnxnh_θ(x)=θ_0+θ_1*x_1+θ_2*x_2+θ_3*x_3+......+θ_n*x_n
爲了表達方便,我們假設x0=1x_0=1,則評估函數就變成了hθ(x)=θ0x0+θ1x1+θ2x2+θ3x3+......+θnxnh_θ(x)=θ_0*x_0+θ_1*x_1+θ_2*x_2+θ_3*x_3+......+θ_n*x_n
下面對評估函數做一下簡化處理,

  • 假 設 θ=[θ0θ1θ2...θn]θ=\left[\begin{matrix}θ_0\\θ_1\\θ_2\\...\\θ_n\end{matrix}\right]
  • 假設X=[x0x1x2...xn]X=\left[\begin{matrix}x_0\\x_1\\x_2\\...\\x_n\end{matrix}\right]
  • θT=[θ0θ1θ2...θn]θ^T=\left[\begin{matrix}θ_0&θ_1&θ_2&...&θ_n\end{matrix}\right]
  • θTX=hθ(x)θ^T * X=h_θ(x),所以評估函數最終簡化爲hθ(x)=θTXh_θ(x)=θ^T*X

矩陣相乘的算法可以參考:機器學習之線性代數知識普及

梯度下降

多變量下梯度下降算法的公式變爲如下所示:
repeat{
θ0=θ0α1mi=1m(hθ(x(i))y(i))θ_0=θ_0-α\frac{1}{m}\sum_{i=1}^m(h_θ(x^{(i)})-y^{(i)})
θj=θjα1mi=1m((hθ(x(i))y(i))xj(i)θ_j=θ_j-α\frac{1}{m}\sum_{i=1}^m((h_θ(x^{(i)})-y^{(i)})*x^{(i)}_j
}
我們還是假設x0=1x_0=1,則x0i=1x_0^i = 1
所以梯度下降算法就可以簡化爲:
repeat{
θj=θjα1mi=1m((hθ(x(i))y(i))xj(i)θ_j=θ_j-α\frac{1}{m}\sum_{i=1}^m((h_θ(x^{(i)})-y^{(i)})*x^{(i)}_j
}

特徵收斂

如果特徵1的取值範圍是(0-1),特徵2的取值範圍是(0-1000),這樣的特徵在梯度下降算法中計算起來非常慢且有可能無法收斂,解決方法就是把各個特徵進行收斂,使它們的取值範圍接近。

發散的特徵指的是特徵值間的差距過大,比如1和1000差1000倍,0.001和1其實也差1000倍。

除以最大值

比如可以把特徵2的每個值都除以1000,這樣就能得到(0-1)的數字了。但是這種方法有可能造成特徵值太小,同樣不能滿足要求。

均值歸一

x=x=xμSx = \frac{x-平局值}{最大值-最小值}=\frac{x-\mu}{S}
其中μ\mu指的就是平均值;S指的是“最大值-最小值

特徵增減

有時候根據已有特徵生成新特徵,可以取得不俗的效果。
有時間把重複的特徵去掉,反而能得到更好的效果。

α選值

α沒有一個標準的值,太小的話計算效率慢;太大的話可能造成無法收斂,所以要不斷地去優化這個參數,吳老師給出了一個經驗值(0.001 0.003 0.01 0.03 0.1)。當收斂效果一致的情況下,選擇稍大一些的α值,提升計算效率。

正規方程

利用正規方程可以一步求解,而不需要一步步迭代,正規方程的表達式爲:θ=(XTX)1XTYθ=(X^T*X)^{-1}X^TY
下面對梯度下降和正規方程進行對比,看看兩者的優缺點各是什麼。

梯度下降 正規方程
α 需要計算合適的α值 不需要
計算速度 多次迭代,速度慢 直達目標,速度快
特徵數量 無限制 小於10000

適用場景

示例


import pandas as pd
from sklearn.linear_model import LinearRegression

# 特徵字段
features = ['accommodates', 'bedrooms', 'bathrooms', 'beds', 'price', 'minimum_nights', 'maximum_nights',
            'number_of_reviews']
# normalize:特徵是否做標準化處理,train_data['price']:是預測結果
reg = LinearRegression(normalize=True).fit(train_data[features], train_data['price'])
print("score", reg.score(test_data[columns], test_data['price']))

名詞解釋

高斯分佈

高斯分佈,也稱之爲正態分佈。滿足集中性、對稱性、均勻變動性等特點。

  • 集中性:正態曲線的高峯位於正中央,即均數所在的位置。
  • 對稱性:正態曲線以均數爲中心,左右對稱,曲線兩端永遠不與橫軸相交。
  • 均勻變動性:正態曲線由均數所在處開始,分別向左右兩側逐漸均勻下降。
    在這裏插入圖片描述

參考

線性迴歸詳解
線性迴歸原理推導與算法描述

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