本課內容:
一、線性迴歸
二、梯度降低
三、正規方程組
監督學習:告訴算法每一個樣本的正確答案,學習後的算法對新的輸入也能輸入正確的答案
一、線性迴歸
問題引入:假設有一房屋銷售的數據以下:
引入通用符號:
m =訓練樣本數
x =輸入變量(特徵)
y =輸出變量(目標變量)
(x,y)—一個樣本
ith—第i個訓練樣本=(x(i),y(i))
本例中:m:數據個數,x:房屋大小,y:價格
監督學習過程:
1) 將訓練樣本提供給學習算法
2) 算法生成一個輸出函數(通常用h表示,成爲假設)
3) 這個函數接收輸入,輸出結果。(本例中爲,接收房屋面積,輸出房價)將x映射到y。
以下圖所示:
對假設進行線性表示:

一般來講,迴歸問題有多個輸入特徵。如上例中,咱們還已知房屋的臥室數,即有個第二個特徵。即x1表示大小,x2表示臥室數,則可將假設寫成:

爲了將公式寫整潔,定義x0=1,則h可寫成:
n=特徵數目,θ:參數html
選擇θ的目的,是使h(x)與y的平方差儘可能小。又因爲有m個訓練樣本,須要計算每一個樣本的平方差,且爲了後面求導的方便,乘以1/2,即:
咱們要作的就是求:min(J(θ))
求min(J(θ))的方法有:梯度降低法和正規方程組法
二、梯度降低(Gradient Descent)
梯度降低是一種搜索算法,基本思想:先給出參數向量一個初始值,好比0向量;不斷改變,使得J(θ)不斷縮小。
改變的方法:梯度降低
水平座標軸表示θ0和θ1,垂直座標表示J(θ)。
假設該三維圖爲一個三維地表,選擇的初始向量的點位於一座「山」上。梯度降低的方法是,你環視一週,尋找降低最快的路徑,即爲梯度的方向,每次降低一小步,再環視四周,繼續降低,以此類推。結果到達一個局部最小值,以下圖:
固然,倘若初始點選擇不一樣,則結果可能爲另外一個徹底不一樣的局部最小值,以下圖所示:

代表梯度降低的結果依賴於參數的初始值。算法
梯度降低算法的數學表示:
:=爲賦值運算符,即表示程序中的的賦值語句。
每一次將θi減去θi對J(θ)求偏導的結果,即沿最陡峭的「山坡」降低
假設只有一個訓練樣本時,將偏導數展開:

代入上式有:

