亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

如何用python做逐步回歸

 更新時間:2021年04月06日 14:49:24   作者:Hundred°C  
這篇文章主要介紹了如何用python 做逐步回歸,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下

算法介紹

逐步回歸是一種線性回歸模型自變量選擇方法;
逐步回歸的基本思想是將變量逐個引入模型,每引入一個解釋變量后都要進行F檢驗,并對已經(jīng)選入的解釋變量逐個進行t檢驗,當原來引入的解釋變量由于后面解釋變量的引入變得不再顯著時,則將其刪除。以確保每次引入新的變量之前回歸方程中只包含顯著性變量。這是一個反復(fù)的過程,直到既沒有顯著的解釋變量選入回歸方程,也沒有不顯著的解釋變量從回歸方程中剔除為止。以保證最后所得到的解釋變量集是最優(yōu)的。
這里我們選擇赤池信息量(Akaike Information Criterion)來作為自變量選擇的準則,赤池信息量(AIC)達到最?。夯谧畲笏迫还烙嬙淼哪P瓦x擇準則。

數(shù)據(jù)情況

案例

在現(xiàn)實生活中,影響一個地區(qū)居民消費的因素有很多,例如一個地區(qū)的人均生產(chǎn)總值、收入水平等等,本案例選取了9個解釋變量研究城鎮(zhèn)居民家庭平均每人全年的消費新支出y,解釋變量為:
x1——居民的食品花費
x2——居民的衣著消費
x3——居民的居住花費
x4——居民的醫(yī)療保健花費
x5——居民的文教娛樂花費
x6——地區(qū)的職工平均工資
x7——地區(qū)的人均GDP
x8——地區(qū)的消費價格指數(shù)
x9——地區(qū)的失業(yè)率(%)

數(shù)據(jù)

代碼

# -*- coding: UTF-8 -*-

import numpy as np
import statsmodels.api as sm
import statsmodels.formula.api as smf
from statsmodels.stats.api import anova_lm
import matplotlib.pyplot as plt
import pandas as pd
from patsy import dmatrices
import itertools as it
import random


# Load data 讀取數(shù)據(jù)
df = pd.read_csv('data3.1.csv',encoding='gbk')
print(df)


target = 'y'
variate = set(df.columns) #獲取列名
variate.remove(target) #去除無關(guān)列
variate.remove('地區(qū)')

#定義多個數(shù)組,用來分別用來添加變量,刪除變量
x = []
variate_add = []
variate_del = variate.copy()
# print(variate_del)
y = random.sample(variate,3) #隨機生成一個選模型,3為變量的個數(shù)
print(y)
#將隨機生成的三個變量分別輸入到 添加變量和刪除變量的數(shù)組
for i in y:
 variate_add.append(i)
 x.append(i)
 variate_del.remove(i)

global aic #設(shè)置全局變量 這里選擇AIC值作為指標
formula="{}~{}".format("y","+".join(variate_add)) #將自變量名連接起來
aic=smf.ols(formula=formula,data=df).fit().aic #獲取隨機函數(shù)的AIC值,與后面的進行對比
print("隨機化選模型為:{}~{},對應(yīng)的AIC值為:{}".format("y","+".join(variate_add), aic))
print("\n")



#添加變量
def forwark():
 score_add = []
 global best_add_score
 global best_add_c
 print("添加變量")
 for c in variate_del:
  formula = "{}~{}".format("y", "+".join(variate_add+[c]))
  score = smf.ols(formula = formula, data = df).fit().aic
  score_add.append((score, c)) #將添加的變量,以及新的AIC值一起存儲在數(shù)組中
  
  print('自變量為{},對應(yīng)的AIC值為:{}'.format("+".join(variate_add+[c]), score))

 score_add.sort(reverse=True) #對數(shù)組內(nèi)的數(shù)據(jù)進行排序,選擇出AIC值最小的
 best_add_score, best_add_c = score_add.pop()
 
 print("最小AIC值為:{}".format(best_add_score))
 print("\n")

#刪除變量
def back():
 score_del = []
 global best_del_score
 global best_del_c
 print("剔除變量")
 for i in x:

  select = x.copy() #copy一個集合,避免重復(fù)修改到原集合
  select.remove(i)
  formula = "{}~{}".format("y","+".join(select))
  score = smf.ols(formula = formula, data = df).fit().aic
  print('自變量為{},對應(yīng)的AIC值為:{}'.format("+".join(select), score))
  score_del.append((score, i))

 score_del.sort(reverse=True) #排序,方便將最小值輸出
 best_del_score, best_del_c = score_del.pop() #將最小的AIC值以及對應(yīng)剔除的變量分別賦值
 print("最小AIC值為:{}".format(best_del_score))
 print("\n")

print("剩余變量為:{}".format(variate_del))
forwark()
back()

while variate:
  
