《[機(jī)器學(xué)習(xí)]邏輯回歸公式推導(dǎo)及其梯度下降法的Python實(shí)現(xiàn)》由會(huì)員分享,可在線閱讀,更多相關(guān)《[機(jī)器學(xué)習(xí)]邏輯回歸公式推導(dǎo)及其梯度下降法的Python實(shí)現(xiàn)(2頁珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、[機(jī)器學(xué)習(xí)]邏輯回歸公式推導(dǎo)及其梯度下降法的Python實(shí)現(xiàn)
—般來說,二項(xiàng)邏輯斯諦回歸模型是一個(gè)二分類判別模型,由條件概率分布表示,隨機(jī)變量為實(shí)數(shù),取值0或者1。我們通過比較和值大小來判斷給定x的類別為1還是0。
從線性模型推導(dǎo)
我們先說廣義的線性回歸:,這里為回歸的目標(biāo),x為輸入的數(shù)據(jù),和分別為需要學(xué)習(xí)的參數(shù)和偏置,我們簡化為,此時(shí)為參數(shù)向量,包括了偏置。如果此時(shí)我們把線性回歸的目標(biāo)設(shè)為一個(gè)事件的對(duì)數(shù)幾率(logodds),即事件發(fā)生的概率與不發(fā)生的概率的比值再取對(duì)數(shù),也就
那么這就是邏輯斯諦回歸模型,此時(shí)可以為類別1事件發(fā)生的概率,則為類別0事件發(fā)生的概率,我們用表示上述式子:
2、
就得到了我們平時(shí)接觸最多的logistic函數(shù)()的形式,那么換一種角度理解,這個(gè)模型就是一個(gè)線性模型經(jīng)過一個(gè)非線性變換得到的,更通俗的說,是一個(gè)神經(jīng)網(wǎng)絡(luò),這個(gè)網(wǎng)絡(luò)除了輸入層只有一個(gè)輸出神經(jīng)元,并且使用了sigmoid激活函數(shù),最后輸出的p表示類別為1的概率。
極大似然法估計(jì)與交叉墑
學(xué)習(xí)邏輯斯諦回歸模型時(shí),對(duì)于給定的數(shù)據(jù)集,我們通過極大似然估計(jì)法來估計(jì)出一套參數(shù),使模型對(duì)于此數(shù)據(jù)集中樣本值的發(fā)生概率最大,也就是使模型能盡可能擬合現(xiàn)有數(shù)據(jù)集中現(xiàn)有的樣本。
由于數(shù)據(jù)集中每個(gè)樣本之間相互獨(dú)立,用表示模型判別為類別1的概率,則表示模型判別為類別0的概率,那么整個(gè)數(shù)據(jù)集所有樣本發(fā)生的概率為每個(gè)
3、樣本對(duì)應(yīng)實(shí)際類別概率的連乘:這就是我們需要最大化的似然函數(shù),由于連乘的性質(zhì),我們一般采用對(duì)數(shù)似然函數(shù)將乘法變成加法,于是有:
對(duì)求極大值,得到對(duì)w的估計(jì)值。
從另外一個(gè)角度來看,帶負(fù)號(hào)的其實(shí)非常像交叉墑:交叉墑在一定程度上是衡量著兩個(gè)分布之間的差異,這里具體是指和。當(dāng)模型學(xué)到的和真實(shí)目標(biāo)分布越相近,模型的效果越好,交叉墑越小。理想情況下,當(dāng)兩個(gè)分布完全一致時(shí),此時(shí)相對(duì)墑為0,交叉墑達(dá)到最低值,即真實(shí)目標(biāo)分布的墑,詳情見。當(dāng)帶負(fù)號(hào)的達(dá)到極小值時(shí),也就是達(dá)到極大值,此時(shí)的模型參數(shù)是理想的,也是我們最終需要達(dá)到的目標(biāo),這與我們前面用似然函數(shù)估計(jì)分析的結(jié)果一致,可以看出這兩者實(shí)際上是相通的。
梯
4、度下降法最優(yōu)化
我們把求極大值問題轉(zhuǎn)化為求的極小值的最優(yōu)化問題。最優(yōu)化的方法通常是梯度下降法和牛頓法,我們具體給出梯度下降法的做法。我們把概率表示為非線性函數(shù),因此目標(biāo)函數(shù)重新寫成如下:
對(duì)進(jìn)行求導(dǎo),有:
其中利用了sigmoid函數(shù)的導(dǎo)數(shù)。從直觀上解釋:對(duì)于單個(gè)樣本,線性函數(shù)的梯度為其非線性激活后的值減去真實(shí)標(biāo)簽值,也就是輸出值減去,更具體來說,當(dāng)為1時(shí),梯度為,當(dāng)為0時(shí),梯度為。
如果用批量梯度下降法,那么每個(gè)epoch,參數(shù)的梯度為:
th。實(shí)現(xiàn)(批量梯度下降法)
我們使用iris數(shù)據(jù)集中的前100行數(shù)據(jù),實(shí)現(xiàn)一個(gè)簡單的邏輯回歸二分類器,使用批量梯度下降法:
fromskl
5、earnimportdatasets
importpandasaspd
importnumpyasnp
frommatplotlibimportpyplotaspit
fromnumpy.linalgimportinv
iris=datasets.load」ris()
X=iris.data[:100,:]
y=iris.target[:100].reshape((100,-1))
deflogit(x):
return1./(1+np.exp(-x))
m,n=X.shape
alpha=0.0065//步長
w=np.random.random((n,1))//參數(shù)
6、矩陣
maxCycles=30
J=pd.Series(np.arange(maxCycles,dtype=float))
foriinrange(maxCycles):
h=logit(np.dot(X,w))//輸出估計(jì)值h
J[i]=-(1/100.)*np.sum(y*np.log(h)+(I-y)*np.log(1-h))//記錄目標(biāo)函數(shù)的值
error=h-y//計(jì)算wx的梯度,輸出值減去真實(shí)值
grad=np.dot(X.T,error)//計(jì)算w的梯度
w-=alpha*grad//更新參數(shù)w,使用負(fù)梯度最小化J
printw
J.plot()
plt.s
7、how()
牛頓法與梯度下降法比較
牛頓法是直接利用函數(shù)有極小點(diǎn)的必要條件,即一階導(dǎo)數(shù)f導(dǎo)數(shù)為零,所以每次迭代后的點(diǎn)的特點(diǎn)就是,又由于一階導(dǎo)數(shù)可以通過二階導(dǎo)數(shù)與步長的乘積來計(jì)算(二階泰勒展開):,因此就有即每次更新的步長等于,這個(gè)在梯度下降法中的體現(xiàn)就是,只不過梯度下降法每次更新都是以一個(gè)非常小的固定步長(一般情況下)在更新,而牛頓法一步到位直接找到一個(gè)相對(duì)最優(yōu)的點(diǎn),利用了二階導(dǎo)數(shù)的信息,因此迭代次數(shù)更少,收斂快。
舉例子,比如一個(gè)簡單的強(qiáng)凸函數(shù),無論起始點(diǎn)是哪,牛頓法總能一次迭代就找到最小值點(diǎn)0,而梯度下降法只能根據(jù)步長和起始點(diǎn)得位置慢慢逼近0,但是實(shí)際上函數(shù)可能要復(fù)雜得多,函數(shù)可能是
8、整體上非凸,但是局部是凸函數(shù)(比如最優(yōu)點(diǎn)附近),直接用牛頓法迭代多次也不能保證收斂到最優(yōu)點(diǎn),因此需要先用梯度下降找到一個(gè)相對(duì)好的解后再用牛頓法可能效果比較好(根據(jù)曾文俊的回答),從這里我們也可以看出牛頓法對(duì)函數(shù)的性質(zhì)以及初始點(diǎn)的位置選擇比較挑剔,另外一個(gè)是二階導(dǎo)數(shù)矩陣的逆矩陣計(jì)算量比較大(當(dāng)為參數(shù)矩陣時(shí),此時(shí)為一個(gè)二階偏導(dǎo)數(shù)矩陣,即Hesse矩陣),通常使用擬牛頓法。
個(gè)人思考:前面的最大階數(shù)只有2,我們利用二階導(dǎo)數(shù)能完美解決它的最優(yōu)化問題;但是當(dāng)?shù)碾A數(shù)n大于2時(shí),此時(shí)用泰勒展開式展開到2階(牛頓法只展開到2階),后面還有一個(gè)高階無窮小,因此現(xiàn)在展開的等式兩邊都是約等于的關(guān)系(如果不考慮),即可推出,嚴(yán)格上來說,此時(shí)求得的并不能使參數(shù)更新到最優(yōu)點(diǎn),只能說是“相對(duì)最優(yōu)”的點(diǎn),所以多次迭代還是有必要的。