機器學習--邏輯回歸_LR(內附細說極大似然估計,梯度下降法)


 等風的鳥原創出品,轉載須經同意並附帶說明及地址。

  邏輯回歸應該是機器學習里入門級的算法了,但是越是簡單的東西越是難以掌控的東西,因為你會覺得簡單而忽視掉這個點,但恰恰這個點包含了機器學習的基本內容,學習的框架。

  很多人學機器學習,人工智能可能就是為了更高的薪水,更好的就業前景,畢竟整個社會整個環境大家講的都是這個,所以這個行業里的錢也最多。但是很多人只見其形卻不懂得其內里的含義,我覺得機器學習學習的不僅僅是使用了哪個算法,而應該是一種思維,一種機器學習或者說人工智能這個行業發展的基礎,發展的歷程以及發展的未來。

  言歸正傳,一句話就是,做機器學習不僅僅是做一個調參工程師,我們要想讓機器學習人類首先我們要先學會讓機器知道學習,那學習的基礎就是數學。數學是人與機器交互最大的子集。

  首先說一下邏輯回歸,我的機器學習有兩個路子,一個是吳恩達的機器學習視頻,這個在網易公開課上就有,另一個就是《機器學習實戰》,前者給我智慧,后者給我力量。開個玩笑,這兩者其實就是理論和實踐的代表,知行合一的體現。

  首先說一下理論,吳恩達在視頻中介紹邏輯回歸的時候選用的是sigmoid函數,而sigmoid函數的另一個名稱就是logistic函數,這也是邏輯回歸(LogicRegression)的由來。而我什么選擇sigmoid函數,我們需要先來看一下sigmoid函數到底長的什么樣子:

 

  那么這就是sigmoid函數的表達式,下圖是其函數圖像

 

 

 

  上圖很明顯的顯示出了這個函數被選中的理由,天選之子出生自帶的光環屬性,這是一個Y取值范圍為(0,1)的函數,而(0,1)也正是一個事件發生可能性的取值范圍,同時其取值中心是0.5。這就是個很有趣的事情了,我在網上找到一個比較靠譜的解釋:

為什么要選用sigmoid函數呢?為什么不選用其他函數,如probit函數? 
其實,無論是sigmoid函數還是probit函數都是廣義線性模型的連接函數(link function)中的一種。選用聯接函數是因為,從統計學角度而言,普通線性回歸模型是基於響應變量和誤差項均服從正態分布的假設,且誤差項具有零均值,同方差的特性。但是,例如分類任務(判斷腫瘤是否為良性、判斷郵件是否為垃圾郵件),其響應變量一般不服從於正態分布,其服從於二項分布,所以選用普通線性回歸模型來擬合是不准確的,因為不符合假設,所以,我們需要選用廣義線性模型來擬合數據,通過標准聯接函數(canonical link or standard link function)來映射響應變量,如:正態分布對應於恆等式,泊松分布對應於自然對數函數,二項分布對應於logit函數(二項分布是特殊的泊松分布)。因此,說了這么多是想表達聯接函數的選取除了必須適應於具體的研究案例,不用糾結於為什么現有的logistic回歸會選用sigmoid函數,而不選用probit函數,雖然網上也有不少說法說明為什么選擇sigmoid函數,例如“該函數有個漂亮的S型”,“在遠離x=0的地方函數的值會很快接近0/1”,“函數在定義域內可微可導”,這些說法未免有些“馬后炮”的感覺,哪個說法仔細分析都不能站住腳,我覺得選用sigmoid函數也就是因為該函數滿足分類任務,用的人多了也就成了默認說法,這跟給物體取名字有點類似的感覺,都有些主觀因素在其中。

引自:https://blog.csdn.net/wolfblood_zzx/article/details/74453434?utm_source=copy

  說完sigmoid函數,下面該是邏輯回歸的公式推導了,這個個人感覺很重要,但是介於公式輸入很繁瑣,樓主在網上找到一個很靠譜的公式推導博文:

    http://www.hanlongfei.com/機器學習/2015/08/05/mle/

  就樓主搜索來說,這個是最舒服的了,還有一個就是CSDN上洞庭之子的推導也還是不錯,這里尤其要注意的是,sigmoid函數求導之后的多項式的特殊性,即下文中第三行最后多項式的變換,有興趣的寫一下sigmoid函數的導數就可以了。


最后一行也就是《機器學習實戰》中作者提到的有興趣的同學可以推導一下的代碼的來源。

#極大似然估計和梯度下降法明天更新吧。。。睡覺了

ok,繼續未完成的內容。

  首先說一下極大似然估計,這個在我考研時讓我感到萬分折磨的公式,現在回頭想想,確實有着他的魅力,但是使用極大似然估計有一個前提,就是你要知道他的概率密度函數,這是一個很重要的問題,因為大多數情況下,我們不知掉所要預測的東西的概率密度函數,畢竟知道概率密度函數這就不是一個容易的事。所以對於邏輯回歸來說,極大似然估計像是為他而生的一樣,因為我們有邏輯回歸的概率密度函數:sigmoid函數。具體的極大似然估計的求解方法,建議找一個考研班的視頻,(建議張宇)這個很容易就可以理解,主要就是概率密度函數相乘,求得讓這些已知樣本可以發生的最大可能性的未知參數,因為相乘的就是1或者0的概率,也就是所擁有樣本實現的可能性,所以這就是其數學依據。至於求解上文已經說明了,主要注意sigmiod函數求導所得的特殊性。

  接着說一下梯度下降法,梯度下降法是用來求最優解(有時候是次優解,因為其容易陷入局部最優解中),而我們在極大似然估計中的求解正好需要梯度下降法來幫助我們求得我們想要的結果,或者說逼近一個最優解或者次優解。梯度下降法就是對多項式求導,沿着導數的方向是其減小最快的方向,這個要是不明白的話,建議還是看看考研高數,導數的含義。所以梯度下降法是我們求極小值的利器,對應的梯度上升法就是求極大值的了,這個沒有什么好說的。當然我們為什么要求極小值,是因為我們選用的代價函數,也叫損失函數(通常是 預測值-真實值),我們肯定希望損失函數越小越好,畢竟損失函數越小代表我們越接近真實的情況,因為我們的預測值和真實值的差值最小了嘛。

  因此最終我們就能得倒了我們夢寐以求的未知的參數了。

  總結一下,其實整個算法就是一道求解數學題的過程,不過我們要自己出題自己選未知數,利用我們豐富的已知條件。當然,我們最后求得的很有可能是一個次優解,效果不是那么的理想,anyway,總比瞎貓碰死耗子的幾率大不是。把每一個算法當作是求解一道數學題,在求解的過程中,我們可能會用到不同的方法或者多個方法去逼近未知數的真相,這也是對於同樣的問題,為什么有這么多的算法,各種算法都有其優點和缺點,在面對具體的問題時,我們需要用不同的眼光去看待解決,經驗可能會給我們一些便捷的方法,重要的是你要學着去把這道題解出來。

  關於其中的具體推導公式,本文就不一步一步寫下來了,因為文中已經給出了前輩的血汗,本文只是將其中的邏輯從頭到尾講清楚,並對其中的重點和難點進行了講解,其實最主要的還是算法的邏輯,解題的思維。

  希望能對大家的學習有幫助。期待下一節與你們再會。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM