python 用逐步回归筛选变量

2023-11-10

在回归分析中,影响因变量y的因素很多,而有些自变量的对目标变量y的影响程度不同,为了建立一个相对最优的回归方程,我们需要筛选掉对目标变量y影响不大的变量,这就涉及到了变量选择问题。

逐步回归是通过假设检验的方法来筛选强特征,但如果直接用特征变量和结果变量做回归,看系数的正负和大小来判断变量的相关性,其实也是合理的,但是为了考虑变量间的相互作用在回归模型中对结果的影响,通常还是应用逐步回归的方法。

在逐步回归中,提取哪些变量主要基于的假设是:在线性条件下,哪些变量组合能够更显著的影响因变量,则将其保留。

保留的具体操作方法有三种:

1.Forwardselection:从前向后,首先模型中只有一个对因变量影响最显著的自变量,之后尝试将加入另一自变量,观察加入自变量后的整个模型对因变量的影响是否显著增加(这里需要进行检验,如F,t,r方),通过这一过程反复迭代,直到没有自变量再符合加入模型的条件;
2.Backwardelimination:从后向前,此时,所有变量均放入模型,之后尝试将其中一个自变量从模型中剔除,看整个模型对因变量的影响是否有显著变化,之后将使影响减少的最小的变量剔除出队列,此过程不断迭代,直到没有自变量符合剔除的条件。
3.向前向后逐步回归:即前两种的结合,不是一味的增加变量,而是增加一个后,对整个模型的所有变量进行检验,剔除作用不显著的变量,最终得到一个相对最优的变量组合。

Python中逐步回归的实现

# -*- coding: utf-8 -*-

# 载入包
import pandas as pd
from statsmodels.formula.api import ols #加载ols模型
from sklearn.preprocessing import LabelEncoder


# 读取数据
data_path='D:/机器学习/实验作业/实验7/'
data=pd.read_excel(data_path+'Reg_RawDt.xlsx')

# 清洗面积段这个标签
le = LabelEncoder()
y6 = le.fit_transform(data['面积段'])
data['面积段']=y6


house_data=data

#分训练集测试集
import random
random.seed(123) #设立随机数种子
a=random.sample(range(len(house_data)),round(len(house_data)*0.3))
house_test=[]
for i in a:
    house_test.append(house_data.iloc[i])
house_test=pd.DataFrame(house_test)
house_train=house_data.drop(a)

# print(house_train)
# print(house_test)



#定义向前逐步回归函数
def forward_select(data,target):
    variate=set(data.columns)  #将字段名转换成字典类型
    variate.remove(target)  #去掉因变量的字段名
    selected=[]
    current_score,best_new_score=float('inf'),float('inf')  #目前的分数和最好分数初始值都为无穷大(因为AIC越小越好)
    #循环筛选变量
    while variate:
        aic_with_variate=[]
        for candidate in variate:  #逐个遍历自变量
            formula="{}~{}".format(target,"+".join(selected+[candidate]))  #将自变量名连接起来
            aic=ols(formula=formula,data=data).fit().aic  #利用ols训练模型得出aic值
            aic_with_variate.append((aic,candidate))  #将第每一次的aic值放进空列表
        aic_with_variate.sort(reverse=True)  #降序排序aic值
        best_new_score,best_candidate=aic_with_variate.pop()  #最好的aic值等于删除列表的最后一个值,以及最好的自变量等于列表最后一个自变量
        if current_score>best_new_score:  #如果目前的aic值大于最好的aic值
            variate.remove(best_candidate)  #移除加进来的变量名,即第二次循环时,不考虑此自变量了
            selected.append(best_candidate)  #将此自变量作为加进模型中的自变量
            current_score=best_new_score  #最新的分数等于最好的分数
            print("aic is {},continuing!".format(current_score))  #输出最小的aic值
        else:
            print("for selection over!")
            break
    formula="{}~{}".format(target,"+".join(selected))  #最终的模型式子
    print("final formula is {}".format(formula))
    model=ols(formula=formula,data=data).fit()
    return(model)

# 利用向前逐步回归筛选变量
lm_0=forward_select(data=house_data,target='price')
print(lm_0.summary())

lm_1=ols("price~area+Ifsubway+幼儿园个数+面积段+室+中层住宅+toward_3+医院数量+厅+低中高住宅分类+GroupareaSplit+银行个数+所处楼层是否低层+公园个数+toward_无+小学个数+中学个数",data=house_train).fit()
print(lm_1.summary())
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python 用逐步回归筛选变量 的相关文章