α:學習速度,即決定了你下山時每一步邁多大。設得太小,則收斂時間長,設得過大,可能會在邁步的時候越過最小值。函數
特別注意:θi必須同步更新,即若假設i=0和i=1;則更新時按以下步驟:
(1)批梯度降低算法:
上述爲處理一個訓練樣本的公式,將其派生成包含m個訓練樣本的算法,循環下式直至收斂:
複雜度分析:
對於每一個θi的每次迭代,即上式所示,時間爲O(m)
每次迭代(走一步)須要計算n個特徵的梯度值,複雜度爲O(mn)
通常來講,這種二次函數的J(θ)的三維圖形爲一個碗狀,有一個惟一的全局最小值。其等高線爲一個套一個的橢圓形,運用梯度降低會快速收斂到圓心。
儘管α的值是固定的,梯度降低算法也會收斂到局部最小值,其緣由是每次減去乘以梯度,可是梯度會愈來愈小,因此步子會愈來愈小。
下圖爲使用梯度降低擬合的上例房屋大小和價格的曲線
檢測是否收斂的方法:
1)檢測兩次迭代θi的改變量,若再也不變化,則斷定收斂
2)更經常使用的方法:檢驗J(θ),若再也不變化,斷定收斂
批梯度降低算法的優勢是能找到局部最優解,可是若訓練樣本m很大的話,其每次迭代都要計算全部樣本的偏導數的和,時間過慢,因而採用下述另外一種梯度降低方法。
(2)隨機梯度降低算法(增量梯度降低算法):
如此一來,對每一個訓練樣本都更新一次θi,直至收斂,其速度快於批梯度降低法,由於批梯度降低法每一次更新θi都須要遍歷全部樣本。即批梯度降低中,走一步爲考慮m個樣本;隨機梯度降低中,走一步只考慮1個樣本。
每次迭代複雜度爲O(n)。當m個樣本用完時,繼續循環到第1個樣本。
上述使用了迭代的方法求最小值,實際上對於這類特定的最小二乘迴歸問題,或者普通最小二乘問題,存在其餘方法給出最小值,接下來這種方法能夠給出參數向量的解析表達式,如此一來就不須要迭代求解了。
三、正規方程組(Normal Equations)
假設咱們有m個樣本。特徵向量的維度爲n。所以,可知樣本爲{(x(1),y(1)), (x(2),y(2)),... ..., (x(m),y(m))},其中對於每個樣本中的x(i),都有x(i)={x1(i), xn(i),... ...,xn(i)}。令 H(θ)=θ0 + θ1x1 +θ2x2 +... + θnxn,則有學習
若但願H(θ)=Y,則有X · θ = Yurl
咱們先來回憶一下兩個概念:單位矩陣 和 矩陣的逆,看看它們有什麼性質。spa
(1)單位矩陣E3d
AE=EA=Aorm
(2)矩陣的逆A-1htm
要求:A必須爲方陣blog
性質:AA-1=A-1A=E
再來看看式子 X · θ = Y ;若想求出θ,那麼咱們須要作一些轉換:
step1:先把θ左邊的矩陣變成一個方陣。經過乘以XT能夠實現,則有
XTX · θ = XTY
step2:把θ左邊的部分變成一個單位矩陣,這樣就可讓它消失於無形了……
(XTX)-1(XTX) · θ = (XTX)-1XTY
step3:因爲(XTX)-1(XTX)=E,所以式子變爲
Eθ = (XTX)-1XTY
E能夠去掉,所以獲得
θ = (XTX)-1XTY
這就是咱們所說的Normal Equation了。
Normal Equation VS Gradient Descent
Normal Equation 跟 Gradient Descent同樣,能夠用來求權重向量θ。但它與Gradient Descent相比,既有優點也有劣勢。
優點:
Normal Equation能夠不在乎X特徵的規模大小。好比,有特徵向量X={x1, x2}, 其中x1的range爲1~2000,而x2的range爲1~4,能夠看到它們的範圍相差了500倍。若是使用Gradient Descent方法的話,會致使橢圓變得很窄很長,而出現梯度降低困難,甚至沒法降低梯度(由於導數乘上步長後可能會衝出橢圓的外面)。可是,若是用Normal Equation方法的話,就不用擔憂這個問題了。由於它是純粹的矩陣算法。
劣勢:
相比於Gradient Descent,Normal Equation須要大量的矩陣運算,特別是求矩陣的逆。在矩陣很大的狀況下,會大大增長計算複雜性以及對計算機內存容量的要求。
學習Regression問題避免不了梯度問題。以前對梯度概念一直模糊,找了好多博文來讀,總算也只知其一;不知其二。
我對梯度降低法的簡單理解
(1)爲何在多元函數自變量的研究中引入方向?
在自變量爲一維的狀況下,也就是自變量能夠視爲一個標量,此時,一個實數就能夠表明它了,這個時候,若是要改變自變量的值,則其要麼減少,要麼增長,也就是「非左即右「。因此,說到「 自變量在某個方向上移動 」這個概念的時候,它並非十分明顯;
而在自變量爲n(n≥2)維的狀況下,這個概念就有用了起來:假設自變量X爲3維的,即每個X是(x1, x2, x3)這樣的一個點,其中x1,x2和x3分別是一個實數,即標量。那麼,若是要改變X,即將一個點移動到另外一個點,你怎麼移動?能夠選擇的方法太多了,例如,咱們能夠令x1,x2不變,僅使x3改變,也能夠令x1,x3不變,僅使x2改變,等等。這些作法也就使得咱們有了」 方向 「的概念,由於在3維空間中,一個點移動到另外一個點,並非像一維狀況下那樣「非左即右」的,而是有「方向」的。在這樣的狀況下,找到一個合適的」方向「,使得從一個點移動到另外一個點的時候,函數值的改變最符合咱們預約的要求(例如,函數值要減少到什麼程度),就變得十分有必要了。
(2)爲何沿梯度的反方向函數值降低最快?
將目標函數f(x)在點xk處泰勒展開:
Xk:表明第k個點的自變量(一個向量)。
d:單位方向(一個向量),即|d|=1。
α:步長(一個實數)。

:
目標函數在Xk這一點的梯度(一個向量)。
o(α):α的高階無窮小。
這個數學表達式是用泰勒公式展開獲得的,樣子有點難看,因此對比一下自變量爲一維的狀況下的泰勒展開式

就知道多維的狀況下的泰勒展開式是怎麼回事了。
在[1]式中高階無窮小能夠忽略,所以,要使[1]式取到最小值,
應使
取到最小——這是兩個向量的點積(數量積),何種狀況下其值最小呢?
來看兩向量
的夾角θ的餘弦是如何定義的:
假設向量d與負梯度-gk的夾角爲θ,咱們即可求出點積
的值爲:
可見,θ爲0時,上式取得最小值。也就是說,d取-gk時,目標函數值降低得最快,這就是稱負梯度方向爲「最速降低」方向的由來了。
一個多元函數的梯度方向是該函數值增長最陡的方向。具體到一元函數中時,梯度方向首先是沿着曲線的切線,而後取切線向上增加的方向爲梯度方向。以下圖所示。
具體到二元函數或多元函數時,梯度向量爲函數值f對每一個變量的導數,該向量的方向就是梯度的方向。以下圖所示。

圖中箭頭方向爲負梯度方向。
THE END!