Machine Learning-線性迴歸算法分析

AI人工智能時代,機器學習,深度學習作爲其核心,本文主要介紹機器學習的基礎算法,以詳細線介紹

線性迴歸算法

及其

數學原理

探究,做到知其然知其所以然,打好理論基礎。

目錄

機器學習及人工智能

機器學習分類

有監督學習

無監督學習

線性迴歸算法

線性迴歸

代價函數

數學模型

最小二乘法

算法介紹

數學原理

高斯分佈

算法侷限性

梯度下降算法

方向導數

梯度

數學原理

單元算法實現

多元算法實現

矩陣跡算法

隨機梯度下降算法

高斯-牛頓法

泰勒級數展開

Hesse矩陣

數學原理

算法侷限性

總結

1機器學習及人工智能

開門見山,上圖簡單而直觀的表明了人工智能,機器學習,深度學習的關係及區別,人工智能範疇最廣,機器學習,深度學習逐步縮小;其實機器學習與深度學習可以看作人工智能的內部模型提煉過程,人工智能則是對外部的智能反應。

人工智能

人工智能(Artificial Intelligence),學術定義爲用於研究,模擬及擴展人的智能應用科學;AI在計算機領域研究涉及機器人,語言識別,圖像識別,自然語言處理等。AI的研究會橫跨多門學科,如計算機,數學,生物,語言,聲音,視覺甚至心理學和哲學。

其中AI的核心是做到感知,推斷,行動及根據經驗值進行調整,即類似人類的智慧體智能學習提升。

深度學習

深度學習則泛指深度神經網絡學習,如卷積神經網絡(Convolutional Neural Nets,CNN),把普通神經網絡從3-4層昇華到8-10層從而獲取更精準模型,其應用如圖像視頻識別等。

人工智能,神經網絡並非什麼新鮮事物,早在20-30年前就已經誕生,而深度學習則藉助因互聯網而誕生的大數據,及近些年發展的強大運算能力(圖形處理GPU)而大放光彩,甚至推動引爆了新一代的人工智能。

機器學習

機器學習的學究的定義爲“計算機程序如何隨着經驗積累自動提高性能”,經典英文定義爲

“A computer program is said to learn from experience E with respect to some class of tasks T and performance measure P, if its performance at tasks in T, as measured by P, improves with experience E.”,即“對於某類任務T和性能度量P,如果一個計算機程序在T上以P衡量的性能隨着經驗E而自我完善,那麼我們稱這個計算機程序在從經驗E學習”, 通俗點說既是讓機器來模擬人類來學習新的知識與技能,重點是不是通過某精妙算法而達成,而是讓程序去通過學習發現提高,舉一反三, 正所謂授之以魚不如授之以漁。

機器學習分類

機器學習在學習的方法廣義上分爲有監督學習與無監督學習。

有監督學習(Supervised Learning)

監督學習,通常對具有標記分類的訓練樣本特徵進行學習,標記即已經知道其對應正確分類答案;而學習則本質是找到特徵與標籤(正確答案)之間的關係(函數),從而當訓練結束,輸入無標籤的數據時,可以利用已經找出的關係方法進行分析得出數據標籤。

監督學習類似我們在學校的學習,通常的題目都會有“正確答案”,以便於我們每學期學習結束(訓練),參加未知的考試作爲檢驗。

上圖爲監督學習的模型及流程:

獲取數據並確定所處理數據類型

確定並提取訓練數據集的特徵(feature)

選擇機器學習方法如向量機或決策樹

獲取最終機器模型

對機器學習模型進行評估

監督學習方法及用途

常用的監督機器學習方法有如人工神經網絡,決策樹,傳統貝葉斯分類器,支撐向量機(SVM)等。

監督學習的主要用途通常用來進行樣本分類與迴歸(找到最爲接近的函數用於預測),而又根據其輸出結果連續還是離散分爲迴歸分析(Regression)與分類(Classification)。

無監督學習(Unsupervised Learning)