随机推荐

  • 第十三章 网络命名空间(内核源码实现)--基于Linux3.10

    下载地址 http download csdn net detail shichaog 8620701 有两篇翻译博文 Lxc之二 网络设置 和 linuxnamespace 之使用 LXC文章中关于网络的设置是从用户空间配置的 从该文章可
  • 安装JDK7和Tomcat8.5后,Tomcat服务启动不了

    windows64位系统安装JDK7 0与Tomcat8 5 35需要注意的 一 JDK7 0和Tomcat8 5 35都要是64的版本 否则Tomcat服务会启动不了 JDK7 0如果不是64位 安装的时候会自动安装在C Program
  • Qt中正则表达式

    TOC 不积跬步 无以至千里 Qt中正则表达式 正则表达式 regular expression 就是在一个文本中匹配子字符串的一种模式 pattern 它可以简写为 regexp 一个regexp主要应用在以下几个方面 验证 一个rege
  • 数据结构c语言版如何运行程序,数据结构c语言怎么运行啊

    首先要确定你想采用线性表的顺序存储结构还是链式存储结构 以顺序存储结构为例 include include define ERROR 0 define OK 1 typedef int Status typedef int ElemType
  • pom 通用配置

  • Vue自定义指令directive(详细)

    个人网站 紫陌 笔记分享网 想寻找共同学习交流 共同成长的伙伴 请点击 前端学习交流群 1 什么是自定义指令 v 开头的行内属性 都是指令 不同的指令可以完成或实现不同的功能 除了内置指令外 Vue 也允许注册自定义指令 有的情况下 你仍然
  • 服务器上安装mpi4py

    服务器上安装mpi4py 尝试方法1 失败 python m pip install mpi4py 结果报错 缺失某一个库文件导致编译失败 解决方法 如果有权限的话可以sudo安装libopenmpi dev解决 否则只能手动编译 尝试方法
  • Python - 注释

    单行注释 comments 多行注释 comments comments 模块文档 1 用法 模块名 doc 2 显示代码块的简要说明 3 任何代码块 文件 类 函数 均可以有文档说明 不跨行 comments 跨行 comments co
  • OkHttp:自定义缓存

    设置OkHttp 的缓存策略 没网络直接读取缓存 并且设置缓存生命周期为 30s 自定义 Interceptor 请求策略 没有网络直接读取缓存 public class CacheRequestInterceptor implements
  • 目标检测算法——mmdetection下面的deformable-detr运行

    1 环境 包 版本 mmcv full 1 4 2 mmdet 2 19 1 torch 1 10 0 cu113 torchvision 0 11 1 cu113 2 文档 mmet官方文档 mmcv官方文档 源码下载 3 数据集 自定义
  • javascript的比较运算符

    比较运算符的隐士转换 这里只比较 字符串和 数字 对象的比较没有意义 一般返回的是false 234 lt 78 true 234 lt 78 false 234 lt 78 false 总结 只有当 comparison operator
  • Qt中的ui指针和this指针

    本博客中关于C 和QT 无特别说明开发环境为 Visual studio 2013 QT为5 9 9 特此说明 谨慎参考 希望能帮助到爱好者 首先看ui指针的定义 在mainwindow h中 private Ui MainWindow u
  • VisualStudio 无法登录

    文章转载自 https cloud tencent com developer article 1342617 如果遇到 visualStudio 无法登陆 可以看下我的方法 可能有用 尝试关闭代理 打开设置 网络 代理 关了它 试试 如果
  • zookeeper基本概念及使用场景

    zookeeper基本概念及使用场景 Zookeeper作为一种协调分布式应用高性能的调度服务 在ZooKeeper中 节点类型可以分为 持久节点 PERSISTENT 临时节点 EPHEMERAL 时序节点 SEQUENTIAL 具体在节
  • 机器学习项目的实验方法

    发现对于一些机器学习项目 在项目进行中往往会直接就开始编码实现 而没有一套完整的方法论和有实操性的流程 经过一些粗浅的研究 下面写出一些对于此的部分思考 或有参考借鉴之用 实验开始前 需要清楚研究什么 如何收集数据 打算怎样分析 1 研究目
  • Crunchfish发布XR Skeleton手势交互解决方案

    转自 https baijiahao baidu com s id 1677811512042412943 wfr spider for pc 移动交互解决方案开发商Crunchfish日前发布了名为XR Skeleton的手势控制技术 只
  • HttpClient的”javax.net.ssl.SSLPeerUnverifiedException: peer not authenticated”异常

    在开发https应用时 你的测试服务器常常没有一个 有效的 SSL证书 在你的客户端连接测试服务器时 如下的异常会被抛出 javax net ssl SSLPeerUnverifiedException peer not authentic
  • CDN方式使用Vue,VantUI组件方式

    代码示例
  • 这个小工具竟然可以让我保持健康

    Part1背景 我有个同事今天跟我说 他总是忘记喝水 这可怎么办 作为程序员的我们 本就每天久坐缺乏锻炼 如果再忘记喝水 那将会带来多么严重的后果 所以我决定为他做一个小工具来提醒他定时喝水 活动 Part2前期准备 1下载依赖软件 pip
  • python 用逐步回归筛选变量

    在回归分析中 影响因变量y的因素很多 而有些自变量的对目标变量y的影响程度不同 为了建立一个相对最优的回归方程 我们需要筛选掉对目标变量y影响不大的变量 这就涉及到了变量选择问题 逐步回归是通过假设检验的方法来筛选强特征 但如果直接用特征变