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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【模型开发】逐步回归

發(fā)布時間:2025/3/21 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【模型开发】逐步回归 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1.定義

??當(dāng)變量中含有對被解釋變量影響不大的解釋變量時,可能因為誤差平方和的自由度減小而使方差的估計增大,從而影響回歸預(yù)測的精度,適當(dāng)?shù)倪x擇一個變量建立一個最優(yōu)的回歸方程十分重要。

??逐步回歸(Stepwise Regression)的基本思想是將變量逐個引入模型,每引入一個解釋變量后都要進行F檢驗,并對已經(jīng)選入的解釋變量逐個進行t檢驗,當(dāng)原來引入的解釋變量由于后面解釋變量的引入變得不再顯著時,則將其刪除。以確保每次引入新的變量之前回歸方程中只包含顯著性變量。這是一個反復(fù)的過程,直到既沒有顯著的解釋變量選入回歸方程,也沒有不顯著的解釋變量從回歸方程中剔除為止。以保證最后所得到的解釋變量集是最優(yōu)的。

??依據(jù)上述思想,可利用逐步回歸篩選并剔除引起多重共線性的變量,其具體步驟如下:先用被解釋變量對每一個所考慮的解釋變量做簡單回歸,然后以對被解釋變量貢獻最大的解釋變量所對應(yīng)的回歸方程為基礎(chǔ),再逐步引入其余解釋變量。經(jīng)過逐步回歸,使得最后保留在模型中的解釋變量既是重要的,又沒有嚴重多重共線性。

2.分類

??在逐步回歸中,提取哪些變量主要基于的假設(shè)是:在線性條件下,哪些變量組合能夠解釋更多的因變量變異,則將其保留。逐步回歸法選擇變量的過程包含兩個基本步驟:一是從回歸模型中剔出經(jīng)檢驗不顯著的變量,二是引入新變量到回歸模型中,常用的逐步型選元法有前向法、后向法、雙向法。

Forward selection(前向逐步回歸):

??向前法的思想是變量由少到多,屬于貪心算法,每次增加一個,直至沒有可引入的變量為止。具體步驟如下。

  • 步驟1
    ?
    對 p 個回歸自變量x1,x2,...,xp,x_{1},x_{2},...,x_{p},x1?,x2?,...,xp?, 分別同因變量YYY建立一元回歸模型
    ?
    ??????????????????Y=β0+βiXi+?,i=1,...pY = \beta _{0}+\beta _{i}X_{i}+\epsilon ,i = 1,...pY=β0?+βi?Xi?+?,i=1,...p
    ?
    計算變量XiX_{i}Xi?,相應(yīng)的回歸系數(shù)的 F 檢驗統(tǒng)計量的值,記為F1(1),...,Fp(1)F_{1}^{(1)},...,F_{p}^{(1)}F1(1)?,...,Fp(1)?,取其中的最大值Fi1(1)F_{i_{1}}^{(1)}Fi1?(1)?,即
    ?
    ??????????????????Fi1(1)=max{F1(1),...,Fp(1)}F_{i_{1}}^{(1)} = max\left \{ \right.F_{1}^{(1)},...,F_{p}^{(1)}\left. \right \}Fi1?(1)?=max{F1(1)?,...,Fp(1)?}
    ?
    對給定的顯著性水平α\alphaα,記相應(yīng)的臨界值為F(1)F^{(1)}F(1)Fi1(1)>F(1)F_{i_{1}}^{(1)}>F^{(1)}Fi1?(1)?>F(1),則將Xi1X_{i_{1}}Xi1??引入回歸模型,記I1I_{1}I1?為選入變量指標(biāo)集合。

  • 步驟2
    ?
    建立因變量 Y 與自變量子集{Xi1,X1},...,{Xi1,Xi1?1},{Xi1,Xi1=1},...,{Xi1,Xp}\left \{X_{i_{1}},X_{1} \right.\left. \right \},...,\left \{X_{i_{1}},X_{i_{1}-1} \right.\left. \right \},\left \{X_{i_{1}},X_{i_{1}=1} \right.\left. \right \},...,\left \{X_{i_{1}},X_{p} \right.\left. \right \}{Xi1??,X1?},...,{Xi1??,Xi1??1?},{Xi1??,Xi1?=1?},...,{Xi1??,Xp?}的二元回歸模型(即此回歸模型的回歸元為二元的),共有p?1p-1p?1個。計算變量的回歸系數(shù) F 檢驗的統(tǒng)計量值,記為Fk(2)(k?I1)F_{k}^{(2)}(k\notin I_{1})Fk(2)?(k/?I1?),選其中最大者,記為 Fi2(2)F_{i_{2}}^{(2)}Fi2?(2)?,對應(yīng)自變量腳標(biāo)記為i2i_{2}i2?,即:
    ??????????????????Fi2(2)={Fi(2),...,Fi1?1(2),Fi1+1(2),...,Fp(2)}F_{i_{2}}^{(2)} = \left \{ F_{i}^{(2)},...,F_{i_{1}-1}^{(2)},F_{i_{1}+1}^{(2)},...,F_{p}^{(2)} \right \}Fi2?(2)?={Fi(2)?,...,Fi1??1(2)?,Fi1?+1(2)?,...,Fp(2)?}
    ?
    對給定的顯著性水平α\alphaα,記相應(yīng)的臨界值為F(2)F^{(2)}F(2)Fi2(1)>F(2)F_{i_{2}}^{(1)}>F^{(2)}Fi2?(1)?>F(2),則變量Xi2X_{i_{2}}Xi2??引入回歸模型。否則,終止變量引入過程。

  • 步驟3
    ?
    考慮因變量對變量子集{Xi1,Xi2,Xk}\left \{ X_{i_{1}},X_{i_{2}},X_{k}\right \}{Xi1??,Xi2??,Xk?}的回歸重復(fù)步驟2。
    ?
    依此方法重復(fù)進行,每次從未引入回歸模型的自變量中選取一個,知道經(jīng)檢驗沒有變量引入為止。

