濮阳杆衣贸易有限公司

主頁(yè) > 知識(shí)庫(kù) > 如何用python做逐步回歸

如何用python做逐步回歸

熱門(mén)標(biāo)簽:電話(huà)機(jī)器人貸款詐騙 蘇州人工外呼系統(tǒng)軟件 電話(huà)外呼系統(tǒng)招商代理 淮安呼叫中心外呼系統(tǒng)如何 打印谷歌地圖標(biāo)注 廣東旅游地圖標(biāo)注 佛山通用400電話(huà)申請(qǐng) 京華圖書(shū)館地圖標(biāo)注 看懂地圖標(biāo)注方法

算法介紹

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

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

案例

在現(xiàn)實(shí)生活中,影響一個(gè)地區(qū)居民消費(fèi)的因素有很多,例如一個(gè)地區(qū)的人均生產(chǎn)總值、收入水平等等,本案例選取了9個(gè)解釋變量研究城鎮(zhèn)居民家庭平均每人全年的消費(fèi)新支出y,解釋變量為:
x1——居民的食品花費(fèi)
x2——居民的衣著消費(fèi)
x3——居民的居住花費(fèi)
x4——居民的醫(yī)療保健花費(fèi)
x5——居民的文教娛樂(lè)花費(fèi)
x6——地區(qū)的職工平均工資
x7——地區(qū)的人均GDP
x8——地區(qū)的消費(fèi)價(jià)格指數(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) #去除無(wú)關(guān)列
variate.remove('地區(qū)')

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

global aic #設(shè)置全局變量 這里選擇AIC值作為指標(biāo)
formula="{}~{}".format("y","+".join(variate_add)) #將自變量名連接起來(lái)
aic=smf.ols(formula=formula,data=df).fit().aic #獲取隨機(jī)函數(shù)的AIC值,與后面的進(jìn)行對(duì)比
print("隨機(jī)化選模型為:{}~{},對(duì)應(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值一起存儲(chǔ)在數(shù)組中
  
  print('自變量為{},對(duì)應(yīng)的AIC值為:{}'.format("+".join(variate_add+[c]), score))

 score_add.sort(reverse=True) #對(duì)數(shù)組內(nèi)的數(shù)據(jù)進(jìn)行排序,選擇出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一個(gè)集合,避免重復(fù)修改到原集合
  select.remove(i)
  formula = "{}~{}".format("y","+".join(select))
  score = smf.ols(formula = formula, data = df).fit().aic
  print('自變量為{},對(duì)應(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值以及對(duì)應(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("當(dāng)前回歸方程為最優(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('當(dāng)前最小AIC值為:{}'.format(best_del_score))
  print('需要剔除的變量為:{}'.format(best_del_c))
  aic = best_del_score #將AIC值較小的選模型AIC值賦給aic再接著下一輪的對(duì)比
  x.remove(best_del_c) #在原集合上剔除選模型所對(duì)應(yīng)剔除的變量
  back()
  

結(jié)果

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

您可能感興趣的文章:
  • 利用python實(shí)現(xiàn)逐步回歸
  • 如何用Python徒手寫(xiě)線(xiàn)性回歸
  • python 實(shí)現(xiàn)邏輯回歸
  • python 實(shí)現(xiàn)一個(gè)簡(jiǎn)單的線(xiàn)性回歸案例
  • python 還原梯度下降算法實(shí)現(xiàn)一維線(xiàn)性回歸
  • python 牛頓法實(shí)現(xiàn)邏輯回歸(Logistic Regression)
  • Python 實(shí)現(xiàn)3種回歸模型(Linear Regression,Lasso,Ridge)的示例
  • python實(shí)現(xiàn)邏輯回歸的示例
  • 如何在python中實(shí)現(xiàn)線(xiàn)性回歸
  • 帶你學(xué)習(xí)Python如何實(shí)現(xiàn)回歸樹(shù)模型
  • python rolling regression. 使用 Python 實(shí)現(xiàn)滾動(dòng)回歸操作
  • Python 線(xiàn)性回歸分析以及評(píng)價(jià)指標(biāo)詳解

標(biāo)簽:畢節(jié) 駐馬店 股票 湖州 江蘇 呼和浩特 中山 衡水

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《如何用python做逐步回歸》,本文關(guān)鍵詞  如,何用,python,做,逐步,回歸,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問(wèn)題,煩請(qǐng)?zhí)峁┫嚓P(guān)信息告之我們,我們將及時(shí)溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無(wú)關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《如何用python做逐步回歸》相關(guān)的同類(lèi)信息!
  • 本頁(yè)收集關(guān)于如何用python做逐步回歸的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    吕梁市| 延川县| 深州市| 屏南县| 南陵县| 漳浦县| 凭祥市| 蒙阴县| 怀远县| 河东区| 布尔津县| 铅山县| 长垣县| 饶阳县| 麻江县| 喀喇| 盱眙县| 新建县| 理塘县| 页游| 连南| 东乡族自治县| 古浪县| 轮台县| 施甸县| 双流县| 阿坝县| 甘孜县| 安义县| 阜新市| 贺兰县| 汉寿县| 砀山县| 乳源| 邓州市| 晋州市| 甘洛县| 莱阳市| 思南县| 阿勒泰市| 嘉峪关市|