反之,無監督學習則通常學習數據只有特徵向量,沒有標籤(答案),學習模型通過學習特徵向量發現其內部規律與性質,從而把數據分組聚類(Clustering)。

無監督學習更類似我們的真實世界,去探索發現一些規律及分類。

舉個例子,如果把監督學習看作未成年時在家長及老師的“監督”下做告知正確的事,則無監督學習就是成年後踏入社會,自己去探索,發現,適應社會了。

無監督學習方法及用途

常用的無監督學習方法有: K-Means, 層次化聚類(Hierarchical Clustering),社交網絡分析,一些數據挖掘算法等。

無監督學習的用途則主要用來在未知(無標籤)數據中發現相似或者隱藏結構並進行聚類(Clustering),或者發現數據對應輸入空間的分佈之密度估計等。

當然對於數據樣本介於無標記及部分標記之間,這種機器學習則被稱爲半監督學習(semi-supervised learning),我們暫不介紹。

3線性迴歸算法

上文提到了一些常用的機器學習算法,我們來看一下學習算法的概覽分類圖:

總體來說,機器學習中的迴歸算法的本質是通過對樣本數據的收集,給出假設的函數模型,而此函數包含未知參數,機器學習的過程就是解方程或者找到最優解,當驗證通過後,從而可以用該函數去預測測試新數據。

線性迴歸

迴歸,統計學術語,表示變量之間的某種數量依存關係,並由此引出迴歸方程,迴歸係數。

線性迴歸(Linear Regression),數理統計中迴歸分析,用來確定兩種或兩種以上變量間相互依賴的定量關係的一種統計分析方法,其表達形式爲y = w'x+e,e爲誤差服從均值爲0的正態分佈,其中只有一個自變量的情況稱爲簡單迴歸,多個自變量的情況叫多元迴歸。

👀注意,統計學中的迴歸並如線性迴歸非與嚴格直線函數完全能擬合,所以我們統計中稱之爲迴歸用以與其直線函數區別。

舉個Andrew Ng機器學習講義中美國俄亥俄州Portland Oregon城市房屋價格爲例:

這個例子中近簡化使用房屋面積一個因子作爲自變量,y軸對應其因變量房屋價格。所以我們機器學習的線性迴歸就變爲對於給定有限的數據集,進行一元線性迴歸,即找到一個一次函數y=y(x) + e,使得y滿足

當x={2104, 1600, 2400, 1416, 3000, ... }, y={400, 330, 369, 232, 540, ... } 如下圖所示:

對於線性方程的求解,是屬於線性代數的範疇。

首先要判斷是否有解及是否有唯一解;其次具體求解方法則有矩陣消元法,克萊姆法則,逆矩陣及增廣矩陣法等等。

對於大多數給定數據集,線性方程有唯一解的概率比較小,多數都是解不存在的超定方程組

對於這種問題,在計算數學中通常將參數求解問題退化爲求最小誤差問題,找到一個最接近的解,即術語鬆弛求解

回到上述Ng的房價問題,我們先簡化給出假設函數(Hypothesis Function)即我們目標的近似函數或者需要擬合的直線記爲:

其中

爲我們需要求的參數,而參數的改變將會導致假設函數的變化,如:

在求解上述參數之前,我們有必要找到一種方法來衡量我們找到的函數是否爲最優解,即代價函數。

代價函數(Cost Function)

對於迴歸問題,常用的用於衡量最優解的代價函數爲平方誤差。

平方誤差的思想就是將實際樣本數據值與我們擬合出的線做對應差值,即計算差距。

而爲了減少由於極端數據的影響而造成的巨大波動,通常採用類似方差來減少個別數據影響,至於選擇平方和作爲估計函數,則需從概率分佈角度瞭解其公式來源(統計學中,殘差平方和函數可以看成n倍的均方誤差),除以m則計算平均值,係數1/2則是純數學簡化(最小值的1/2仍然是最小值,不改變整體性質),其目的是當求導後相乘則消去係數,由此導出以下代價函數:

有了代價函數,從數學上來看,我們求解最優解的問題繼而轉而變成如何求函數的最小值:

