機器學習-監督學習應用:梯度降低

迴歸與梯度降低:算法

迴歸在數學上來講是給定一個點集,可以用一條曲線去擬合之,若是這個曲線是一條直線,那就被稱爲線性迴歸,若是曲線是一條二次曲線,就被稱爲二次迴歸,迴歸還有不少的變種,如locally weighted迴歸,logistic迴歸,等等,這個將在後面去講。機器學習

用一個很簡單的例子來講明迴歸,這個例子來自不少的地方,也在不少的open source的軟件中看到,好比說weka。大概就是,作一個房屋價值的評估系統,一個房屋的價值來自不少地方,好比說面積、房間的數量(幾室幾廳)、地 段、朝向等等,這些影響房屋價值的變量被稱爲特徵(feature),feature在機器學習中是一個很重要的概念,有不少的論文專門探討這個東西。在 此處,爲了簡單,假設咱們的房屋就是一個變量影響的,就是房屋的面積。函數

假設有一個房屋銷售的數據以下:學習

面積(m^2)  銷售價錢(萬元)優化

123            2503d

150            320blog

87              160數學

102            220it

…               …io

這個表相似於帝都5環左右的房屋價錢,咱們能夠作出一個圖,x軸是房屋的面積。y軸是房屋的售價,以下:

 

若是來了一個新的面積,假設在銷售價錢的記錄中沒有的,咱們怎麼辦呢?

咱們能夠用一條曲線去儘可能準的擬合這些數據,而後若是有新的輸入過來,咱們能夠在將曲線上這個點對應的值返回。若是用一條直線去擬合,多是下面的樣子:

綠色的點就是咱們想要預測的點。

首先給出一些概念和經常使用的符號,在不一樣的機器學習書籍中可能有必定的差異。

房屋銷售記錄表 - 訓練集(training set)或者訓練數據(training data), 是咱們流程中的輸入數據,通常稱爲x

房屋銷售價錢 - 輸出數據,通常稱爲y

擬合的函數(或者稱爲假設或者模型),通常寫作 y = h(x)

訓練數據的條目數(#training set), 一條訓練數據是由一對輸入數據和輸出數據組成的

輸入數據的維度(特徵的個數,#features),n

梯度降低法是一個最優化算法,一般也稱爲最速降低法。最速降低法是求解無約束優化問題最簡單和最古老的方法之一,雖然如今已經不具備實用性,可是許多有效算法都是以它爲基礎進行改進和修正而獲得的。最速降低法是用負梯度方向爲搜索方向的,最速降低法越接近目標值,步長越小,前進越慢。

下面是一個典型的機器學習的過程,首先給出一個輸入數據,咱們的算法會經過一系列的過程獲得一個估計的函數,這個函數有能力對沒有見過的新數據給出一個新的估計,也被稱爲構建一個模型。就如同上面的線性迴歸函數。

咱們用X1,X2..Xn 去描述feature裏面的份量,好比x1=房間的面積,x2=房間的朝向,等等,咱們能夠作出一個估計函數:

θ在這兒稱爲參數,在這兒的意思是調整feature中每一個份量的影響力,就是究竟是房屋的面積更重要仍是房屋的地段更重要。咱們令X0 = 1,就能夠用向量的方式來表示了:

咱們程序也須要一個機制去評估咱們θ是否比較好,因此說須要對咱們作出的h函數進行評估,通常這個函數稱爲損失函數(loss function)或者錯誤函數(error function),描述h函數很差的程度,在下面,咱們稱這個函數爲J函數

在這兒咱們能夠作出下面的一個錯誤函數:

這個錯誤估計函數是去對x(i)的估計值與真實值y(i)差的平方和做爲錯誤估計函數,前面乘上的1/2是爲了在求導的時候,這個係數就不見了。

如何調整θ以使得J(θ)取得最小值有不少方法,其中有最小二乘法(min square),是一種徹底是數學描述的方法,在stanford機器學習開放課最後的部分會推導最小二乘法的公式的來源,這個在不少的機器學習和數學書上均可以找到,這裏就不提最小二乘法,而談談梯度降低法。

梯度降低法是按下面的流程進行的:

1)首先對θ賦值,這個值能夠是隨機的,也可讓θ是一個全零的向量。

2)改變θ的值,使得J(θ)按梯度降低的方向進行減小。

爲了更清楚,給出下面的圖:

這是一個表示參數θ與偏差函數J(θ)的關係圖,紅色的部分是表示J(θ)有着比較高的取值,咱們須要的是,可以讓J(θ)的值儘可能的低。也就是深藍色的部分。θ0,θ1表示θ向量的兩個維度。

在上面提到梯度降低法的第一步是給θ給一個初值,假設隨機給的初值是在圖上的十字點。

而後咱們將θ按照梯度降低的方向進行調整,就會使得J(θ)往更低的方向進行變化,如圖所示,算法的結束將是在θ降低到沒法繼續降低爲止。

image

固然,可能梯度降低的最終點並不是是全局最小點,多是一個局部最小點,多是下面的狀況:

 

上面這張圖就是描述的一個局部最小點,這是咱們從新選擇了一個初始點獲得的,看來咱們這個算法將會在很大的程度上被初始點的選擇影響而陷入局部最小點

下面我將用一個例子描述一下梯度減小的過程,對於咱們的函數J(θ)求偏導J:(求導的過程若是不明白,能夠溫習一下微積分)

下面是更新的過程,也就是θi會向着梯度最小的方向進行減小。θi表示更新以前的值,-後面的部分表示按梯度方向減小的量,α表示步長,也就是每次按照梯度減小的方向變化多少。

一個很重要的地方值得注意的是,梯度是有方向的,對於一個向量θ,每一維份量θi均可以求出一個梯度的方向,咱們就能夠找到一個總體的方向,在變化的時候,咱們就朝着降低最多的方向進行變化就能夠達到一個最小點,無論它是局部的仍是全局的。

用更簡單的數學語言進行描述步驟2)是這樣的:

倒三角形表示梯度,按這種方式來表示,θi就不見了,看看用好向量和矩陣,真的會大大的簡化數學的描述啊。

相關文章
相關標籤/搜索