Backward elimination(后向逐步回歸)

??與 Forward selection 相反,此時,所有變量均放入模型,之后嘗試將其中一個自變量從模型中剔除,看整個模型解釋因變量的變異是否有顯著變化,之后將對殘差平方和貢獻較小的變量剔除;此過程不斷迭代,直到?jīng)]有自變量符合剔除的條件。

Bidirectional elimination(雙向逐步回歸)

?? 這種方法相當(dāng)于將前兩種結(jié)合起來??梢韵胂?#xff0c;如果采用第一種方法,每加入一個自變量,可能會使已存在于模型中的變量單獨對因變量的解釋度減小,當(dāng)其的作用很小(不顯著)時,則可將其從模型中剔除。而第三種方法不是一味的增加變量,而是增加一個后,對整個模型中的所有變量進行檢驗,剔除作用不顯著的變量。最終盡可能得到一個最優(yōu)的變量組合。

?? 可以想象,這樣得到的變量組合,基于當(dāng)前數(shù)據(jù),應(yīng)該是可以最大程度的解釋因變量的變異,但其反面的作用就是會使模型有偏,即所謂的 overfitting 問題;另外,鑒于算法是基于變量解釋度來進行特征提取的,當(dāng)兩個變量對因變量的影響相近時,則不免受到較大的噪聲影響,使特征提取結(jié)果不穩(wěn)定。

3.實施過程

??逐步回歸分析的實施過程是每一步都要對已引入回歸方程的變量計算其偏回歸平方和(即貢獻),然后選一個偏回歸平方和最小的變量,在預(yù)先給定的水平下進行顯著性檢驗,若顯著則該變量不必從回歸方程中剔除,這時方程中其他幾個變量也都不需要剔除(因為其他幾個變量的偏回歸平方和都大于最小的一個更不需要剔除)。相反,如果不顯著,則該變量需要剔除,然后按偏回歸平方和由小到大地依次對方程中其他變量進行檢驗。將對影響不顯著的變量全部剔除,保留的都是顯著的。接著再對未引入回歸方程中的變量分別計算其偏回歸平方和,并選其中偏回歸方程和最大的一個變量,同樣在給定水平下作顯著性檢驗,如果顯著則將該變量引入回歸方程,這一過程一直持續(xù)下去,直到在回歸方程中的變量都不能剔除而又無新變量可以引入時為止,這時逐步回歸過程結(jié)束。

4.案例

R語言下的評分違約預(yù)測模型