即cost函數J是基於theta的函數,用來檢測我們的theta參數從而得到我們的假設函數。

最小值

簡化令之只有theta-1

上圖是當對假設函數進行簡化,使得theta-0 = 0,即只有一個參數theta-1,並假設給定樣本數據爲y ={(1,1), (2,2),(3,3)}; 當我們不斷嘗試給定theta-1,如0,0.5, 1時也得到J={(0, 2.3),(0.5, 0.58),(1,0)} 等等數據,其連線圖形爲右邊的圖形,可以看到對於當前案例,圖形其J代價當theta = 1時有極小值

其實大家可以看出,從數學角度,上述簡化後的代價函數爲一元二次方程,其在theta=1可導,並且導數爲0,並且在theta=1處二階可導,二階導數大於0,所以在theta=1處取得極小值。

其數學原理見如下定理:

theta-0,theta-1

我們可以採用上述一個theta-1的方法對其代價函數求導得出其極值。

將 J(θ1,θ0) 分別對 θ1 和 θ0 求導,得

我們令上式等於零,從而可以得到θ1 和 θ0 的閉式closed-form(解析解,顯性表達式;顯式解)解:

其中,

是x的均值。

實際上,對於兩個參數θ1,θ0的代價函數,其圖形J(θ1,θ0) 爲一個曲面:

而我們上述求導過程,即試圖找到曲面的最低點。

最小二乘法

最小二乘法

上述代價函數中使用的均方誤差,其實對應了我們常用的歐幾里得的距離(歐式距離,Euclidean Distance), 基於均方誤差最小化進行模型求解的方法稱爲“最小二乘法”(least square method),即通過最小化誤差的平方和尋找數據的最佳函數匹配;

當函數子變量爲一維時,最小二乘法就蛻變成尋找一條直線;

推廣到n個變量(n維),Hypothesis Function爲:

其對應均方誤差表示爲如下矩陣:

之中:

對 θ 求導得:

即結果爲:

根據微積分定理,令上式等於零,可以得到 θ 最優的閉式解。當

爲滿秩矩陣或正定矩陣時,可解得

上式對於矩陣的求導,我們可以用以下圖表簡單展示:

數學原理

微積分角度來講,最小二乘法是採用非迭代法,針對代價函數求導數而得出全局極值,進而對所給定參數進行估算。

計算數學角度來講,最小二乘法的本質上是一個線性優化問題,試圖找到一個最優解。

線性代數角度來講,最小二乘法是求解線性方程組,當方程個數大於未知量個數,其方程本身 無解,而最小二乘法則試圖找到最優殘差。

幾何角度來講,最小二乘法中的幾何意義是高維空間中的一個向量在低維子空間的投影。

概率論角度來講,如果數據的觀測誤差是/或者滿足高斯分佈,則最小二乘解就是使得觀測數據出現概率最大的解,即最大似然估計-Maximum Likelihood Estimate,MLE(利用已知的樣本結果,反推最有可能(最大概率)導致這樣結果的參數值)。

對於誤差不符合高斯分佈的,廣義誤差分佈(廣義誤差用來描述一類中間高兩邊低連續且對稱的概率密度函數):

其中,當b=2時,退化爲高斯分佈;而當b=1時,則退化爲拉普拉斯分佈(最小一乘法),如一些長尾(long tail)的數據,經常服從拉普拉斯分佈,對他們來說最小一乘纔是更好的解法。。

高斯分佈

侷限性

最小二乘法算法簡單,容易理解,而然在現實機器學習卻有其侷限性:

並非所有函數都可以求出駐點,即導數爲0的點,f(x)=0

求解方程困難,或求根公式複雜(引入泰勒公式展開?)

導數並無解析解,(多數函數無解析解)

最小二乘法的矩陣公式,計算一個矩陣的逆是相當耗費時間的, 而且求逆也會存在數值不穩定的情況 (比如對希爾伯特矩陣求逆就幾乎是不可能的)

梯度下降算法

梯度下降算法(Gradient Descent)

