python逐步回归筛选变量_Python实现逐步回归(stepwise regression)
逐步回归的基本思想是将变量逐个引入模型,每引入一个解释变量后都要进行F检验,并对已经选入的解释变量逐个进行t检验,当原来引入的解释变量由于后面解释变量的引入变得不再显著时,则将其删除。以确保每次引入新的变量之前回归方程中只包含显著性变量。这是一个反复的过程,直到既没有显著的解释变量选入回归方程,也没有不显著的解释变量从回归方程中剔除为止。以保证最后所得到的解释变量集是最优的。
依据上述思想,可利用逐步回归筛选并剔除引起多重共线性的变量,其具体步骤如下:先用被解释变量对每一个所考虑的解释变量做简单回归,然后以对被解释变量贡献最大的解释变量所对应的回归方程为基础,再逐步引入其余解释变量。经过逐步回归,使得最后保留在模型中的解释变量既是重要的,又没有严重多重共线性。
至今,我们已经有更好算法跳过共线性问题,没有必要在商业脚本里加入逐步回归代码。实际中变量相互关联,因此通过逐步回归思路删除变量解决共线性问题并非最佳思路。更好算法可参考课程《python风控建模实战lendingClub》:http://dwz.date/b626
本文作为学术探讨,介绍逐步回归原理和python代码。当基于最小二乘法训练线性回归模型而发生过拟合现象时,最小二乘法没有办法阻止学习过程。前向逐步回归的引入则可以控制学习过程中出现的过拟合,它是最小二乘法的一种改进或者说调整,其基本思想是由少到多地向模型中引入变量,每次增加一个,直到没有可以引入的变量为止。最后通过比较在预留样本上计算出的错误进行模型的选择。
实现代码如下:
wine_data的表结构如下图所示:
wine_data中部分属性的统计信息如下:
上述代码的输出结果为:
上述代码绘制的图像如下:
RMSE与属性数量的关系图像:
错误直方图:
实际值与预测值的散点图:
逐步回归练习和代码
python信用评分卡建模(附代码):
https://ke.qq.com/course/3063615?tuin=dcbf0ba
逐步回归的基本思想是将变量逐个引入模型,每引入一个解释变量后都要进行F检验,并对已经选入的解释变量逐个进行t检验,当原来引入的解释变量由于后面解释变量的引入变得不再显著时,则将其删除。以确保每次引入新的变量之前回归方程中只包含显著性变量。这是一个反复的过程,直到既没有显著的解释变量选入回归方程,也没有不显著的解释变量从回归方程中剔除为止。以保证最后所得到的解释变量集是最优的。
本例的逐步回归则有所变化,没有对已经引入的变量进行t检验,只判断变量是否引入和变量是否剔除,“双重检验”逐步回归,简称逐步回归。例子的链接:(原链接已经失效),4项自变量,1项因变量。下文不再进行数学推理,进对计算过程进行说明,对数学理论不明白的可以参考《现代中长期水文预报方法及其应用》汤成友,官学文,张世明著;论文《逐步回归模型在大坝预测中的应用》王晓蕾等;
逐步回归的计算步骤:计算第零步增广矩阵。第零步增广矩阵是由预测因子和预测对象两两之间的相关系数构成的。
引进因子。在增广矩阵的基础上,计算每个因子的方差贡献,挑选出没有进入方程的因子中方差贡献最大者对应的因子,计算该因子的方差比,查F分布表确定该因子是否引入方程。
剔除因子。计算此时方程中已经引入的因子的方差贡献,挑选出方差贡献最小的因子,计算该因子的方差比,查F分布表确定该因子是否从方程中剔除。
矩阵变换。将第零步矩阵按照引入方程的因子序号进行矩阵变换,变换后的矩阵再次进行引进因子和剔除因子的步骤,直到无因子可以引进,也无因子可以剔除为止,终止逐步回归分析计算。
a.以下代码实现了数据的读取,相关系数的计算子程序和生成第零步增广矩阵的子程序。
注意:pandas库读取csv的数据结构为DataFrame结构,此处转化为numpy中的(n-dimension array,ndarray)数组进行计算
b.第二部分主要是计算公差贡献和方差比。
c.第三部分调用定义的函数计算方差贡献值
计算结果:
此处没有编写判断方差贡献最大的子程序,因为在其他计算中我还需要变量的具体物理含义所以不能单纯的由计算决定对变量的取舍,此处看出第四个变量的方查贡献最大
计算第四个预测因子的方差比(粘贴在了代码中),并查F分布表3.280进行比对,22.8>3.28,引入第四个预报因子。(前三次不进行剔除椅子的计算)
d.第四部分进行矩阵的变换。
e.进行完矩阵变换就循环上面步骤进行因子的引入和剔除
再次计算各因子的方差贡献
前三个未引入方程的方差因子进行排序,得到第一个因子的方差贡献最大,计算第一个预报因子的F检验值,大于临界值引入第一个预报因子进入方程。
进行矩阵变换,计算方差贡献
可以看出还没有引入方程的因子2和3,方差贡献较大的是因子2,计算因子2的f检验值5.026>3.28,故引入预报因子2
继续进行矩阵转换,计算方差贡献
这一步需要考虑剔除因子了,有方差贡献可以知道,已引入方程的因子中方差贡献最小的是因子4,分别计算因子3的引进f检验值0.0183
和因子4的剔除f检验值1.863,均小于3.28(查F分布表)因子3不能引入,因子4需要剔除,此时方程中引入的因子数为2
在此对矩阵进行变换,计算方差贡献
,已引入因子(因子1和2)方差贡献最小的是因子1,为引入因子方差贡献最大的是因子4,计算这两者的引进f检验值和剔除f检验值
不能剔除也不能引进变量,此时停止逐步回归的计算。引进方程的因子为预报因子1和预报因子2,借助上一篇博客写的多元回归。对进入方程的预报因子和预报对象进行多元回归。输出多元回归的预测结果,一次为常数项,第一个因子的预测系数,第二个因子的预测系数。
参考:
《Python机器学习——预测分析核心算法》Michael Bowles著
https://baike.baidu.com/item/%E9%80%90%E6%AD%A5%E5%9B%9E%E5%BD%92/585832?fr=aladdin
https://blog.csdn.net/qq_41080850/article/details/86506408
https://blog.csdn.net/qq_41080850/article/details/86764534
https://blog.csdn.net/Will_Zhan/article/details/83311049
如果想了解更多相关知识,欢迎同学报名学习python金融风控评分卡模型和数据分析:http://dwz.date/b9vv
python逐步回归筛选变量_Python实现逐步回归(stepwise regression)相关推荐
- python实现逐步回归分析_Python实现逐步回归(stepwise regression)
逐步回归的基本思想是将变量逐个引入模型,每引入一个解释变量后都要进行F检验,并对已经选入的解释变量逐个进行t检验,当原来引入的解释变量由于后面解释变量的引入变得不再显著时,则将其删除.以确保每次引入新 ...
- python逐步回归筛选变量_特征选择与逐步回归分析
1引言 在学校的时候,我跟着师姐做了一个文献计量学方面的研究(Citation impact prediction for scientific papers using stepwise regre ...
- python定义一个变量_Python新手上车3:Python第一个程序和变量
第一个程序 上节内容我们提到了如何安装Python 以及安装配置VSCode,这节内容我们继续介绍第一个程序的建立: 1.在VS的左上角点击建立一个新的程序,命名为 python_0301_code. ...
- python怎么创建变量_python怎么创建变量
变量(variable)是学习python初始时,就会接触到的一个新的知识点,也是一个需要熟知的概念.python是一种动态类型语言,在赋值的执行中可以绑定不同类型的值,这个过程叫做变量赋值操作,赋值 ...
- python设置环境变量_Python设置环境变量
python设置环境变量 We can set an environment variable in Python using os module. Python os module environ ...
- python局部静态变量_python如何设置静态变量
众所周知,Python语言并不支持静态变量,比如下面这样一个应用场景: void foo() { static int count = 0; count ++; } 在Python中无法自然实现这个功 ...
- python pandas筛选数据_Python基础 | pandas中数据的筛选(index subset)
本文数据可在此处下载,密码:vwy3 # 加载数据 import pandas as pd # 数据是之前在cnblog上抓取的部分文章信息 df = pd.read_csv('./data/SQL测 ...
- python定义二进制变量_Python学习笔记一:第一个Python程序,变量,字符编码与二进制,用户交互程序...
第一个python程序 Windows:设置环境变量,X:\pthonxxx,xxx是版本号 在命令提示符下 输入python,进入解释器 >>>print("Hello ...
- python中的变量_Python中的变量
python中的变量 This lesson deals with variables. Those who already know some programming must be familia ...
最新文章
- 安装和使用Oracle VM VirtualBox中的要点,注意事项和遇到的问题
- 在.NET客户端程序中使用多线程
- Mysql 分页语句Limit用法
- Android注解学习(2)
- 大学计算机一级word,大学计算机基础一级考试复习资料
- 设置ntpdate服务开机启动校验时间
- 盘点一下结构体标签在Go中的应用
- 神州信息预计2020年全年净利润4.35亿至6亿元
- 数据结构实验 6.宗教信仰
- oracle创建用户
- CNVD、CNNVD、CICSVD等区别与联系详解
- FreebuF黑客专访系列之吴翰清(刺):接下来几年,有两样东西必定会火
- c51单片机扩展64K的RAM
- Python基础教程目录
- H-divergence
- 好好上个网不容易:2016上半年网络安全事件盘点
- Cleaning-Data-in-Python
- uIP 一个免费的TCP/IP栈
- 朱清时的10本推荐书
- 机器学习算法之贝叶斯
热门文章
- zeronet php,ZeroNet (简体中文)
- 2022创新中国企业家论坛暨天心集团六周年年会成功举行
- Brickstream 2代书店客流系统
- 关于量子计算机的中考试题,中考语文试题真题汇编现代文阅读理解训练百篇(附答案)...
- 青岛市市立医院实施红帆OA
- Unity 3D 环境特效||Unity 3D 游戏场景设计实例
- 零跑股价被普遍看好,零跑汽车今年迎来大发展
- 学习笔记(01):Python爬虫开发-综合练习之药监总局02
- 读游戏之旅-我的编程感悟
- 股票入门基础知识17:计算每股收益(EPS):衡量股票真实价格