日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Logistic回归与梯度上升算法

發布時間:2023/12/20 编程问答 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Logistic回归与梯度上升算法 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

下面大部分是轉載的,加上自己的筆記

在《機器學習實戰》一書的第5章中講到了Logistic用于二分類問題。書中只是給出梯度上升算法代碼,但是并沒有給出數學推導。故哪怕是簡單的幾行代碼,依然難以理解。

Logistic回歸用于二分類問題,面對具體的二分類問題,比如明天是否會下雨。人們通常是估計,并沒有十足的把握。因此用概率來表示再適合不過了。

Logistic本質上是一個基于條件概率的判別模型(DiscriminativeModel)。利用了Sigma函數值域在[0,1]這個特性。

? ? ? ? ? ? ? ? ? ? ? ? ? ?

函數圖像為:

通過Sigmoid函數計算出最終結果,以0.5為分界線,

最終結果大于0.5則屬于正類(類別值為1)

反之屬于負類(類別值為0)。

如果將上面的函數擴展到多維空間,并且加上參數,則函數變成:

其中X是變量,θ是參數,由于是多維,所以寫成了向量的形式,也可以看作矩陣。θT表示矩陣θ的轉置,即行向量變成列向量。θTX是矩陣乘法。(高數結合線性代數的知識)

?

如果我們有合適的參數向量θ,以及樣本x,那么對樣本x分類就可以通過上式計算出一個概率值()來,如果概率值大于0.5,我們就說樣本是正類,否則樣本是負類。

比如,對于“垃圾郵件判別問題”,對于給定的郵件(樣本),我們定義非垃圾郵件為正類,垃圾郵件為負類。我們通過計算出的概率值即可判定郵件是否是垃圾郵件。

?

接下來問題來了,如何得到合適的參數向量θ呢?

?

函數g(z)即為上文提到的sigmoid函數,其導數形式為:

根據這個函數,我們可以得到對于一個樣本的概率分布為:

注意,上面的公式 表達是不嚴謹的,因為不同數據集服從不同的概率分布,都有不同的概率數值計算方式,上面使用sigmoid來等同于概率值是不對的.很多博客和書籍都在抄來抄去,其實是因為沒有理解.sigmoid可以模仿數據屬于某個類別的概率,但是不能嚴格等同,下面的亦然,這個只是一個假設,并且這個假設比較恰當而已.

這個假設的具體說明在PRML的P189頁上有講,提到sigmoid中的z=WT·X

由于sigma函數的特性,我們可作出如下的假設:

上式即為在已知樣本X和參數θ的情況下,樣本X屬性正類(y=1)和負類(y=0)的條件概率。

?

將兩個公式合并成一個,如下:

既然概率出來了,那么最大似然估計也該出場了。假定樣本與樣本之間相互獨立,那么整個樣本集生成的概率即為所有樣本生成概率的乘積(這個地方,也就是說,下面的這個式子其實是在使用整個訓練集進行建模,即使用整個訓練集進行求解最佳權重向量):

上面這個式子為什么要這么寫呢?因為我們希望:

④類別為1的數據對應的sigmoid的函數值盡可能的大

⑤類別為0的數據對應的sigmoid的函數值盡可能的小

令⑤=A

⑤=>(1-A)盡可能的大⑥

所以結合④⑥,就是希望④⑥都盡可能的大,比較容易想到的一種數學處理方式就是把他們乘法起來,做成一個函數,讓每個因子都最大,于是就有了上面的式子.同樣的上面的式子中的p是不對的,這不是數據集分布的真實概率值,這里只是用sigmoid函數去模仿這種概率值而已.

?

?

其中,m為樣本的總數,y(i)表示第i個樣本的類別,x(i)表示第i個樣本,需要注意的是θ是多維向量,x(i)也是多維向量。

(接下來從《概率論與數理統計》轉到《高等數學》)

為了簡化問題,我們對整個表達式求對數,(將指數問題對數化是處理數學問題常見的方法):

?

上式是基本的對數變換,高中數學而已,沒有復雜的東西。①,下接下面的②

?

滿足似然函數(θ)的最大的θ值即是我們需要求解的模型。

?

梯度上升算法

?

???????如此復雜的函數,如何求滿足函數(θ)最大值的參數向量θ呢?

?

???????如果問題簡化到一維,就很好辦了。假如需要求取函數:

??????????????

???????的最大值。

???????函數圖像如下:

函數的導數為:

所以?x=1.5即取得函數的最大值1.25

?

但是真實環境中的函數不會像上面這么簡單,就算求出了函數的導數,也很難精確計算出函數的極值。此時我們就可以用迭代的方法來做。就像爬坡一樣,一點一點逼近極值。爬坡這個動作用數學公式表達即為:

其中,α為步長。

求上面函數極值的Python代碼如下:

#-*- coding:utf-8 -*- import sys reload(sys) sys.setdefaultencoding('utf-8')def f_prime(x_old):return 3-2*x_old def cal():x_old=0x_new=6eps=0.01presision=0.00001while abs(x_new-x_old)>presision:#如果小于這個精度,就跳出迭代循環,否則就繼續迭代x_old=x_newx_new=x_old+eps*f_prime(x_old)return x_new if __name__ == '__main__':result=cal()print "result=",result

結果為:1.50048

?

回到Logistic Regression問題(上接上面的①),我們同樣對函數求偏導。

這里為什么是這個求導結果呢?因為其余的Θi都被Θj當做是常數了,所以常數求導是0,所以整個式子最終剩下xj

然后我們把上面的結果代入下面的式子③.

上面化簡時,需要代入下面的一個式子才能化簡:

?

③處的公式有點復雜,但是依然只是基本的導數變換,待我細細拆解。這里需要的數學知識無外乎兩點:函數的和、差、積、商求導法則和復合函數的求導法則(高等數學P88頁)。

先看:

其中:

再由:

可得:

接下來就剩下第三部分:

?

(這個公式應該很容易理解,簡單的偏導公式)

還有就是:

綜合三部分即得到:

?

?

因此,梯度迭代公式為:

代入⑨

? ? ? 注意:

按照梯度迭代公式,上式應該除以Θj

這里沒有寫,這個在代碼實現時可寫可不寫,

不寫的話可以帶來性能上的提升

對照《機器學習實戰》中的代碼:

weights = weights + alpha * dataMatrix.transpose()* error

?

?

sigmoid函數中的z為啥可以用一次函數來替代,以及為什么sigmoid可以用來計算概率的問題,證明如下(來自PRML書籍):

關于為什么要使用似然函數而不使用最小二乘法的問題?

參考下面文章

?https://blog.csdn.net/zjuPeco/article/details/77165974

把關鍵部分內容貼出來

?

總結

以上是生活随笔為你收集整理的Logistic回归与梯度上升算法的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。