線性迴歸, 是迴歸分析中的一種, 其表示自變量與因變量之間存在線性關係. 迴歸分析是從數據出發, 考察變量之間的數量關係, 並經過必定的數學關係式將這種關係描述出來, 再經過關係式來估計某個變量的取值, 同時給出該估計的可靠程度. 下面咱們從一元線性迴歸開始提及.算法
在迴歸分析中若是隻涉及一個自變量(用來預測的變量)和一個因變量(要預測的變量), 這時就稱爲一元迴歸, 若是自變量與因變量之間存在線性關係, 那麼此時的迴歸就稱爲一元線性迴歸.函數
假設自變量x和因變量y存在線性關係, 那麼x和y的線性關係函數能夠表示爲:學習
因爲該函數是假設x和y存在線性關係, 所以該函數能夠稱爲假設函數. 咱們把描述因變量y和自變量x關係的函數稱爲迴歸模型, 故該函數又稱一元線性迴歸模型.其中和
稱爲模型參數, 不一樣的參數將會構造不一樣的模型, 所以構建模型的關鍵之處在於選擇參數, 怎麼樣才能算好的參數呢?優化
因爲咱們構建模型的最終目的是用來預測, 所以好參數構建的模型應該具有很好的預測能力, 也就是說預測值和實際值差別很小, 咱們把預測值h(x)與實際值y之間的差別稱爲偏差. 對於某個值來講偏差就是h(xi)-yi, 對於整個模型來講, 則是對全部偏差進行求和, 但因爲偏差中有正負之分, 所以會產生偏差相互抵消, 爲了不存在這種抵消問題, 對偏差進行平方求和, 再對其求平均, 故有平均偏差平方和, 其表示爲spa
其中, m是樣本量. h(x(i))表示第i個預測值, 與之對應的實際值則是y(i).3d
這種偏差能夠認爲是實際值或者指望值的損失, 故該偏差函數能夠稱爲損失函數(有時也稱爲代價函數). 咱們能夠根據損失函數數值最小來選出最優模型(很好的預測能力).blog
這裏我將介紹兩種基於損失函數最小的算法: 梯度降低法和最小二乘法.同步
什麼是梯度? 引出百度百科定義:效率
梯度的本意是一個向量(矢量),表示某一函數在該點處的方向導數沿着該方向取得最大值,即函數在該點處沿着該方向(此梯度的方向)變化最快,變化率最大(爲該梯度的模)。
在單個自變量函數曲線中, 梯度也就是曲線上某點處的斜率, 而對於咱們的損失函數來講, 其有兩個自變量和
, 故這兩個自變量與損失函數
將構成三維曲面.
能夠將這三維曲面想象成一座山, 咱們如今的目標是山底, 咱們要想最快下山, 就須要走最陡峭的方向, 而最陡峭的方向能夠當作是當前方向(下山方向)中變化最大的反方向. (其中, 變化最大的方向是指從下山改成上山, 與目標不符, 故取其反方向, 即最大的反方向).
梯度降低法與下山過程相似, 咱們的目標是求出使得損失函數數值最小的最優解. 具體過程就是給定一個初始位置, 沿着梯度的反方向(也就是負的梯度)走一個步長的距離, 更新當前位置
, 如此反覆, 直至找到使得損失函數最小的最優解
, 能夠表示爲:
其中, 爲學習效率, 也稱爲步長, 等號右邊的
爲每次更新以前的模型參數(j=0,1), 即每走負梯度個步長, 更新一次
和
, 並且這二者是同步更新. 具體的求解過程以下:
首先是微分的求解, 該部分須要鏈式法則, 公式爲
因爲在實際中, 每每很難直接求解z對x的微分, 但引入y這個"中介"就能夠將問題轉化爲求z對y的微分和y對x的微分, 這就至關於分數約分的一個過程.
從計算過程當中能夠看出, 該算法在選擇負的梯度方向時考慮到所有訓練數據, 故該算法又稱爲批量(Batch)梯度降低法. 經過以上原理也可得知, 該算法是一個迭代求最優解的過程, 下面咱們介紹一種能夠直接一步到位的算法.
2. 最小二乘法
最小二乘法又稱最小平方法, 即平均偏差平方和最小, 也就是咱們的損失函數數值最小. 引出百度百科費馬引理定義:
函數f(x)在點ξ的某鄰域U(ξ)內有定義,而且在ξ處可導,若是對於任意的x∈U(ξ),都有f(x)≤f(ξ) (或f(x)≥f(ξ) ),那麼f '(ξ)=0。
簡單來講就是可導函數極值點處導數爲0, 故分別對和
求偏導, 並令其爲0, 即:
由①式可得: , 故
, 代入②式中, 可得:
又因爲和
, 故有:
咱們如今對一元線性迴歸介紹完了, 接下來看看多元線性迴歸.
多元線性迴歸與一元線性迴歸的區別在於自變量的個數, 一元是一個, 多元則是多個.
假設多元線性迴歸中有多個自變量(x0, x1, x2,...xn), 那麼多元線性迴歸模型的假設函數能夠寫成:
爲了簡化, 咱們能夠將假設函數寫成矩陣的形式:
其中, x0=1
對應的其損失函數表示爲(m表示樣本量):
下面即是介紹求解最小損失函數的算法.
一樣介紹兩種算法: 梯度降低法和最小二乘法.
1. 梯度降低法
與一元的方法相似, 不過這裏須要注意的是對n個自變量進行同步更新.即:
2. 最小二乘法
咱們能夠將損失函數轉換爲矩陣的形式:
一樣地, 令對
的偏導爲0, 對於矩陣的運算須要用到如下公式:
而後套用公式:
經過以上咱們對一元和多元迴歸的模型以及算法均有所瞭解, 下面咱們來看看這兩大算法的優缺點.
優勢
1. 在特徵變量不少時, 可以頗有效的運行
缺點
1. 容易依賴於步長和起始位置的選擇, 所以須要屢次嘗試尋找合適的步長和起始位置.
2. 因爲在每次更新當前位置須要計算所有訓練數據, 所以其迭代速度過慢.
優勢
1. 直接應用公式計算便可, 學習效率高
缺點
1. 訓練數據擬合的函數非線性的話, 則不能使用最小二乘法.
2. 須要計算的逆矩陣, 若是逆矩陣不存在, 則無法應用最小二乘法.
3. 當的樣本特徵n很大時, 計算
的逆矩陣將會很是耗時, 或者說無法計算.
上面咱們介紹的梯度降低法是指批量梯度降低法, 即:
在批量梯度降低法中, 每次計算過程都考慮所有數據, 容易找到全局最優, 但數據量較大時將會很是耗費時間, 所以誕生了隨機梯度降低法
隨機梯度降低法則是每次隨機抽取一個樣本進行計算, 能夠大大提升學習效率, 但因爲其具備隨機性且僅有一個樣本, 所以每每會致使不是最優解, 鑑於此, 產生了第三種方法: 小批量梯度降低法
這是綜合前兩種方法產生的, 選取其中a個樣本進行求解.
若擬合函數非線性, 經常經過對數轉換等方法將其轉換爲線性, 並且特徵數量較少時直接運用公式進行計算便可.
當訓練數據特徵數量較少時, 且擬合函數爲線性, 則能夠直接採用最小二乘法, 若是擬合函數非線性, 能夠先對其進行對數轉換再運用最小二乘法;
當訓練數據特徵數量較多時, 因爲其對擬合函數無要求, 若數據量不大, 則可選用批量梯度降低, 若數據量很大, 則能夠選用小批量梯度降低.