大多數(shù)的回歸問題想诅,都可以使用最小二乘法來求解參數(shù)召庞,而求解參數(shù)的過程又通常依賴梯度下降法岛心。不僅是回歸問題,很多機器學習都是基于梯度下降來實現(xiàn)參數(shù)優(yōu)化篮灼,因此梯度下降可以說是機器學習的核心算法之一忘古。簡單地說梯度下降利用導數(shù),通過不斷迭代诅诱,經(jīng)過有限次的運算髓堪,逐漸逼近最優(yōu)解。
1.?一元回歸與最小二乘
直接看吳恩達老師課程中的例子》晁遥現(xiàn)在有一些房價和面積的數(shù)據(jù)(x,y)旦袋,想找出他們之間的關系骤菠。
我們可以大概畫出散點圖它改,通過圖形分布,假設他們之間是線性關系商乎。那么這個例子可以抽象為央拖,求一個方程f(x) = k*x+b,使預測值f(x)與真實值y盡量接近鹉戚。
如何算是接近鲜戒?我們定義一個新的函數(shù)來判斷接近程度。這個函數(shù)叫做損失函數(shù)抹凳,用差平方來表示,[f(x)-y]2遏餐。它反映了預測值與真實值的偏離程度。差平方和則反映了所有樣本的偏離大小赢底。將參數(shù)k和b用p取代失都,假設共有m個樣本,那么擬合問題就成了找一組p值幸冻,使如下函數(shù)值最小粹庞。
這種擬合方法稱為最小二乘法。現(xiàn)在我們不繼續(xù)深究洽损,因為這個一元問題用Excel就能搞定了:
2. 多元回歸與梯度下降
一元線性回歸只是其他更復雜模型中的一個特例庞溜,實際數(shù)據(jù)也往往并不會這么簡單。現(xiàn)在我們給數(shù)據(jù)增加一個維度碑定,探究一下房間數(shù)量流码、房屋面積和價格間的關系。
根據(jù)上面的思路延刘,首先假設還是線性關系漫试。將參數(shù)統(tǒng)一表示為θn(或叫做權重,相當于一元中的k访娶,b)商虐,xn為數(shù)據(jù)特征觉阅,本例中兩個數(shù)據(jù)特征分別為面積和房間數(shù)量。用多元回歸對房價進行擬合秘车。這里設x0=1典勇。
同樣,引入經(jīng)驗風險J(θ)叮趴,相當于上文中的S(P)割笙,表示數(shù)據(jù)總體的誤差。前面乘以0.5眯亦,是方便后面的求導運算:
為了使決策函數(shù)更接近真實值之間的關系伤溉,經(jīng)驗風險越小越好。到這里妻率,最優(yōu)問題就成了求最小值問題乱顾。J(θ)這個函數(shù)可以看成是這樣的。
如何到達最低點宫静,從而使J(θ)最小呢走净?接下來就需要梯度下降法了。首先孤里,隨機給定一組θ值伏伯,得到一個解。在這個解的基礎上進行優(yōu)化捌袜,讓θj沿著J(θ)下降最快的方向说搅,也就是導數(shù)的反方向移動一小步,得到一個新的θj虏等,再繼續(xù)優(yōu)化弄唧,重復上述過程,多次調整后博其,最終沿著“path”套才,達到最低點。表達式如下。
其中“α”叫做學習率,代表了每一次優(yōu)化的步長闯传。步長太大,容易直接跳過最優(yōu)解傻寂,步長太小,迭代次數(shù)過多携兵,學習效率降低疾掰。“:=”表示從右向左賦值徐紧,新產生的值會再次迭代静檬,直到求出最小值炭懊。
對θj求偏導數(shù),根據(jù)加減法則及鏈式求導法則得到以下等式:
最終梯度下降法表達式如下:
3. 回歸問題的python實現(xiàn)
在python的scipy庫中拂檩,提供了leastsq函數(shù)侮腹,直接實現(xiàn)此目的,語法如下:
scipy.optimize.leastsq(func,x0,args=(),……)
func:預測值與實際值的差稻励,需要帶有至少一個變量父阻,并返回數(shù)值型數(shù)據(jù)。
x0:初始參數(shù)望抽,作為學習的起點加矛。格式為數(shù)組。
args:訓練集煤篙。
leastsq函數(shù)的目標是斟览,求得如下的一個值:
是不是很熟悉?把func(y)**2作為誤差函數(shù)舰蟆,再經(jīng)過sum求和趣惠,就等于經(jīng)驗風險。即求一個y值身害,使經(jīng)驗風險J(θ)或S(p)最小。
Python實現(xiàn)過程分為以下四個步驟
(1)定義擬合函數(shù)
def?f(x1, x2, p):
? ? k0, k1, k2 = p
? ? returnk0 +k1*x1 + k2*x2
(2)定義誤差函數(shù)
def?cost(p,x1,x2,y):
? ? return?y-f(x1,x2, p)
(3)初始化參數(shù)
p0=[1,1,1]
x1=np.array([2104,1600,2400,1416,3000])
x2=np.array([3,3,3,2,4])
y=np.array([400,330,369,232,540])
(4)用leastsq求解
arg =?leastsq(cost,p0,args=(x1,x2,y))
print?arg[0]
完整代碼如下:
輸出
[-7.04346018e+01 ? ? 6.38433756e-02 ? ? 1.03436047e+02]
4. 正規(guī)方程組
梯度下降法通過多次迭代草戈,最終求出最優(yōu)解塌鸯。如果想一次性求出結果,也能夠實現(xiàn)唐片。即利用最優(yōu)解處丙猬,導數(shù)為0特征直接求解。與梯度下降法類似费韭,用x(i)列向量表示第i個數(shù)據(jù)里所有的變量特征茧球,θ列向量表示每個特征對應的權重,y向量表示每組數(shù)據(jù)的實際輸出星持。每個預測值和實際值的差用如下方程表示:
接著寫出風險函數(shù):
對風險函數(shù)求導:
并使導數(shù)等于0抢埋,即可能存在的最優(yōu)解: