1.什麼是線性迴歸
線性迴歸,首先要介紹一下機器學習中的兩個常見的問題:迴歸任務和分類任務。那什麼是迴歸任務和分類任務呢?簡單的來說,在監督學習中(也就是有標籤的數據中),標籤值爲連續值時是迴歸任務,標誌值是離散值時是分類任務。
線性迴歸模型就是處理迴歸任務的最基礎的模型。 線性迴歸模型試圖學得一個線性模型以儘可能準確地預測實值X的輸出標記Y。在這個模型中,因變量Y是連續的,自變量X可以是連續或離散的。
首先來了解一些字母的含義:m-訓練集樣本的數量;x-輸入變量/特徵;y-輸出變量/要預測的目標變量;(x,y)-表示一個訓練樣本;(,)中i上標:表示第i個訓練樣本,即表示表格中的第i行; 、 、…表示特徵向量,n表示特徵向量的個數; (x)稱爲假設函數,h是一個引導從x得到y的函數;
舉個簡單的例子:
輸入數據:工資()和房屋面積()(兩個特徵)
輸出目標:預測銀行會貸款多少錢(標籤)
姓名 | 工資 | 房屋面積 | 可貸款金額 |
---|---|---|---|
張三 | 6000 | 58 | 33433 |
李四 | 9000 | 77 | 55833 |
王五 | 11000 | 89 | 72399 |
趙六 | 15000 | 54 | 62392 |
這個表格表示的是可貸款的金額與工資和房屋面積之間的關係,其中工資和房屋面積爲特徵,可貸款金額爲目標函數值 (x)。表示工資的參數,表示房屋面積的參數。
那麼根據線性函數可得到以下公式:
上面的這個式子是當一個模型只有兩個特徵(x1,x2)的時候的線性迴歸式子。正常情況下,現金貸中可貸款的額度和用戶的很多特徵相關聯,並不只是簡單的這兩個特徵。所以我們需要把這個式子進行通用化,假如有n個特徵的話,那麼式子就會變成下面的樣子:
和兩個參數取值不同導致假設函數 (x)不同,此時我們要找出最優的和,使得模型效果最好。
2.誤差
圖中的橫座標X1 和 X2 分別代表着 兩個特徵(工資、房屋平米) 。縱座標Y代表目標(可貸款的額度)。其中紅點代表的就是實際的目標值(每個人可貸款的額度)。而平面上和紅點豎向相交的點代表着我們根據線性迴歸模型得到的點。也就是說實際得到的錢和預估的錢之間是有一定誤差的,這個就是誤差項。
因爲誤差項是真實值和誤差值之間的一個差距(用 來表示誤差),表示真實值。那麼肯定我們希望誤差項越小越好:
假設認爲這個誤差項是滿足以下幾個條件的:誤差,是獨立的並且具有相同的分佈,並且服從均值爲0方差爲的高斯分佈。
1.獨立:張三和李四一起使用這款產品,可貸款額互不影響
2.同分布:張三和李四是使用的是同一款產品
3.高斯分佈:絕大多數的情況下,在一個的空間內浮動不大
下面是高斯分佈的圖
數學知識:高斯分佈(正態分佈)的概率密度函數爲:
誤差服從高斯分佈
誤差項肯定是越小越好了,那麼接下來要討論的就是什麼樣的參數和特徵的組合能夠讓誤差項最小呢? 這裏就引入了似然函數的作用。似然函數的作用就是要根據樣本來求什麼樣的參數和特徵的組成能夠最接近真實值。越接近真實值則誤差越小。似然函數就是求能讓真實值和預測值相等的那個參數的。表示儀表各數相乘的結果。
上面的式子是多個參數的乘積的形式,很難進行計算,所以我們又採用了對數的一個小技巧,把多個數相乘,轉化成多個數相加的形式。
根據上面的這種換算關係,我們就把似然函數的式子換算成下面的這個。
(因爲似然函數是越大越好,似然函數的值和對數似然函數的值是成正比的,對值求對數,並不會影響到最後求極限的值。所以纔敢進行對數處理。)
爲了使似然函數(對數似然函數)越大越好,則需要使越小越好。
這裏定義線性迴歸的代價函數:
通過上面一系列推導,代價函數爲最小二乘模型。
這就是在線性迴歸中使用似然函數的相關知識。
3.求解最小二乘法:
我們要求得就是當θ取某個值時使代價函數J(θ)最小,求解最小二乘法的方法一般有兩種方法:矩陣式和梯度下降法。
3.1矩陣式求解:
對求偏導:–凸函數(凸優化),偏導等於0
在求之前,先轉換成矩陣式,如下:
把這個式子求一下偏導如下:
上面的公式裏面還涉及到矩陣轉置的性質。根據矩陣求導的三個重要公式:
另導數等於0:
因爲爲方陣,如果是可逆的,則參數θ得解析式可以寫成:
特徵方程法得到的是解析解,無需迭代,也沒有設置學習速率的繁瑣,但是求解正規方程需要求矩陣的逆,然而不是所有的矩陣都可逆,而且有些可逆矩陣的求逆極其耗費時間,所以特徵方程法看似簡單,其實使用場景並不多。只有當特徵值比較小的時候,可以考慮矩陣式求法。
不可逆,可能有兩個原因:
1.列向量線性相關,即訓練集中存在冗餘特徵,此時應該剔除掉多餘特徵;
2.特徵過多,此時應該去掉影響較小的特徵,或使用“正則化”。
當樣本總數 m 小於等於特徵數量 n 時, 一定不可逆。
3.2梯度下降法(GD):
我先舉個例子簡單的介紹一下什麼是梯度下降法
如上圖所示,想象一下你正站立在山的這一點上,站立在你想象的公園這座紅色山上,在梯度下降算法中,我們要做的就是旋轉360度,看看我們的周圍,並問自己要在某個方向上,用小碎步儘快下山。這些小碎步需要朝什麼方向?如果我們站在山坡上的這一點,你看一下週圍,你會發現最佳的下山方向,你再看看周圍,然後再一次想想,我應該從什麼方向邁着小碎步下山?然後你按照自己的判斷又邁出一步,重複上面的步驟,從這個新的點,你環顧四周,並決定從什麼方向將會最快下山,然後又邁進了一小步,並依此類推,直到你接近局部最低點的位置。
如何找到最低點對應的?
其實就是代價函數J(θ)對該參數求導的結果 。已知代價函數J(θ)爲:
求偏導數:
上面的推導中1/2和2互消了,所以給了我們一個更加直觀簡潔的結果,這就是爲什麼代價函數公式要乘以一個1/2.
需要注意的是,上面的公式中,我們採用了一個更加通用的(考慮了多個自變量的情況)表示模型h的方式:
這裏乘以一個常數1,也可以認爲乘以了常量
所以代價函數對 求偏導的結果就是:
所以代價函數對 求偏導的結果就是:
求得的結果怎麼使用?
注意,對求偏導數的意義是得到這一點上的切線的斜率,它將給我們一個向最小值移動的方向。
因此,減去偏導數就等於向最小值的方向移動了一步。這一步的大小由一個參數決定,也稱作學習率(代表下降幅度,步長,小會導致收斂慢,大會導致錯過最優點。它決定了我們沿着能讓代價函數下降程度最大的方向向下邁出的步子有多大。)。用公式表達如下:
因爲θ中有多個參數,所以每次迭代對於每個參數都需要進行梯度下降,直到J(θ)收斂到最小值。
4.數據歸一化
4.1特徵縮放:
在我們面對多維特徵問題的時候,我們要保證這些特徵都具有相近的尺度,這將幫助梯度下降算法更快地收斂。
以房價問題爲例,假設我們使用兩個特徵,房屋的尺寸和房間的數量,尺寸的值爲 0-2000平方英尺,而房間數量的值則是0-5,以兩個參數分別爲橫縱座標,繪製代價函數的等高線圖能,看出圖像會顯得很扁,梯度下降算法需要非常多次的迭代才能收斂。
解決的方法是嘗試將所有特徵的尺度都儘量縮放到-1到1之間。如圖
特徵縮放就是將特徵除以最大值。
4.2均值歸一化:
均值歸一化的方法就是令:,其中是平均值,是標準差.
具體做法就是:如果你有一個特徵xi你就用xi−μi來替換。這樣做的目的是爲了讓你的特徵值具有爲0的平均值。很明顯 我們不需要把這一步應用到x0中,因爲x0中,因爲x0總是等於1的,所以它不可能有爲0的的平均值。
但是對其他的特徵來說,比如房子的大小取值介於0 ~ 2000,並且假如房子面積的平均值是等於1000的,那麼你可以用這個公式:
x1=(size−1000)/2000
類似地,如果你的房子有五間臥室,並且平均一套房子有兩間臥室,那麼你可以使用這個公式來歸一化你的第二個特徵x2:
x2=(臥室數−2)/5
在這兩種情況下你可以算出新的特徵x1和x2x1和x2,它們的範圍可以在-0.5 ~ +0.5之間,當然這肯定不對,x2的值實際上肯定會大於0.5。更一般的規律是用: (xn−μn)/Sn來替換xn
其中定義μn的意思是在訓練集中特徵xn的平均值。而Sn是該特徵值的範圍(最大值減去最小值)。
最後需要注意的是:特徵縮放其實並不需要太精確,其目的只是爲了讓梯度下降能夠運行得更快一點,讓梯度下降收斂所需的循環次數更少一些而已。
5.梯度下降法的三種方式
第一種方式就是全量梯度下降,也就是說每一次梯度下降都利用全部的數據。這種方法簡稱爲BGD(Batch Gradient Descent)。該算法的缺點是當數據量m較大時,速度很慢。
第二種方式是隨機梯度下降,即隨機梯度下降(Stochastic Gradient Descent),簡稱SGD。這種方法的意思是 ,每次梯度下降的過程使用一個隨機的樣本,但是該方法有一個問題,就是每次選取的學習率如果太小則速度很慢,太大怎麼無法得到全局最優解,解決該問題的方法就是靈活設置學習率,讓學習率一開始比較大,隨後逐漸減小,這種方法也稱作模擬退火(simulated annealing)。
第三種方法介於上面兩種方法之間,即mini-batch Gradient Descent,簡稱mini-batch GD,該方法是每次梯度下降過程使用一個比較小的隨機數據集。該方法的好處是能夠利用計算機對於矩陣求解的性能優化,進而加快計算效率。
6.我們通過一個例子來解決線性迴歸問題:
1.初始化一個模型,例如 h = 2 + 3x,也就是說,我們的初始參數是,
2.給定一個樣本對,例如(2,4),代入模型中求得預測值,即 h = 2 + 3*2 = 8
3.代入代價函數公式中,求代價值,即 J = 1/2 * (8-4) ^ 2 = 8
4.代入偏導數公式中求 和 的偏導數,即
5.
6.假設我們的學習率是0.1,那麼代入梯度下降公式得到
7.
8.我們得到了新的參數,即 ,所以新的模型是:h = 1.6 + 2.2x,新的預測值是h = 1.6 + 2.2*2 = 6,再次計算代價函數的值:J = 1/2 * (6-4) ^ 2 = 2
9.比較新的模型得到的代價值2,比老模型得到的代價值8減少了6,代價越小說明我們的模型與訓練集匹配的越好,所以通過不斷的梯度下降(也就是最小二乘法),我們可以得到最適合訓練數據的模型h。