【机器学习入门】(7) 线性回归算法:原理、公式推导、损失函数、似然函数、梯度下降
各位同學(xué)好,今天我和大家分享一下python機(jī)器學(xué)習(xí)中的線性回歸算法。內(nèi)容有:
(1) 線性回歸方程、(2) 損失函數(shù)推導(dǎo)、(3) 似然函數(shù)、(4) 三種梯度下降方法
1.?概念簡(jiǎn)述
????????線性回歸是通過(guò)一個(gè)或多個(gè)自變量與因變量之間進(jìn)行建模的回歸分析,其特點(diǎn)為一個(gè)或多個(gè)稱為回歸系數(shù)的模型參數(shù)的線性組合。如下圖所示,樣本點(diǎn)為歷史數(shù)據(jù),回歸曲線要能最貼切的模擬樣本點(diǎn)的趨勢(shì),將誤差降到最小。
2. 線性回歸方程
????????線形回歸方程,就是有 n 個(gè)特征,然后每個(gè)特征?Xi?都有相應(yīng)的系數(shù)?Wi?,并且在所有特征值為0的情況下,目標(biāo)值有一個(gè)默認(rèn)值?W0?,因此:
線性回歸方程為:
整合后的公式為:
3. 損失函數(shù)
????????損失函數(shù)是一個(gè)貫穿整個(gè)機(jī)器學(xué)習(xí)的一個(gè)重要概念,大部分機(jī)器學(xué)習(xí)算法都有誤差,我們需要通過(guò)顯性的公式來(lái)描述這個(gè)誤差,并將這個(gè)誤差優(yōu)化到最小值。假設(shè)現(xiàn)在真實(shí)的值為 y,預(yù)測(cè)的值為 h?。
損失函數(shù)公式為:
也就是所有誤差和的平方。損失函數(shù)值越小,說(shuō)明誤差越小,這個(gè)損失函數(shù)也稱最小二乘法。
4. 損失函數(shù)推導(dǎo)過(guò)程
4.1 公式轉(zhuǎn)換
首先我們有一個(gè)線性回歸方程:?
為了方便計(jì)算計(jì)算,我們將線性回歸方程轉(zhuǎn)換成兩個(gè)矩陣相乘的形式,將原式的??后面乘一個(gè)?
此時(shí)的 x0=1,因此將線性回歸方程轉(zhuǎn)變成?,其中??和??可以寫(xiě)成矩陣:
4.2 誤差公式
以上求得的只是一個(gè)預(yù)測(cè)的值,而不是真實(shí)的值,他們之間肯定會(huì)存在誤差,因此會(huì)有以下公式:
我們需要找出真實(shí)值??與預(yù)測(cè)值??之間的最小誤差??,使預(yù)測(cè)值和真實(shí)值的差距最小。將這個(gè)公式轉(zhuǎn)換成尋找不同的??使誤差達(dá)到最小。
4.3 轉(zhuǎn)化為??求解
由于??既存在正數(shù)也存在負(fù)數(shù),所以可以簡(jiǎn)單的把這個(gè)數(shù)據(jù)集,看作是一個(gè)服從均值??,方差為?的正態(tài)分布。
所以??出現(xiàn)的概率滿足概率密度函數(shù):
把??代入到以上的高斯分布函數(shù)(即正態(tài)分布)中,變成以下式子:?
到此,我們將對(duì)誤差??的求解轉(zhuǎn)換成對(duì)??的求解了。
在求解這個(gè)公式時(shí),我們要得到的是誤差??最小,也就是求概率??最大的。因?yàn)檎`差? 滿足正態(tài)分布,因此在正太曲線中央高峰部的概率??是最大的,此時(shí)標(biāo)準(zhǔn)差為0,誤差是最小的。
盡管在生活中標(biāo)準(zhǔn)差肯定是不為0的,沒(méi)關(guān)系,我們只需要去找到誤差值出現(xiàn)的概率最大的點(diǎn)。現(xiàn)在,問(wèn)題就變成了怎么去找誤差出現(xiàn)概率最大的點(diǎn),只要找到,那我們就能求出
4.4 似然函數(shù)求?
似然函數(shù)的主要作用是,在已經(jīng)知道變量?x?的情況下,調(diào)整?,使概率 y 的值最大。
似然函數(shù)理解:
以拋硬幣為例,正常情況硬幣出現(xiàn)正反面的概率都是0.5,假設(shè)你在不確定這枚硬幣的材質(zhì)、重量分布的情況下,需要判斷其是否真的是均勻分布。在這里我們假設(shè)這枚硬幣有??的概率會(huì)正面朝上,有??的概率會(huì)反面朝上。
為了獲得??的值,將硬幣拋10次,H為正面,T為反面,得到一個(gè)正反序列 x = HHTTHTHHHH,此次實(shí)驗(yàn)滿足二項(xiàng)分布,這個(gè)序列出現(xiàn)的概率為,我們根據(jù)一次簡(jiǎn)單的二項(xiàng)分布實(shí)驗(yàn),得到了一個(gè)關(guān)于??的函數(shù),這實(shí)際上是一個(gè)似然函數(shù),根據(jù)不同的??值繪制一條曲線,曲線就是的似然函數(shù),y軸是這一現(xiàn)象出現(xiàn)的概率。
從圖中可見(jiàn),當(dāng)??等于 0.7 時(shí),該序列出現(xiàn)的概率是最大的,因此我們確定該硬幣正面朝上的概率是0.7。
因此,回到正題,我們要求的是誤差出現(xiàn)概率??的最大值,那就做很多次實(shí)驗(yàn),對(duì)誤差出現(xiàn)概率累乘,得出似然函數(shù),帶入不同的??,看是多少時(shí),出現(xiàn)的概率是最大的,即可確定的值。
綜上,我們得出求??的似然函數(shù)為:
4.5 對(duì)數(shù)似然
由于上述的累乘的方法不太方便我們?nèi)デ蠼?,我們可以轉(zhuǎn)換成對(duì)數(shù)似然,將以上公式放到對(duì)數(shù)中,然后就可以轉(zhuǎn)換成一個(gè)加法運(yùn)算。取對(duì)數(shù)以后會(huì)改變結(jié)果值,但不會(huì)改變結(jié)果的大小順序。我們只關(guān)心等于什么的時(shí)候,似然函數(shù)有最大值,不用管最大值是多少,即,不是求極值而是求極值點(diǎn)。注:此處log的底數(shù)為e。
對(duì)數(shù)似然公式如下:
對(duì)以上公式化簡(jiǎn)得:
4.6 損失函數(shù)
我們需要把上面那個(gè)式子求得最大值,然后再獲取最大值時(shí)的??值。 而上式中??是一個(gè)常數(shù)項(xiàng),所以我們只需要把減號(hào)后面那個(gè)式子變得最小就可以了,而減號(hào)后面那個(gè)部分,可以把常數(shù)項(xiàng)??去掉,因此我們得到最終的損失函數(shù)如下,現(xiàn)在只需要求損失函數(shù)的最小值。
注:保留??是為了后期求偏導(dǎo)數(shù)。
損失函數(shù)越小,說(shuō)明預(yù)測(cè)值越接近真實(shí)值,這個(gè)損失函數(shù)也叫最小二乘法。
5. 梯度下降
損失函數(shù)中 xi 和 yi 都是給定的值,能調(diào)整的只有?,如果隨機(jī)的調(diào)整,數(shù)據(jù)量很大,會(huì)花費(fèi)很長(zhǎng)時(shí)間,每次調(diào)整都不清楚我調(diào)整的是高了還是低了。我們需要根據(jù)指定的路徑去調(diào)節(jié),每次調(diào)節(jié)一個(gè),范圍就減少一點(diǎn),有目標(biāo)有計(jì)劃去調(diào)節(jié)。梯度下降相當(dāng)于是去找到一條路徑,讓我們?nèi)フ{(diào)整。
梯度下降的通俗理解就是,把對(duì)以上損失函數(shù)最小值的求解,比喻成梯子,然后不斷地下降,直到找到最低的值。
5.1 批量梯度下降(BGD)
批量梯度下降,是在每次求解過(guò)程中,把所有數(shù)據(jù)都進(jìn)行考察,因此損失函數(shù)因該要在原來(lái)的損失函數(shù)的基礎(chǔ)之上加上一個(gè)m:數(shù)據(jù)量,來(lái)求平均值:
因?yàn)楝F(xiàn)在針對(duì)所有的數(shù)據(jù)做了一次損失函數(shù)的求解,比如我現(xiàn)在對(duì)100萬(wàn)條數(shù)據(jù)都做了損失函數(shù)的求解,數(shù)據(jù)量結(jié)果太大,除以數(shù)據(jù)量100萬(wàn),求損失函數(shù)的平均值。
然后,我們需要去求一個(gè)點(diǎn)的方向,也就是去求它的斜率。對(duì)這個(gè)點(diǎn)求導(dǎo)數(shù),就是它的斜率,因此我們只需要求出??的導(dǎo)數(shù),就知道它要往哪個(gè)方向下降了。它的方向先對(duì)所有分支方向求導(dǎo)再找出它們的合方向。
?的導(dǎo)數(shù)為:
由于導(dǎo)數(shù)的方向是上升的,現(xiàn)在我們需要梯度下降,因此在上式前面加一個(gè)負(fù)號(hào),就得到了下降方向,而下降是在當(dāng)前點(diǎn)的基礎(chǔ)上下降的。
批量梯度下降法下降后的點(diǎn)為:
新點(diǎn)是在原點(diǎn)的基礎(chǔ)上往下走一點(diǎn)點(diǎn),斜率表示梯度下降的方向, 表示要下降多少。由于不同點(diǎn)的斜率是不一樣的,以此循環(huán),找到最低點(diǎn)。
批量梯度下降的特點(diǎn):每次向下走一點(diǎn)點(diǎn)都需要將所有的點(diǎn)拿來(lái)運(yùn)算,如果數(shù)據(jù)量大非常耗時(shí)間。
5.2 隨機(jī)梯度下降(SGD)
隨機(jī)梯度下降是通過(guò)每個(gè)樣本來(lái)迭代更新一次。對(duì)比批量梯度下降,迭代一次需要用到所有的樣本,一次迭代不可能最優(yōu),如果迭代10次就需要遍歷整個(gè)樣本10次。SGD每次取一個(gè)點(diǎn)來(lái)計(jì)算下降方向。但是,隨機(jī)梯度下降的噪音比批量梯度下降要多,使得隨機(jī)梯度下降并不是每次迭代都向著整體最優(yōu)化方向。
隨機(jī)梯度下降法下降后的點(diǎn)為:
每次隨機(jī)一個(gè)點(diǎn)計(jì)算,不需要把所有點(diǎn)拿來(lái)求平均值,梯度下降路徑彎彎曲曲趨勢(shì)不太好。
5.3 mini-batch 小批量梯度下降(MBGO)
我們從上面兩個(gè)梯度下降方法中可以看出,他們各自有優(yōu)缺點(diǎn)。小批量梯度下降法在這兩種方法中取得了一個(gè)折衷,算法的訓(xùn)練過(guò)程比較快,而且也要保證最終參數(shù)訓(xùn)練的準(zhǔn)確率。
假設(shè)現(xiàn)在有10萬(wàn)條數(shù)據(jù),MBGO一次性拿幾百幾千條數(shù)據(jù)來(lái)計(jì)算,能保證大體方向上還是下降的。
小批量梯度下降法下降后的點(diǎn)為:
?用來(lái)表示學(xué)習(xí)速率,即每次下降多少。已經(jīng)求出斜率了,但是往下走多少合適呢,值需要去調(diào)節(jié),太大的話下降方向會(huì)偏離整體方向,太小會(huì)導(dǎo)致學(xué)習(xí)效率很慢。
總結(jié)
以上是生活随笔為你收集整理的【机器学习入门】(7) 线性回归算法:原理、公式推导、损失函数、似然函数、梯度下降的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【Pandas库】(6) 索引操作--改
- 下一篇: 【机器学习入门】(8) 线性回归算法:正