上图公式可以看出在方差膨胀因子的检测中:
每个自变量都会有一个膨胀因子值 ,最后根据值的大小来选择是否删减「既然 表示相关性,是谁跟谁的相关性呢?」 是自变量中的某一变量与除它外剩余的自变量进行多元线性回归,取回归结果,即模型精度来作为这个变量与剩余自变量的相关性 。听起来可能有点绕,这里举一下实例(用 “面积、卧室数量和浴室数量” 作为自变量来预测房价,在进行自变量的方差膨胀因子的检测时,面积、卧室数和浴室数轮流做单独的因变量,剩下的两个变量作为自变量,来看看这三个自变量中那个变量对其余两个变量的解释性高)越大,如已经到了 0.9,那分母就很小, 的值就等于 10,即表示这个自变量已经同时解释了另外的某个或多个自变量,存在多元共线性,可以考虑删除一些自变量 。越大,显示共线性越严重 。经验判断方法表明:「当 ,不存在多重共线性;当 ,存在较强的多重共线性;当 ,存在严重多重共线性」 。
方差膨胀因子的检测我们自己来写一个方差膨胀因子的检测函数
defvif(df,col_i):"""df:整份数据 col_i:被检测的列名"""cols=list(df.columns)cols.remove(col_i)cols_noti=colsformula=col_i+'~'+'+'.join(cols_noti)r2=ols(formula,df).fit().rsquaredreturn1./(1.-r2)现在进行检测
test_data=https://www.520longzhigu.com/diannao/results[['area','bedrooms','bathrooms','A','B']]foriintest_data.columns:print(i,'t',vif(df=test_data,col_i=i))发现bedrooms和bathrooms存在强相关性,可能这两个变量是解释同一个问题,方差膨胀因子较大的自变量通常是成对出现的 。
果然,bedrooms和bathrooms这两个变量的方差膨胀因子较高,这里删除自变量bedrooms再次进行建模
lm=ols(formula='price~area+bathrooms+A+B',data=https://www.520longzhigu.com/diannao/results).fit()lm.summary()模型精度稍降,但消除了多元共线性后能够使模型的泛化能力提升 。再次进行多元共线性检测
test_data=https://www.520longzhigu.com/diannao/results[['area','bedrooms','A','B']]foriintest_data.columns:print(i,'t',vif(df=test_data,col_i=i))那么多元共线性就「只有通过方差膨胀因子才能看的出来吗?」 其实并不一定,通过结合散点图或相关稀疏矩阵和模型中自变量的系数也能看出端倪 。下图是未处理多元共线性时的自变量系数 。
可以很明显的看出,bathrooms的参数很可能是有问题的,怎么可能bathrooms的数据量每增加一个,房屋总价还减少 1.373*10 的四次方美元呢?简单的画个散点图和热力图也应该知道房屋总价与bathrooms 个数应该是成正比例关系的 。
模型解释多元线性回归模型的可解释性比较强,将模型参数打印出来即可求出因变量与自变量的关系
所以最终的建模结果如下,且该模型的精度为0.916
另外在等式结果中,截距项Intercept和area,bedrooms等变量的系数都还好理解;A,B 这两个虚拟变量可能相对困难些 。其实根据原理部分的表格来看,如果房屋在 C 区,那等式中 A 和 B 这两个字母的值便是 0,所以这便引出了非常重要的一点:使用了虚拟变量的多元线性回归模型结果中,存在于模型内的虚拟变量都是跟被删除掉的那个虚拟变量进行比较 。所以这个结果便表示在其他情况完全一样时(即除虚拟变量外的项)A 区的房屋比 C 区低 8707.18 美元,B 区则比 C 区贵 449896.73.7 美元 。当然我们也可以画个箱线图来查看与检验,发现结果正如模型中 A 与 B 的系数那般显示 。
小结本文以多元线性回归为基础和前提,在因变量房价与多个自变量的实际观测值建立了多元线性回归模型;分析并检验各个预测变量对因变量的综合线性影响的显著性,并尽可能的消除多重共线性的影响,筛选出因变量有显著线性影响的自变量,对基准模型进行优化,并对各自变量相对重要性进行评定,进而提升了回归模型的预测精度 。
以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!
「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助:- arduino编程基础知识 arduino编程语言入门
- 讲解python常用框架 radiobutton控件
- java远程调用python脚本讲解 java执行python代码
- 剧本杀是干什么的 剧本杀入门基础知识
- 专业咖啡烘豆师的基础知识与培训 珠海咖啡师培训
- 自学wps基础知识 wps文字教程技巧大全
- ??:它掌握了构建游戏PC的基础知识
- 求和函数的用法 mysql求和函数语法
- 「咖啡烘焙进阶」专业咖啡烘豆师的基础知识与培训 珠海咖啡师培训
- python就业前景 python就业方向有哪些