大多數的回歸問題,都可以使用最小二乘法來求解引數,而求解引數的過程又通常依賴梯度下降法。不僅是回歸問題,很多機器學習都是基於梯度下降來實現引數優化,因此梯度下降可以說是機器學習的核心演算法之一。簡單地說梯度下降利用導數,通過不斷迭代,經過有限次的運算,逐漸逼近最優解。
直接看吳恩達老師課程中的例子。現在有一些房價和面積的資料(x,y),想找出他們之間的關係。
我們可以大概畫出散點圖,通過圖形分布,假設他們之間是線性關係。那麼這個例子可以抽象為,求乙個方程f(x) = k*x+b,使**值f(x)與真實值y盡量接近。
如何算是接近?我們定義乙個新的函式來判斷接近程度。這個函式叫做損失函式,用差平方來表示,[f(x)-y]2。它反映了**值與真實值的偏離程度。差平方和則反映了所有樣本的偏離大小。將引數k和b用p取代,假設共有m個樣本,那麼擬合問題就成了找一組p值,使如下函式值最小。
這種擬合方法稱為最小二乘法。現在我們不繼續深究,因為這個一元問題用excel就能搞定了:
一元線性回歸只是其他更複雜模型中的乙個特例,實際資料也往往並不會這麼簡單。現在我們給資料增加乙個維度,**一下房間數量、房屋面積和**間的關係。
根據上面的思路,首先假設還是線性關係。將引數統一表示為θn(或叫做權重,相當於一元中的k,b),xn為資料特徵,本例中兩個資料特徵分別為面積和房間數量。用多元回歸對房價進行擬合。這裡設x0=1。
同樣,引入經驗風險j(θ),相當於上文中的s(p),表示資料總體的誤差。前面乘以0.5,是方便後面的求導運算:
為了使決策函式更接近真實值之間的關係,經驗風險越小越好。到這裡,最優問題就成了求最小值問題。j(θ)這個函式可以看成是這樣的。
如何到達最低點,從而使j(θ)最小呢?接下來就需要梯度下降法了。首先,隨機給定一組θ值,得到乙個解。在這個解的基礎上進行優化,讓θj沿著j(θ)下降最快的方向,也就是導數的反方向移動一小步,得到乙個新的θj,再繼續優化,重複上述過程,多次調整後,最終沿著「path」,達到最低點。表示式如下。
其中「α」叫做學習率,代表了每一次優化的步長。步長太大,容易直接跳過最優解,步長太小,迭代次數過多,學習效率降低。「:=」表示從右向左賦值,新產生的值會再次迭代,直到求出最小值。
對θj求偏導數,根據加減法則及鏈式求導法則得到以下等式:
最終梯度下降法表示式如下:
在python的scipy庫中,提供了leastsq函式,直接實現此目的,語法如下:
scipy.optimize.leastsq(func,x0,args=(),……)leastsq函式的目標是,求得如下的乙個值:func:**值與實際值的差,需要帶有至少乙個變數,並返回數值型資料。
x0:初始引數,作為學習的起點。格式為陣列。
args:訓練集。
是不是很熟悉?把func(y)**2作為誤差函式,再經過sum求和,就等於經驗風險。即求乙個y值,使經驗風險j(θ)或s(p)最小。
python實現過程分為以下四個步驟
(1)定義擬合函式
deff(x1, x2, p):(2)定義誤差函式k0, k1, k2 = p
returnk0 +k1*x1 + k2*x2
defcost(p,x1,x2,y):(3)初始化引數returny-f(x1,x2, p)
p0=[1,1,1](4)用leastsq求解x1=np.array([2104,1600,2400,1416,3000])
x2=np.array([3,3,3,2,4])
y=np.array([400,330,369,232,540])
arg = leastsq(cost,p0,args=(x1,x2,y))完整**如下:printarg[0]
輸出[-7.04346018e+01 6.38433756e-02 1.03436047e+02]
梯度下降法通過多次迭代,最終求出最優解。如果想一次性求出結果,也能夠實現。即利用最優解處,導數為0特徵直接求解。與梯度下降法類似,用x(i)列向量表示第i個資料裡所有的變數特徵,θ列向量表示每個特徵對應的權重,y向量表示每組資料的實際輸出。每個**值和實際值的差用如下方程表示:
接著寫出風險函式:
對風險函式求導:
並使導數等於0,即可能存在的最優解:
機器學習 回歸問題(一)
首先,我們來看乙個例子。你有乙個朋友,他有一套750平方英呎的房子,他來問你能賣多少錢。然後,你就找來了附近房子的最近買賣資訊,然後把面積跟房價畫了一條曲線出來。注 例子與圖來自andrew ng的machine learning課程。如圖,我們知道的只是上面一些點,橫座標是面積,縱座標是房價。現在...
機器學習 線性回歸問題
案例分析 正規方程 梯度下降 嶺回歸 from sklearn.datasets import load boston from sklearn.linear model import linearregression,sgdregressor,ridge from sklearn.model se...
python機器學習 線性回歸
要理解線性回歸,首先得對線性和回歸的基本概念進行回顧。線性 兩個變數之間存在一次方函式關係即一階導數為常數的函式。回歸 確定兩種或兩種以上變數間相互依賴的定量關係的一種統計分析方法。回歸分析按照涉及的變數的多少,分為一元回歸和多元回歸分析。分類與回歸的區別 分類 輸出為離散資料 目的 尋找決策邊界 ...