第2、5章 線性迴歸
概述
線性迴歸問題,是用來解決迴歸問題的最簡單的算法。
線性迴歸(Linear Regression)是一種通過屬性的線性組合來進行預測的線性模型,其目的是找到一條直線或者一個平面或者更高維的超平面,使得預測值與真實值之間的誤差最小化。
如果特徵只有一個,則稱之爲“一元線性分析”;如果特徵有多個,則稱之爲“多元線性分析”。
基本原理
一元線性函數可以表達爲:,多元線性函數可以表達爲,我們把這個函數作爲線性迴歸的“評估函數”。
其中稱之爲“參數”,我們的目的就是找到最合適的,使真實值和預測值之間的差異足夠小。
一般採用梯度下降、最小二乘法去計算該參數。
代價函數
代價函數就是爲了獲得最合適的 而使用的函數。
平方誤差函數
平方誤差函數是最常用的代價函數,尤其在迴歸場景下的效果非常好:
最合適的 ,就是使代價函數值最小的參數。
分析一下這個函數:
- :代表的是第i個預測結果。
- :代表的是第i個真實結果。
- :代表的是真實值與預測值的差的平方,之所以求平方是不是爲了獲得正數??
- :m代表的是訓練樣本的數量,除以m可以理解,求平均值,除2m就不知道是爲啥了??
梯度下降
如何求得代價函數的最小值呢?
梯度下降是求解函數最小值的常用方法。梯度下降的步驟是:
- 設置爲某個值,比如0;
- 同時改變的值,使越好越小,直到接近局部最優。
- 此時的就是最優解。
用一個形象的方式來描述梯度下降算法,如下圖所示:
- 這是一座小山,目的是從山頂快速下山。
- 假設從點1開始下山,向周圍看看哪個方向是下山最快的方向,然後往前走一步,比如到了1.1.
- 以1.1爲始重複上述的步驟,一步步往山下走,最終走到了山腳。
- 而如果從點2開始下山的話,也會一步步走下山來,只不過終點可能是不一樣的。
- 這正是梯度下降算法的一個特點:不同的起始點,可能到達不同的局部最優點。
梯度下降公式
下面給出梯度下降的公式:
推導過程就算了,沒這個本事,下面看看該公式各個部分的含義:
- 目的:梯度下降的目的是求出最優點的的取值。
- 最外層的repeat代表這個公式需要不斷遞歸,直到達到最優點爲止。
- for j=0 and j=1的意思是:因爲只有兩個,分別是。
- := 這個符號是賦值的意思,即迭代更新的值。這個在java中是很常見的用法,例如 。
- :學習速率,代表着梯度下降的步長,α越大,則下降的越快,否則下降的越慢。
- 太大:造成無法收斂,過於發散的問題。
- 太小:迭代過程及其緩慢。
- :是導數,後面再詳細描述導數的含義。
梯度下降的計算方式,稱爲同步更新方式,即使用同樣的樣本、參數來計算的值。計算過程是這樣的:
在計算的時候,依然是之前的。
導數的作用
吳恩達老師介紹的導數概念,非常簡單易懂:導數就是斜率。爲了容易理解,假設,我們看看的變化情況:
如上圖所示,沿着曲線畫一條切線出來,該切線隨着橫軸變大的趨勢,所以斜率是正值(,如上圖所示該斜率角爲銳角,則斜率爲正),則,則變小,往函數的底部移動;
而如果起始點在局部最優點的左邊,切線不斷變小,斜率爲負數,則,則變大,往函數的底部移動;
斜率可以參考:斜率的計算公式
這兩種情況下,都能保證向着局部最優點移動。當到達局部最優點時,斜率爲0,則就不會再發生變化了。
通過梯度下降求解平方誤差函數
把平方誤差函數的公式帶入梯度下降算法中,梯度下降算法變成如下所示的公式:
repeat{
}
這個公式,恕我推導不出來。
多變量線性迴歸
多變量線性迴歸,指的是樣本特徵的數量大於1個的情況,現實世界中這種情況更通用。
符號表
- :表示特徵。
- y:預測結果。
- m:樣本數量。
- n:特徵數量
- :代表第i個樣本的特徵,是一個向量。
- :代表第i個樣本的第j個特徵。
評估函數
多變量線性迴歸的評估函數是
爲了表達方便,我們假設,則評估函數就變成了。
下面對評估函數做一下簡化處理,
- 假 設
- 假設
- 則
- 則,所以評估函數最終簡化爲。
矩陣相乘的算法可以參考:機器學習之線性代數知識普及
梯度下降
多變量下梯度下降算法的公式變爲如下所示:
repeat{
}
我們還是假設,則
所以梯度下降算法就可以簡化爲:
repeat{
}
特徵收斂
如果特徵1的取值範圍是(0-1),特徵2的取值範圍是(0-1000),這樣的特徵在梯度下降算法中計算起來非常慢且有可能無法收斂,解決方法就是把各個特徵進行收斂,使它們的取值範圍接近。
發散的特徵指的是特徵值間的差距過大,比如1和1000差1000倍,0.001和1其實也差1000倍。
除以最大值
比如可以把特徵2的每個值都除以1000,這樣就能得到(0-1)的數字了。但是這種方法有可能造成特徵值太小,同樣不能滿足要求。
均值歸一
其中指的就是平均值;S指的是“”
特徵增減
有時候根據已有特徵生成新特徵,可以取得不俗的效果。
有時間把重複的特徵去掉,反而能得到更好的效果。
α選值
α沒有一個標準的值,太小的話計算效率慢;太大的話可能造成無法收斂,所以要不斷地去優化這個參數,吳老師給出了一個經驗值(0.001 0.003 0.01 0.03 0.1)。當收斂效果一致的情況下,選擇稍大一些的α值,提升計算效率。
正規方程
利用正規方程可以一步求解,而不需要一步步迭代,正規方程的表達式爲:。
下面對梯度下降和正規方程進行對比,看看兩者的優缺點各是什麼。
梯度下降 | 正規方程 | |
---|---|---|
α | 需要計算合適的α值 | 不需要 |
計算速度 | 多次迭代,速度慢 | 直達目標,速度快 |
特徵數量 | 無限制 | 小於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']))
名詞解釋
高斯分佈
高斯分佈,也稱之爲正態分佈。滿足集中性、對稱性、均勻變動性等特點。
- 集中性:正態曲線的高峯位於正中央,即均數所在的位置。
- 對稱性:正態曲線以均數爲中心,左右對稱,曲線兩端永遠不與橫軸相交。
- 均勻變動性:正態曲線由均數所在處開始,分別向左右兩側逐漸均勻下降。