機(jī)器學(xué)習(xí)之梯度下降算法
原文地址:blog.csdn.net/tianse12/article/details/70172494
算法背景:
以房?jī)r(jià)問(wèn)題為由:
房?jī)r(jià)變化可能有多種因素比如說(shuō)房屋面積,房屋位置,房間數(shù)量等:
我們假設(shè)一個(gè)向量x表示輸入特征:x = [x0,x1.x2.......,xn],其中n為影響房?jī)r(jià)因素的數(shù)量
估計(jì)函數(shù):
其中Θ為特征參數(shù)或者學(xué)習(xí)參數(shù),該參數(shù)決定了特征變量Xi對(duì)估計(jì)的影響,用向量形式表示為:
為了使得估計(jì)值與實(shí)際的值差別最小:
我們建立一個(gè)函數(shù)去衡量輸出模型的擬合效果,一般稱為損失函數(shù)(loss functon)或者(cost function):
函數(shù)選擇了最小二乘法的原理,我們要做的便是最小化損失函數(shù),取得的Θ值便是我們需要的參數(shù)。
算法思想:
隨機(jī)找一個(gè)點(diǎn),沿著下降最快的方向走到一個(gè)局部最低點(diǎn),因此Gradient Descent存在局部最優(yōu)的缺點(diǎn)。
梯度的方向由J(Θ)對(duì)Θ的偏導(dǎo)數(shù)決定,可以得到參數(shù)的更新法則為:
此算法Θ 隨機(jī)生成初始值,再根據(jù)更新法則不斷迭代更新Θ的值,其中α是學(xué)習(xí)率,表征的是下降的速度,若太大則可能越過(guò)最低點(diǎn),太小則學(xué)習(xí)的速率太慢容易陷入局部最優(yōu)點(diǎn)。迭代實(shí)則是循環(huán),我們應(yīng)當(dāng)設(shè)置一定的條件終止循環(huán),比如說(shuō)循環(huán)達(dá)到一定的次數(shù),或者Θ更新的差分值低于某個(gè)值等。
另外,還需要提一點(diǎn)就是,當(dāng)樣本的數(shù)量達(dá)到一定的數(shù)量時(shí),更新參數(shù)的計(jì)算量以及時(shí)間變大,因此一般選擇隨機(jī)梯度下降算法來(lái)增加參數(shù)的更新速率和頻度,也即每次選取一定的訓(xùn)練樣本進(jìn)行更新計(jì)算,以便更快的收斂,隨機(jī)梯度下降算法下降速度快,但不能收斂到全局最優(yōu),一般在最小值邊緣徘徊。
代碼實(shí)現(xiàn)python:
