多元线性回归数据集_虚拟变量提升多元线性回归模型精度(附Python代码与数据)...

06e9eba1955b0083c65bb04cd5700994.png

关注一下~,更多商业数据分析案例等你来撩

edfb22654d42b8f958ac0d816cc61c1b.png

前言

构建多元线性回归模型时,如果能够充分的使用已有变量,或将其改造成另一种形式的可供使用的变量,将在一定程度上提高模型精度及其泛化能力。因为数据集中的名义变量(或叫类别变量)是无法直接使用的,所以虚拟变量(又叫哑元变量)的设置便是非常经典且必须掌握的一步,原理简单,实现优雅,效果拔群。

原理趣析

至于虚拟变量的官方解释和值得参考的论文集和虚拟变量的深度应用及拓展,笔者都已经打包好了,私信我即可,我每天固定时间会查看。因为虚拟变量的原理其实非常简单,所以如何有趣且快速的理解原理并应用于实际的 Python 程序才是本文的侧重点。

77dd4d29a57edbd8bdb6ee4806063fa8.png

将无法直接用于建模的名义变量转换成可放入模型的虚拟变量的核心就短短八个字:四散拆开,非此即彼。下面用一个只有4行的微型数据集辅以说明。

9521056a82ccd0d2b6c1df523396a1e8.png

从上表中,不难发现:

  • 该名义变量有 n 类,就能拆分出 n 个名义变量
  • 巧妙的使用 0 和 1 来达到用虚拟变量列代替原名义变量所在类别

接下来要做的就是将生成的虚拟变量们放入多元线性回归模型,但要注意的是:转化后的虚拟变量们需要舍弃一个,才能得到满秩矩阵。具体原因和有关线性代数的解释可以查看笔者打包好的论文,我们可以理解为,当该名义变量可划分为 n 类时,只需要 n-1 个虚拟变量就已足够获知所有信息了。该丢弃哪个,可根据实际情况来决定。

54d6fa4aecb3a42098d9d889f86ccade.png

而至于使用虚拟变量的建模结果,可继续往下看。

cb5891a4cb6eb3bf31fa1fa3b2eb861c.png

效果实现

数据读入

d1c49a8795eec2b5bbe8e6fa3410f2ad.png

属性说明

  • neighborhood:所在街区(A,B,C,D)
  • area:房屋面积
  • bedrooms:卧室面积
  • bathrooms:浴室面积
  • style:房屋类型(乡间小屋/维多利亚/阁楼式)
  • price:房屋价格(美元)

statsmodels 的 ols 函数(最小二乘法)进行多元线性回归建模

e692b7c204c01c6508fbc338390688fe.png

为原数据集的某名义变量添加虚拟变量的步骤:

  1. 抽出希望转换的名义变量(一个或多个)
  2. Python pandas 的 get_dummies 函数
  3. 与原数据集横向拼接

56f8a75d942646ce08a93595f01dd492.png

bdcec8311d5027f71a899f79188ee55d.png

再次进行建模操作,发现模型精度得到了很大提升

a74f5f6353073f1ff99a5954971d59cc.png

笔者特地没有将类别变量 style 也转成虚拟变量,为的就是合理留白,让读者自行尝试并体会 “惊喜” 结果。

结果说明

5d463caf31ab7b1fbcd79e0cda11b357.png

所以最终的建模结果为:房屋价格 price = 344.39×area + bedrooms×5609.34 - bathrooms×4900.94 - A×77.9 + B×524381.71 - 203072.2,模型精度为 0.919.

等式结果中,截距项 Intercept 和 area,bedrooms,bathrooms 等项都还好理解,A,B 这两个虚拟变量项可能会给理解带来困难。其实根据原理趣析部分的表格来看,如果房屋在C区,那等式中 A 和 B 这两个字母的值便是 0,所以这便引出了非常重要的一点:使用了虚拟变量的多元线性回归模型结果中,存在于模型内的虚拟变量都是跟被删除掉的那个虚拟变量进行比较。所以这个结果便表示在其他情况完全一样时(即除虚拟变量外的项) A 区的房屋比 C 区低 77.9 美元,B 区则比 C 区贵524381.7 美元。当然我们也可以画个箱线图来查看与检验,发现结果正如模型中 A 与 B 的系数那般显示。

61aafb8674d651173ad810a29b168767.png

还有,虽然模型精度比较理想,但在使用 ols 进行建模时,结果表格下方其实还显示了如下的 Warnings(警告),表明可能存在比较强的多元共线性问题,这也是提升多元线性回归模型精度和泛化性的非常经典且简单的操作,篇幅原因,就放在文末链接了

fe3c1f47954a6254e1dc8797b898b5fd.png
https://zhuanlan.zhihu.com/p/152053737​zhuanlan.zhihu.com
9b5d7f3e8d9c709d2a750008129a4639.png

bf5fee56349637bd20ec2747543bb361.png

后续会不断更新常见场景下的 Python 实践

4a14cb8d5a4940cd73fc7fcb46e24d07.png
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值