
牛頓法解機器學(xué)習(xí)中的Logistic回歸
這仍然是近期系列文章中的一篇。在這一個系列中,我打算把機器學(xué)習(xí)中的Logistic回歸從原理到應(yīng)用詳細(xì)串起來。最初我們介紹了在Python中利用Scikit-Learn來建立Logistic回歸分類器的方法
Python機器學(xué)習(xí)之Logistic回歸
此后,我們對上述文章進(jìn)行了更深一層的探討,介紹了利用Logistic回歸在自然語言處理中的應(yīng)用(對微博進(jìn)行Sentiment Analysis)
自然語言處理實戰(zhàn)之微博情感偏向分析
從應(yīng)用角度介紹了Logistic回歸之后,我們又從源頭介紹了Logistic回歸的數(shù)學(xué)原理
機器學(xué)習(xí)之詳解Logistic回歸
在這篇文章的最后,我們得到了一個似然函數(shù)為
然后我們的目標(biāo)是求出使這一似然函數(shù)值最大的參數(shù)估計,于是對函數(shù)取對數(shù),再求一階偏導(dǎo)數(shù)得到
從這個偏導(dǎo)數(shù)出發(fā),在實際中有很多方法可以解決前面的似然函數(shù)最大化參數(shù)估計問題,而我們這里要介紹的就是其中非常重要的一種,即牛頓法和擬牛頓法。
牛頓迭代法解方程的簡單回顧
現(xiàn)代計算中涉及大量的工程計算問題,這些計算問題往往很少采用我們通常在求解計算題甚至是考試時所采用的方法,因為計算機最擅長的無非就是“重復(fù)執(zhí)行大量的簡單任務(wù)”,所以數(shù)值計算方面的迭代法在計算機時代便有了很大的作用。例如我們之前介紹過的利用“Jacobi迭代法與Gauss-Seidel迭代法”求解方程組的方法。另外一個例子則是利用牛頓迭代法近似求解方程的方法。牛頓迭代又稱為牛頓-拉夫遜(拉弗森)方法(Newton-Raphson method)。如果讀者對這部分內(nèi)容感興趣,可以詳細(xì)參閱
牛頓迭代法與一道經(jīng)典編程問題
我們在此做簡要回顧。有時候某些方程的求根公式可能很復(fù)雜(甚至有些方程可能沒有求根公式),導(dǎo)致求解困難。這時便可利用牛頓法進(jìn)行迭代求解。
假設(shè)我們要求解方程f(x)=0的根,首先隨便找一個初始值x0,如果x0不是解,做一個經(jīng)過(x0,f(x0)) 這個點的切線,與x軸的交點為x1。同樣的道理,如果x1不是解,做一個經(jīng)過(x1,f(x1))這個點的切線,與x軸的交點為x2。 以此類推。以這樣的方式得到的xi會無限趨近于 f(x)=0 的解。
判斷xi是否是f(x)=0的解有兩種方法:一是直接計算f(xi)的值判斷是否為0,二是判斷前后兩個解xi和xi?1是否無限接近。經(jīng)過(xi,f(xi))這個點的切線方程為(注意這也是一元函數(shù)的一階泰勒展式)
其中,f′(x)為f(x)的導(dǎo)數(shù)。令切線方程等于 0,即可求出
于是乎我們就得到了一個迭代公式,而且它必然在 f(x?)=0處收斂,其中x?就是方程的根,由此便可對方程進(jìn)行迭代求根。
牛頓法在最優(yōu)化問題中的應(yīng)用
假設(shè)當(dāng)前任務(wù)是優(yōu)化一個目標(biāo)函數(shù) f,也就是求該函數(shù)的極大值或極小值問題,可以轉(zhuǎn)化為求解函數(shù) f 的導(dǎo)數(shù) f′=0 的問題,這樣求可以把優(yōu)化問題看成方程 f′=0 求解問題。剩下的問題就和前面提到的牛頓迭代法求解很相似了。
這次為了求解方程 f′=0 的根,把原函數(shù) f(x) 的做泰勒展開,展開到二階形式(注意之前是一階):
當(dāng)且僅當(dāng) Δx 無線趨近于0時,(可以舍得后面的無窮小項)使得等式成立。此時上式等價與:
注意因為Δx 無線趨近于0,前面的的常數(shù) 1/2 將不再起作用,可以將其一并忽略,即
求解
得出迭代公式
在之前的文章中我們也提到最優(yōu)化問題除了用牛頓法來解之外,還可以用梯度下降法來解。但是通常來說,牛頓法可以利用到曲線本身的信息,比梯度下降法更容易收斂,即迭代更少次數(shù)。
再次聯(lián)系到我們之前給出的一篇文章“Hessian矩陣與多元函數(shù)極值”,對于一個多維向量 X, 以及在點 X0 的鄰域內(nèi)有連續(xù)二階偏導(dǎo)數(shù)的多元函數(shù) f(X) ,可以寫出該函數(shù)在點 X0 處的(二階)泰勒展開式
其中,o(∥X?X0∥2) 是高階無窮小表示的皮亞諾余項。而 Hf(X0) 是一個Hessian矩陣。依據(jù)之前的思路,忽略掉無窮小項,寫出迭代公式即為
由此,高維情況依然可以用牛頓迭代求解,但是問題是Hessian矩陣引入的復(fù)雜性,使得牛頓迭代求解的難度大大增加。所以人們又提出了所謂的擬牛頓法(Quasi-Newton method),不再直接計算Hessian矩陣,而是每一步的時候使用梯度向量更新Hessian矩陣的近似。這一點我們后續(xù)還會再討論。
牛頓迭代法求解Logistic回歸
現(xiàn)在回歸到最開始的那個問題上。我們已經(jīng)求出了Logistic回歸的似然函數(shù)的一階偏導(dǎo)數(shù)
由于lnL(w)是一個多元函數(shù),變量是 w=w0,w1,?,wn ,所以根據(jù)多元函數(shù)求極值問題的規(guī)則,易知極值點處的導(dǎo)數(shù)一定均為零,所以一共需要列出n+1個方程,聯(lián)立解出所有的參數(shù)。下面列出方程組如下
當(dāng)然,在具體解方程組之前需要用Hessian矩陣來判斷極值的存在性。求Hessian矩陣就得先求二階偏導(dǎo),即
顯然可以用Hessian矩陣來表示以上多元函數(shù)的二階偏導(dǎo)數(shù),于是有
所以得到Hessian矩陣H=XTAX,可以看出矩陣A是負(fù)定的。線性代數(shù)的知識告訴我們,如果A是負(fù)定的,那么Hessian矩陣H也是負(fù)定的。也就是說多元函數(shù)存在局部極大值,這剛好符合我們的要求的最大似然估計相吻合。于是我們確信可以用牛頓迭代法來繼續(xù)求解最優(yōu)化問題。
對于多元函數(shù)求解零點,同樣可以用牛頓迭代法,對于當(dāng)前討論的Logistic回歸,可以得到如下迭代式
其中H是Hessian矩陣,U的表達(dá)式如下
由于Hessian矩陣H是對稱負(fù)定的,將矩陣A提取一個負(fù)號出來,得到
然后Hessian矩陣H變?yōu)镠′=XTA′X,這樣H′就是對稱正定的了。那么現(xiàn)在牛頓迭代公式變?yōu)?nbsp;
現(xiàn)在我們需要考慮如何快速地算得(H′)?1U,即解方程組(H′)?1X=U,通常的做法是直接用高斯消元法求解,但是這種方法的效率一遍比較低。而當(dāng)前我們可以利用的一個有利條件是H′是對稱正定的,所以可以用Cholesky矩陣分解法來解。Cholesky分解原理可以參考線性代數(shù)方面的書籍,此處不再贅述。
到這里,牛頓迭代法求解Logistic回歸的原理已經(jīng)介紹完了,但正如前面所提過的,在這個過程中因為要對Hessian矩陣求逆,計算量還是很大。而在后續(xù)的文章里我們會再來詳細(xì)探討擬牛頓法原理及應(yīng)用,它是針對牛頓法的弱點進(jìn)行了改進(jìn),更具實踐應(yīng)用價值。
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
SQL Server 中 CONVERT 函數(shù)的日期轉(zhuǎn)換:從基礎(chǔ)用法到實戰(zhàn)優(yōu)化 在 SQL Server 的數(shù)據(jù)處理中,日期格式轉(zhuǎn)換是高頻需求 —— 無論 ...
2025-09-18MySQL 大表拆分與關(guān)聯(lián)查詢效率:打破 “拆分必慢” 的認(rèn)知誤區(qū) 在 MySQL 數(shù)據(jù)庫管理中,“大表” 始終是性能優(yōu)化繞不開的話題。 ...
2025-09-18CDA 數(shù)據(jù)分析師:表結(jié)構(gòu)數(shù)據(jù) “獲取 - 加工 - 使用” 全流程的賦能者 表結(jié)構(gòu)數(shù)據(jù)(如數(shù)據(jù)庫表、Excel 表、CSV 文件)是企業(yè)數(shù)字 ...
2025-09-18DSGE 模型中的 Et:理性預(yù)期算子的內(nèi)涵、作用與應(yīng)用解析 動態(tài)隨機一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開始提取前,需先判斷 TIF 文件的類型 —— ...
2025-09-17CDA 數(shù)據(jù)分析師:解鎖表結(jié)構(gòu)數(shù)據(jù)特征價值的專業(yè)核心 表結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 規(guī)范存儲的結(jié)構(gòu)化數(shù)據(jù),如數(shù)據(jù)庫表、Excel 表、 ...
2025-09-17Excel 導(dǎo)入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實戰(zhàn)應(yīng)用 在用 Python(如 pandas 庫)處理 Excel 數(shù)據(jù)時,“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗與 t 檢驗:差異、適用場景與實踐應(yīng)用 在數(shù)據(jù)分析與統(tǒng)計學(xué)領(lǐng)域,假設(shè)檢驗是驗證研究假設(shè)、判斷數(shù)據(jù)差異是否 “ ...
2025-09-16CDA 數(shù)據(jù)分析師:掌控表格結(jié)構(gòu)數(shù)據(jù)全功能周期的專業(yè)操盤手 表格結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 存儲的結(jié)構(gòu)化數(shù)據(jù),如 Excel 表、數(shù)據(jù) ...
2025-09-16MySQL 執(zhí)行計劃中 rows 數(shù)量的準(zhǔn)確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調(diào)優(yōu)中,EXPLAIN執(zhí)行計劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對象的 text 與 content:區(qū)別、場景與實踐指南 在 Python 進(jìn)行 HTTP 網(wǎng)絡(luò)請求開發(fā)時(如使用requests ...
2025-09-15CDA 數(shù)據(jù)分析師:激活表格結(jié)構(gòu)數(shù)據(jù)價值的核心操盤手 表格結(jié)構(gòu)數(shù)據(jù)(如 Excel 表格、數(shù)據(jù)庫表)是企業(yè)最基礎(chǔ)、最核心的數(shù)據(jù)形態(tài) ...
2025-09-15Python HTTP 請求工具對比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請求(如接口調(diào)用、數(shù)據(jù)爬取 ...
2025-09-12解決 pd.read_csv 讀取長浮點數(shù)據(jù)的科學(xué)計數(shù)法問題 為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長浮點數(shù)據(jù)時的科學(xué)計數(shù)法問題 ...
2025-09-12CDA 數(shù)據(jù)分析師:業(yè)務(wù)數(shù)據(jù)分析步驟的落地者與價值優(yōu)化者 業(yè)務(wù)數(shù)據(jù)分析是企業(yè)解決日常運營問題、提升執(zhí)行效率的核心手段,其價值 ...
2025-09-12用 SQL 驗證業(yè)務(wù)邏輯:從規(guī)則拆解到數(shù)據(jù)把關(guān)的實戰(zhàn)指南 在業(yè)務(wù)系統(tǒng)落地過程中,“業(yè)務(wù)邏輯” 是連接 “需求設(shè)計” 與 “用戶體驗 ...
2025-09-11塔吉特百貨孕婦營銷案例:數(shù)據(jù)驅(qū)動下的精準(zhǔn)零售革命與啟示 在零售行業(yè) “流量紅利見頂” 的當(dāng)下,精準(zhǔn)營銷成為企業(yè)突圍的核心方 ...
2025-09-11CDA 數(shù)據(jù)分析師與戰(zhàn)略 / 業(yè)務(wù)數(shù)據(jù)分析:概念辨析與協(xié)同價值 在數(shù)據(jù)驅(qū)動決策的體系中,“戰(zhàn)略數(shù)據(jù)分析”“業(yè)務(wù)數(shù)據(jù)分析” 是企業(yè) ...
2025-09-11Excel 數(shù)據(jù)聚類分析:從操作實踐到業(yè)務(wù)價值挖掘 在數(shù)據(jù)分析場景中,聚類分析作為 “無監(jiān)督分組” 的核心工具,能從雜亂數(shù)據(jù)中挖 ...
2025-09-10統(tǒng)計模型的核心目的:從數(shù)據(jù)解讀到?jīng)Q策支撐的價值導(dǎo)向 統(tǒng)計模型作為數(shù)據(jù)分析的核心工具,并非簡單的 “公式堆砌”,而是圍繞特定 ...
2025-09-10