setwd('C:\\Users\\zhengyang\\Desktop\\違約預(yù)測')getwd() list.files()raw = read.csv('default of credit card clients.csv',row.names = 1,skip = 1) View(head(raw)) table(raw$default.payment.next.month)#################################################### ################ step1:數(shù)據(jù)基本分析 ################ ########################################################################################################### ################ step2:將數(shù)據(jù)拆分成2份 ################ ####################################################################################################################### ################ step3:給train數(shù)據(jù)集做profiling ################ ############################################################################################################################### ################ step4:給train數(shù)據(jù)集做各分位值 ################ ################################################################################################################################ ################ step5:對train數(shù)據(jù)集做單變量分析 ################ ######################################################################################################################################### ################ step6:根據(jù)前3步對train數(shù)據(jù)集做recoding ################ ########################################################################################################################## ################ step6:相關(guān)性分析 ################ ######################################################################################################## ################ step7:建模--邏輯回歸 ################ ###################################################### head(train_model) #######【模型1】####### model1_glm = glm(default.payment.next.month~.,data = train_model,family = binomial(link = 'logit'))summary_model1_glm = summary(model1_glm);summary_model1_glm #導(dǎo)出模型 model1_glm_df = data.frame(var = row.names(summary_model1_glm$coefficients),summary_model1_glm$coefficients)View(model1_glm_df)write.csv(model1_glm_df,'model1_glm.csv',row.names = F)###################################################### ################ step8:stepwise優(yōu)化 ###################### #############################################################【模型2】####### library(MASS) model_sel = stepAIC(model1_glm,direction = 'both') summary_stepwise = summary(model_sel);summary_stepwise#導(dǎo)出模型 model2_stepwise_df = data.frame(var = row.names(summary_stepwise$coefficients),summary_stepwise$coefficients)View(model2_stepwise_df) write.csv(model2_stepwise_df,'model2_stepwise.csv',row.names = F)#通過stepwise剔除了6個變量,接下來對剩下的17個變量再次計算相關(guān)系數(shù),以及膨脹系數(shù)VIF值 model_vif1 = c('rec_LIMIT_BAL','rec_SEX','rec_MARRIAGE','rec_AGE','rec_PAY_0','rec_PAY_2','rec_PAY_3','rec_PAY_4','rec_PAY_5','rec_PAY_6','rec_BILL_AMT2','rec_BILL_AMT4','rec_PAY_AMT1','rec_PAY_AMT2','rec_PAY_AMT3','rec_PAY_AMT4','rec_PAY_AMT6')train_vif1 = train_model[,c("default.payment.next.month",model_vif1)] str(train_vif1)fit1 = lm(default.payment.next.month~.,data = train_vif1) summary(fit1)library(car) vif1 = data.frame(vif(fit1)) var_vif1 = data.frame(var = row.names(vif1),vif1) View(var_vif1)write.csv(var_vif1,'var_vif_Tried2.csv',row.names = F) #有7個變量的vif值都超過2 #接下來再看一下這17個變量之間的相關(guān)系數(shù) cor_Tried2 = data.frame(cor.table(train_vif1,cor.method = 'pearson')) correlation_Tried2 = data.frame(var = row.names(cor_Tried2),cor_Tried2[,1:ncol(train_vif1)])View(correlation_Tried2) write.csv(correlation_Tried2,'correlation_Tried2.csv',row.names = F)#找出相關(guān)系數(shù)大于0.5的位置 car_df2 = data.frame() for (i in 3:ncol(correlation_Tried2)) {#print(i)car_index = which(abs(correlation_Tried2[,i])<1 & abs(correlation_Tried2[,i])>0.5)car_index_df = data.frame(car_names = rep(names(correlation_Tried2)[i],times = length(car_index)),index = car_index)car_df2 = rbind(car_df2,car_index_df) }View(car_df2)

【參考】

  • 百度百科 https://baike.baidu.com/item/逐步回歸/585832?fr=aladdin

  • Stepwise regression 學(xué)習(xí)筆記 SealHuang http://sealhuang.github.io/stepwise-regression


??對數(shù)據(jù)分析、機器學(xué)習(xí)、數(shù)據(jù)科學(xué)、金融風(fēng)控等感興趣的小伙伴,需要數(shù)據(jù)集、代碼、行業(yè)報告等各類學(xué)習(xí)資料,可添加微信:wu805686220(記得要備注喔!),也可關(guān)注微信公眾號:風(fēng)控圏子(別打錯字,是圏子,不是圈子,算了直接復(fù)制吧!)

關(guān)注公眾號后,可聯(lián)系圈子助手加入如下社群:

  • 機器學(xué)習(xí)風(fēng)控討論群(微信群)
  • 反欺詐討論群(微信群)
  • python學(xué)習(xí)交流群(微信群)
  • 研習(xí)社資料(qq群:102755159)(干貨、資料、項目、代碼、報告、課件)

相互學(xué)習(xí),共同成長。

總結(jié)

以上是生活随笔為你收集整理的【模型开发】逐步回归的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。