正是由於在實際中,最小二乘法遇到的困難和侷限性,尤其是多數超定方程組不存在解,我們由求導轉向迭代逼近。

先看一下標準梯度的數學定義:

方向導數

普通的偏導數是多元函數沿座標軸的變化率,方向導數則考慮多元函數沿任意方向的變化率。

如下圖考慮一個三維空間的方向導數:

簡單來說,方向導數即研究在某一點的任意方向的變化率,是偏導數的廣義擴展。

梯度

梯度則基於方向導數,是一個向量而非數,梯度代表了各個導數中,變化趨勢最大的那個方向。

來看一下數學的嚴謹定義:

定義 設函數z=f(x, y) 在平面區域D內具有一階連續偏導數,則對於每一點(x, y) 屬於D,都可定出一個向量

這向量稱爲函數z= f(x, y) 在點P(x, y) 的梯度,記作grad f(x, y),即

根據數學知識,我們知道上述沿梯度方向的方向導數達最大值,即梯度的方向是函數f(x, y)或者我們關注的目標函數在這點P(x, y)增長最快,或者函數值變化最快的方向,負梯度方向是減小最快的方向,如下圖。

在機器學習中,上述的f(x, y)即是我們代價函數,如上圖,當我們目標求f(x, y)的極小值時,我們可以先任意選取一個初始點,如x0, 讓其沿着梯度負方向,依次走到x1,x2,x3,... xn,迭代n次,這樣可以最快到達極小值點xn。

舉個Ng中三維的例子,比如我們站在山上某一地點,梯度所指示的方向是高度變化最快的方向,你沿着這個方向走,可以最快的改變你所在位置的高度(增加或者減少),即如果你一直沿着梯度走,你可以最快到達某個頂峯或者谷底。

可以看出,初始點的選擇不同,所計算出的極小值也不盡相同。

數學原理

我們來看一下標準梯度下降定義:

梯度下降算法也是一種優化算法,是求解無約束多元函數極值最早的數值方法,通常也被稱作最速下降法。其目的是找到一個局部極小值點;其目標與最小二乘法相同,都是使得估算值與實際值的總平方差儘量小。

而其實現上,則採用計算數學,迭代法,先給定一初始點,然後向下降最快的方向調整,在若干次迭代之後找到局部最小。梯度下降法的缺點是到最小點的時候收斂速度變慢,並且對初始點的選擇極爲敏感,梯度下降算法不可避免的會存在陷入局部極小值的情形,這也是梯度下降算法的重大缺陷,其改進大多是在這兩方面下功夫。

單元線性迴歸梯度算法實現

給定一個初始的θ0,θ1(僅以2參數爲例)

不斷改變θ0,θ1從而減少J(θ0,θ1)的值,具體做法是求導。直到最終收斂。

我們仍舊針對線性迴歸模型,包含θ0,θ1兩個參數爲例:

把假設函數h帶入代價函數J(θ0,θ1)中,並分別求偏導數:

至此,得到計算機容易迭代的算法,整個過程序算法概括如下:

批次梯度下降(Batch Gradient Descent)

可以看到上述每次迭代都需要計算所有樣本的殘差並加和,所以又稱作批次梯度下降Batch Gradient Descent)。

學習率

上圖中的係數a,通常稱作學習率,用來控制下降的幅度。如果學習率太小,θ的值每次變化很小,梯度下降會很慢;

反之,如果學習率過大,θ的值每次變化也會很大,直接越過極小值,甚至無法收斂到達最低點。

多元線性迴歸梯度算法實現

上述都是簡單的單元線性迴歸-梯度下降,我們再繼續擴展至多元迴歸的梯度下降。

對於多元來講(即由多個維度的樣本數據,比如房價數據除了房屋面積大小,還有房間數,樓層,房齡,朝向,地理位置等,增加到多維)。

其對應的假設函數爲如下:

或者用代數的簡化記法:

θ,x都是向量。

其對應的多元代價函數

所以對應的多元梯度算法如下:

對J(θ)求導:

