
我的R語(yǔ)言小白之梯度上升和逐步回歸的結(jié)合使用
我們今天的主題通常在用sas擬合邏輯回歸模型的時(shí)候,我們會(huì)使用逐步回歸,最優(yōu)得分統(tǒng)計(jì)模型的等方法去擬合模型。而在接觸機(jī)器學(xué)習(xí)算法用R和python實(shí)踐之后,我們會(huì)了解到梯度上升算法,和梯度下降算法。其實(shí)本質(zhì)上模型在擬合的時(shí)候用的就是最大似然估計(jì)來(lái)確定逐步回歸選出來(lái)的一個(gè)參數(shù)估計(jì),但是這個(gè)過(guò)程你說(shuō)看不到,那么現(xiàn)在假設(shè)你過(guò)程你可以選擇,就是你來(lái)算這個(gè)最大似然估計(jì)的過(guò)程。甚至,你可以定義這個(gè)過(guò)程損失函數(shù),那么就要使用最大似然估計(jì)。
逐步回歸法結(jié)合了向前選擇法和向后選擇法的優(yōu)點(diǎn)。一開(kāi)始模型只有截距項(xiàng),先使用前向選擇法選入卡方統(tǒng)計(jì)量最大,符合選入模型P值的變量,然后使用后向選擇法移除P值最大的變量,即最不顯著的變量,不斷重復(fù)以上過(guò)程。所以也可以說(shuō)逐步回歸的每一步都結(jié)合了向前選擇法和向后選擇法。
要學(xué)習(xí)梯度上升算法和梯度下降算法,就要先了解梯度的概念,要了解梯度就離不開(kāi)方向?qū)?shù)。學(xué)過(guò)大學(xué)微積分或數(shù)學(xué)分析的同學(xué)都知道,導(dǎo)數(shù)代表了一個(gè)函數(shù)的變化率。但當(dāng)一個(gè)函數(shù)包含多個(gè)自變量的時(shí)候,函數(shù)值的變化不僅取決于自變量的變化,還取決于使用哪個(gè)自變量。換句話說(shuō),函數(shù)值同時(shí)決定于移動(dòng)的距離和移動(dòng)的方向。
然后,梯度其實(shí)就是一定最大的方向?qū)?shù)。在自變量只有一個(gè)的時(shí)候,一點(diǎn)的導(dǎo)數(shù)其實(shí)是確定的。而到了多個(gè)自變量的時(shí)候,以一個(gè)三維空間為例(如下圖的高山),概括為Y為X1,X2的函數(shù),那么在高山上的點(diǎn)上升的方向就不唯一,即方向?qū)?shù)不唯一,那么在某點(diǎn)上山最快的方向就可以描述為該點(diǎn)的梯度。在每爬到一個(gè)地方,就不斷調(diào)整上升最快的方向,最終就可以爬到山頂,成為人生贏家。在算法上就描述為每達(dá)到一個(gè)移動(dòng)的步長(zhǎng),就計(jì)算該點(diǎn)的梯度,不斷使Y值增加,達(dá)到最大的Y,最后可以求得最優(yōu)的X1和X2。
換到梯度下降法,就可以把三維圖形想象成一個(gè)碗,要想到碗底的話,就應(yīng)該沿下降最快的方向。數(shù)學(xué)上就是沒(méi)一步都求梯度的反方向,最后目標(biāo)就是求Y的最小值。
說(shuō)了這么多,那么梯度上升法和下降法對(duì)邏輯回歸到底有什么用呢?邏輯回歸建模有一個(gè)目標(biāo)就是求解最優(yōu)的系數(shù)使似然函數(shù)最大化。而下降法可以用來(lái)是損失函數(shù)最小化。先說(shuō)似然函數(shù)最大化,我們可以令模型的系數(shù)為剛才舉得例子的x1,x2即自變量,那么我們就可以不斷迭代,找到最后的最大的似然函數(shù)和最佳的一組系數(shù)。系數(shù)的梯度上升迭代式可以寫為,下面的α就是移動(dòng)的步長(zhǎng),所乘的就是梯度。
所以,我們可以發(fā)現(xiàn),逐步回歸等算法其實(shí)優(yōu)化模型的入模變量,梯度上升法是在選定入模變量之后,求最佳的系數(shù)去優(yōu)化模型。那么,在實(shí)踐上我們就可以在sas擬合完模型,選定變量后,在用R或者python用梯度上升法去求解最優(yōu)的系數(shù),但是需要明確一點(diǎn)嗎,說(shuō)是最優(yōu)那是基于損失函數(shù)是一個(gè)凸函數(shù),當(dāng)損失函數(shù)不是凸函數(shù)的時(shí)候,只是找到的是局部最優(yōu)。L()這個(gè)函數(shù)是自己定義的一個(gè)損失函數(shù)組成的一個(gè)類似最大似然估計(jì)的一個(gè)函數(shù)。
具體了解下,還是看不懂,可以復(fù)習(xí)一下導(dǎo)數(shù),偏導(dǎo)數(shù)以及方向?qū)?shù)。因?yàn)樘荻鹊膬?nèi)容實(shí)在有點(diǎn)多,所以還是希望大家對(duì)于梯度不了解的,可以上網(wǎng)查詢了解。我最初想用這個(gè)的時(shí)候,我是在想一個(gè)問(wèn)題,就是假設(shè)我不用最大似然估計(jì)定義的損失函數(shù),假設(shè)我想用其他損失函數(shù)擬合參數(shù),那我該怎么辦,所以才有了今天的分享,可能我說(shuō)的優(yōu)點(diǎn)亂,我給出梯度擬合參數(shù)的過(guò)程,你可能會(huì)清晰些:
那么作為R語(yǔ)言小白的我,要出動(dòng)獻(xiàn)出我的梯度上升的代碼了,還是參考別人的更改,這里的數(shù)據(jù)集使用的是你逐步回歸選下來(lái)的變量。這里這是重新擬合參數(shù),不適用你原來(lái)擬合的參數(shù),是不是很作,我也覺(jué)得我很作。鏈接在這:http://blog.csdn.net/yuanhangzhegogo/article/details/40613951。
D<-F[-which(names(F) %in% c('APPL_ID','APPL_STATUS_1'))]
# 為等下產(chǎn)生的樣本的矩陣做準(zhǔn)備,所以把主鍵還有因變量刪掉
Y=F$APPL_STATUS_1
# 將因變量單獨(dú)拿出來(lái),等下要進(jìn)行運(yùn)算
m<-length(Y)
# 取出y的長(zhǎng)度,為的是等下構(gòu)造截距變量,設(shè)為1
#自變量增加一列構(gòu)造矩陣
x1<-rep(1,m)
# 生成截距變量,設(shè)為1
Y<-as.matrix(F$APPL_STATUS_1)
# 生成因變量的矩陣等下可以計(jì)算
X<-as.matrix(data.frame(x1,D))
#生成自變量矩陣,等下計(jì)算
maxiteration=2000
#設(shè)定迭代次數(shù)
theta<-matrix(rep(0,14),ncol=1)
# 設(shè)置初始的系數(shù)
#設(shè)定學(xué)習(xí)速度
alpha=0.0001
pred<-data.frame()
# 生成一個(gè)空表
for ( n in c(1:maxiteration)){
#計(jì)算梯度
p<-1/(1+exp(-X%*%theta))
#計(jì)算通過(guò)填入?yún)?shù)之后的預(yù)測(cè)概率
grad=t(X)%*%(Y-p)
#放入公式計(jì)算
a<-theta
# 把前一個(gè)的參數(shù)矩陣賦給a
theta=theta+alpha*grad
# 計(jì)算梯度上升的一個(gè)參數(shù)
interval<-theta-a
# 計(jì)算之間的差值
dd<-data.frame(interval,sum=sum(interval),theta)
# 合并差值,差值的累計(jì),以及對(duì)應(yīng)的參數(shù)
pred<-rbind(pred,dd)
# 縱向合并每一次迭代的數(shù)據(jù)
print(n)
# 打印迭代到哪里,好檢查錯(cuò)誤以及進(jìn)度
}
出來(lái)的結(jié)果看數(shù)據(jù)集看pred:
最后一列是參數(shù)估計(jì),中間是兩次梯度相減的累加,可以看到迭代了2000次之后,他的差距已經(jīng)很小很小的,基本可以斷定快到山頂了,你要是覺(jué)得這樣子差距還是讓你不滿意,你可以設(shè)置迭代次數(shù)到3000次。第一列是兩個(gè)梯度的各個(gè)值的相減,這是為了讓你看到迭代的過(guò)程該變量的權(quán)重的變小了還是變大了。當(dāng)然你也可以更改我的代碼,把他改成迭代到兩次相減的數(shù)小于你設(shè)置的數(shù)就停止。
數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼
若不方便掃碼,搜微信號(hào):CDAshujufenxi
SQL Server 中 CONVERT 函數(shù)的日期轉(zhuǎn)換:從基礎(chǔ)用法到實(shí)戰(zhàn)優(yōu)化 在 SQL Server 的數(shù)據(jù)處理中,日期格式轉(zhuǎn)換是高頻需求 —— 無(wú)論 ...
2025-09-18MySQL 大表拆分與關(guān)聯(lián)查詢效率:打破 “拆分必慢” 的認(rèn)知誤區(qū) 在 MySQL 數(shù)據(jù)庫(kù)管理中,“大表” 始終是性能優(yōu)化繞不開(kāi)的話題。 ...
2025-09-18CDA 數(shù)據(jù)分析師:表結(jié)構(gòu)數(shù)據(jù) “獲取 - 加工 - 使用” 全流程的賦能者 表結(jié)構(gòu)數(shù)據(jù)(如數(shù)據(jù)庫(kù)表、Excel 表、CSV 文件)是企業(yè)數(shù)字 ...
2025-09-18DSGE 模型中的 Et:理性預(yù)期算子的內(nèi)涵、作用與應(yīng)用解析 動(dòng)態(tài)隨機(jī)一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開(kāi)始提取前,需先判斷 TIF 文件的類型 —— ...
2025-09-17CDA 數(shù)據(jù)分析師:解鎖表結(jié)構(gòu)數(shù)據(jù)特征價(jià)值的專業(yè)核心 表結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 規(guī)范存儲(chǔ)的結(jié)構(gòu)化數(shù)據(jù),如數(shù)據(jù)庫(kù)表、Excel 表、 ...
2025-09-17Excel 導(dǎo)入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實(shí)戰(zhàn)應(yīng)用 在用 Python(如 pandas 庫(kù))處理 Excel 數(shù)據(jù)時(shí),“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗(yàn)與 t 檢驗(yàn):差異、適用場(chǎng)景與實(shí)踐應(yīng)用 在數(shù)據(jù)分析與統(tǒng)計(jì)學(xué)領(lǐng)域,假設(shè)檢驗(yàn)是驗(yàn)證研究假設(shè)、判斷數(shù)據(jù)差異是否 “ ...
2025-09-16CDA 數(shù)據(jù)分析師:掌控表格結(jié)構(gòu)數(shù)據(jù)全功能周期的專業(yè)操盤手 表格結(jié)構(gòu)數(shù)據(jù)(以 “行 - 列” 存儲(chǔ)的結(jié)構(gòu)化數(shù)據(jù),如 Excel 表、數(shù)據(jù) ...
2025-09-16MySQL 執(zhí)行計(jì)劃中 rows 數(shù)量的準(zhǔn)確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調(diào)優(yōu)中,EXPLAIN執(zhí)行計(jì)劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對(duì)象的 text 與 content:區(qū)別、場(chǎng)景與實(shí)踐指南 在 Python 進(jìn)行 HTTP 網(wǎng)絡(luò)請(qǐng)求開(kāi)發(fā)時(shí)(如使用requests ...
2025-09-15CDA 數(shù)據(jù)分析師:激活表格結(jié)構(gòu)數(shù)據(jù)價(jià)值的核心操盤手 表格結(jié)構(gòu)數(shù)據(jù)(如 Excel 表格、數(shù)據(jù)庫(kù)表)是企業(yè)最基礎(chǔ)、最核心的數(shù)據(jù)形態(tài) ...
2025-09-15Python HTTP 請(qǐng)求工具對(duì)比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請(qǐng)求(如接口調(diào)用、數(shù)據(jù)爬取 ...
2025-09-12解決 pd.read_csv 讀取長(zhǎng)浮點(diǎn)數(shù)據(jù)的科學(xué)計(jì)數(shù)法問(wèn)題 為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長(zhǎng)浮點(diǎn)數(shù)據(jù)時(shí)的科學(xué)計(jì)數(shù)法問(wèn)題 ...
2025-09-12CDA 數(shù)據(jù)分析師:業(yè)務(wù)數(shù)據(jù)分析步驟的落地者與價(jià)值優(yōu)化者 業(yè)務(wù)數(shù)據(jù)分析是企業(yè)解決日常運(yùn)營(yíng)問(wèn)題、提升執(zhí)行效率的核心手段,其價(jià)值 ...
2025-09-12用 SQL 驗(yàn)證業(yè)務(wù)邏輯:從規(guī)則拆解到數(shù)據(jù)把關(guān)的實(shí)戰(zhàn)指南 在業(yè)務(wù)系統(tǒng)落地過(guò)程中,“業(yè)務(wù)邏輯” 是連接 “需求設(shè)計(jì)” 與 “用戶體驗(yàn) ...
2025-09-11塔吉特百貨孕婦營(yíng)銷案例:數(shù)據(jù)驅(qū)動(dòng)下的精準(zhǔn)零售革命與啟示 在零售行業(yè) “流量紅利見(jiàn)頂” 的當(dāng)下,精準(zhǔn)營(yíng)銷成為企業(yè)突圍的核心方 ...
2025-09-11CDA 數(shù)據(jù)分析師與戰(zhàn)略 / 業(yè)務(wù)數(shù)據(jù)分析:概念辨析與協(xié)同價(jià)值 在數(shù)據(jù)驅(qū)動(dòng)決策的體系中,“戰(zhàn)略數(shù)據(jù)分析”“業(yè)務(wù)數(shù)據(jù)分析” 是企業(yè) ...
2025-09-11Excel 數(shù)據(jù)聚類分析:從操作實(shí)踐到業(yè)務(wù)價(jià)值挖掘 在數(shù)據(jù)分析場(chǎng)景中,聚類分析作為 “無(wú)監(jiān)督分組” 的核心工具,能從雜亂數(shù)據(jù)中挖 ...
2025-09-10統(tǒng)計(jì)模型的核心目的:從數(shù)據(jù)解讀到?jīng)Q策支撐的價(jià)值導(dǎo)向 統(tǒng)計(jì)模型作為數(shù)據(jù)分析的核心工具,并非簡(jiǎn)單的 “公式堆砌”,而是圍繞特定 ...
2025-09-10