#  forwark()
#  back()
 if(aic < best_add_score < best_del_score or aic < best_del_score < best_add_score):
  print("當前回歸方程為最優(yōu)回歸方程,為{}~{},AIC值為:{}".format("y","+".join(variate_add), aic))
  break
 elif(best_add_score < best_del_score < aic or best_add_score < aic < best_del_score):
  print("目前最小的aic值為{}".format(best_add_score))
  print('選擇自變量:{}'.format("+".join(variate_add + [best_add_c]))) 
  print('\n')
  variate_del.remove(best_add_c)
  variate_add.append(best_add_c)
  print("剩余變量為:{}".format(variate_del))
  aic = best_add_score
  forwark()
 else:
  print('當前最小AIC值為:{}'.format(best_del_score))
  print('需要剔除的變量為:{}'.format(best_del_c))
  aic = best_del_score #將AIC值較小的選模型AIC值賦給aic再接著下一輪的對比
  x.remove(best_del_c) #在原集合上剔除選模型所對應(yīng)剔除的變量
  back()
  

結(jié)果

以上就是如何用python 做逐步回歸的詳細內(nèi)容,更多關(guān)于python 逐步回歸的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 基于python實現(xiàn)垂直爬蟲系統(tǒng)的方法詳解

    基于python實現(xiàn)垂直爬蟲系統(tǒng)的方法詳解

    這篇文章主要為大家詳細介紹了python實現(xiàn)垂直爬蟲系統(tǒng)的方法,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-03-03
  • Python中pandas的dataframe過濾數(shù)據(jù)方法

    Python中pandas的dataframe過濾數(shù)據(jù)方法

    這篇文章主要介紹了Python中pandas的dataframe過濾數(shù)據(jù)方法,Pandas是另外一個用于處理高級數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)分析的Python庫,Pandas是基于Numpy構(gòu)建的一種工具,需要的朋友可以參考下
    2023-07-07
  • Python3?中return和yield的區(qū)別

    Python3?中return和yield的區(qū)別

    這篇文章主要介紹了Python3?中return和yield的區(qū)別,return和yield都用來返回值;在一次性地返回所有值場景中return和yield的作用是一樣的,但是具體有什么區(qū)別呢,帶著疑問一起進入下面文章學(xué)習(xí)詳細內(nèi)容吧
    2022-06-06
  • python去除列表中的空值元素實戰(zhàn)技巧

    python去除列表中的空值元素實戰(zhàn)技巧

    這篇文章主要介紹了python實戰(zhàn)技巧之去除列表中的空值元素,搜集針對python高效處理數(shù)據(jù)的核心代碼,今天是實現(xiàn)去除列表中的空值元素,需要的朋友可以參考下
    2023-02-02
  • 使用Python實現(xiàn)一個蔡徐坤大戰(zhàn)籃球的小游戲(推薦)

    使用Python實現(xiàn)一個蔡徐坤大戰(zhàn)籃球的小游戲(推薦)

    這篇文章主要介紹了用Python實現(xiàn)一個蔡徐坤大戰(zhàn)籃球的小游戲,本文通過示例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-12-12
  • OpenCV+Python--RGB轉(zhuǎn)HSI的實現(xiàn)

    OpenCV+Python--RGB轉(zhuǎn)HSI的實現(xiàn)

    今天小編就為大家分享一篇OpenCV+Python--RGB轉(zhuǎn)HSI的實現(xiàn),具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-11-11
  • Pandas實現(xiàn)批量拆分與合并Excel的示例代碼

    Pandas實現(xiàn)批量拆分與合并Excel的示例代碼

    這篇文章主要為大家詳細講講如何利用python Pandas實現(xiàn)批量拆分與合并Excel,文中有非常詳細的的代碼示例,對正在學(xué)習(xí)python的小伙伴們很有幫助,需要的朋友可以參考下
    2022-05-05
  • python中Requests發(fā)送json格式的post請求方法

    python中Requests發(fā)送json格式的post請求方法

    這篇文章主要介紹了python中Requests發(fā)送json格式的post請求方法,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,感興趣的朋友可以參考一下
    2022-09-09
  • python numpy 常用隨機數(shù)的產(chǎn)生方法的實現(xiàn)

    python numpy 常用隨機數(shù)的產(chǎn)生方法的實現(xiàn)

    這篇文章主要介紹了python numpy 常用隨機數(shù)的產(chǎn)生方法的實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-08-08
  • Python的Django中將文件上傳至七牛云存儲的代碼分享

    Python的Django中將文件上傳至七牛云存儲的代碼分享

    七牛云存儲可以幫助服務(wù)器轉(zhuǎn)存圖片等數(shù)據(jù),類似于Dropbox等存儲服務(wù),這里就帶給大家Python的Django中將文件上傳至七牛云存儲的代碼分享,需要的朋友可以參考下
    2016-06-06

最新評論