多元矩陣跡求解法

對於多元函數的梯度下降通常引入矩陣算法來加速。

對於一個多元函數,用代數矩陣來表示,其對應的導數表示爲如下:

定義矩陣的跡(Trace)

根據矩陣定理, 推導出如下:

對J(θ)求導:

令上式爲0,即得到目標θ向量:

上述充分展現了數學的神奇,矩陣法的優點是不需要多次迭代,一次計算機可以得出精確結果,然而當數據量大,對於矩陣乘法,逆的計算複雜度也大大增加,所以更適用於小規模數據。

隨機梯度下降算法

我們在上文看到梯度下降算法中的學習率對收斂速度甚至能否收斂有至關重要的影響,另外在樣本數據集便成大規模海量時,簡單的梯度/批次下降算法並不太適合,在此引入隨機梯度下降算法。

隨機梯度下降算法的理念,其實是借鑑了隨機樣本抽樣的方式,並提供了一種動態步長的策略,希望做到又優化精度,同時又滿足必要的收斂速度。

隨機梯度下降算法(Stochastic Gradient Descent)

每次迭代並非計算訓練集中所有數據,而僅隨機抽取了訓練集中部分樣本數據進行梯度計算,從而可以有效避免陷入局部極小值情況(上文有提到)。

然而天下無免費的午餐,魚和熊掌無法兼得,同樣隨機梯度下降算法在平衡精度與迭代次數,犧牲了一部分精度,增加了一定數量的迭代次數(增加的迭代次數遠遠小於樣本總量),換取了整體的優化效率提升。

高斯-牛頓算法

高斯-牛頓法

高斯-牛頓法是另一種經常用來求解非線性最小二乘的迭代法,其原理是利用了泰勒展開公式,其最大優點是收斂速度快

Taylor 級數求得原目標函數的二階近似:

把 x 看做自變量, 所有帶有 x^k 的項看做常量,令一階導數爲 0 ,即可求近似函數的最小值:

Hesse矩陣

上邊的Hesse矩陣,是一個多元函數的二階偏導數構成的方陣,描述了函數的局部曲率。

算法原理

本質上來看,牛頓法是二階收斂,而梯度下降則爲一階收斂,所以牛頓法更快。簡單來說,梯度下降是從所處位置選擇一個坡度最大的方向走一步,而牛頓法則在選擇方向時,不僅考慮坡度,還會考慮下一步的坡度是否會變得更大。

幾何意義:

幾何上來說,牛頓法是用一個二次曲面去擬合當前所處位置的局部曲面,而梯度下降法是用一個平面去擬合當前的局部曲面,如下圖:

通常情況下,二次曲面的擬合會比平面更好,所以牛頓法選擇的下降路徑會更符合真實的最優下降路徑。

對於二元的情況,根據上述泰勒展開公式及求導,取0,可以得到如下迭代公式:

這樣,我們就可以利用該迭代式依次產生的序列{x1,x2,x3,... xk}才逐漸逼近f(x)的極小值點了。

牛頓算法侷限性

每種算法都有其適用性,牛頓算法主要侷限性如下:

可以看出,因爲我們需要求矩陣逆,當Hesse矩陣不可逆勢無法計算

矩陣的逆計算複雜度爲n的立方,當規模很大時,計算量超大,通常改良做法是採用擬牛頓法如BFGS,L-BFGS等

如果初始值離局部極小值太遠,Taylor展開並不能對原函數進行良好的近似

總結

機器學習,算法涉及大量高等數學,線性代數,概率統計,計算數學等推論,論證,難度非常大。

本文陸陸續續寫了近1個月,最後終於在“永動機”的加速下,匆忙於1周內完工,內容也借鑑了很多資料,尤其是斯坦福大學Ng的教材,感謝!

寫作耗時耗力,希望有機會能繼續機器學習更多的算法學習介紹。

分享給所有極客的小夥伴。

版權印爲您的作品印上版權80236417

公衆號:技術極客TechBooster

孿生公衆號:技術 + 金融 = 程序量化投資Venus

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