python 进行一元线性回归并输出相关结果,python多元线性回归实例
作者萝卜
来源早起python(id:Zaoqi-python))。
“多元线性回归模型”很常见,是很多人进入机器学习的第一个案例,但是有很多值得学习和注意的地方。其中,多重共线性的问题贯穿于所有的机器学习模型。本文旨在通过“将原理知识嵌入代码段”,从不同的角度对“如何更好地建立和优化多元线性回归模型”进行解释和说明。它分为两部分。
详细原理
Python 实战
Python 实战Python多元线性回归模型有很多实际案例。这里虽然采用了经典的房价预测,但重要的是过程简洁完整,其中使用的精度优化方法效果突出,能提供较好的参考价值。
数据探索本文的数据集是经过清洗的美国某地区房价数据集。
importpandas aspdimportnumpyasnpimportseabornassnimportmatplotlib . pyplotaspltdf=PD . read _ CSV(house _ prices。CSV df)
参数描述:
街坊/区域:所属的街区和区域。
卧室/浴室:卧室和浴室
风格:住宅风格
多元线性回归建模目前我们直接建立多元线性回归模型:
from stats models . formula . apimportols #小写ols函数有截断项,但ols没有#固定格式。变量~参数(数字连接)lm=ols(价格~面积卧室房间房间
从模型优化上的图可以看出,模型的精度很低。这是因为类别变量“邻域”和“风格”没有得到充分利用。现在,我们先来看看类别变量的类别分布。
# Class变量,也称为名义变量,由nominalvariableanonymous _ vars=[ neighborhood ,Style ]for achinnational _ vars 3360 print(电子邮件地址)is in :) print(df[each].agg) [value _ counties]。t] #熊猫骚动#直接。value _ counties)。t,##agg必须得到才能实现下面的效果,花括号[]不能直接把print(=*35)虚拟变量的设置类的变量放入模型中,所以这里的转换原理其实很简单。把不能直接用于建模的名义变量转换成可以放入模型的虚拟变量的核心只有8个字符。“分散分解,不是这个”。在下文中,仅使用4行微数据来辅助解释。
从上表可以看出:
如果这个名义变量有N个类,就可以分成N个虚变量。
利用smart 0和1实现“用虚变量列替换原标称变量的类”。
下一步是将生成的哑变量放入多元线性回归模型,但请注意,为了得到完整的秩矩阵,“必须丢弃一个变换后的哑变量”。具体原因和线性代数的解释可以理解为作者可以看到打包的论文。如果这个名义变量可以分为N类,那么只需要n-1个哑变量就可以知道所有的信息。应该放弃哪一个,可以根据实际情况决定。
因此,将虚拟变量添加到原始数据集中的名义变量的步骤是:
提取要转换的标称变量)))))))))))。
熊猫的Get_dummies功能
与原始数据集的水平连接
请注意,如果虚拟变量设置成功,必须连接到原始数据集并放入模型中。
重新建模后,模型的精度有了很大的提高,但也存在潜在的多变量共线性问题。
在解释模型中虚拟变量的系数之前,请先消除模型中多重共线性的影响。这是因为排除共线性后,模型中的每个自我都发生了变化。
数量的系数又会发生变化,最终多元线性回归模型的方程也会不同。多元回归模型的一个主要假设是,我们预测的变量(自变量)是互不相关的。我们希望预测变量(自变量)与响应变量(因变量)相关,而不是彼此相关。方差膨胀因子(以下简称VIF)是指解释变量之间存在多重共线性时的方差与不存在多重共线性时的方差之比。
上述公式表明,在方差展开因子的检测中:
每个自变量都会有一个展开因子值,最后根据该值选择是否裁剪。
既然表示相关,那到底是跟谁的相关呢?它是自变量中的某一变量与其余自变量之间的多元线性回归,将回归结果即模型精度作为该变量与其余自变量之间的相关性。这听起来可能有点复杂。举个例子:用“面积、卧室数量、卫生间数量”作为自变量来预测房价。在检测自变量的方差展开因子时,面积、卧室数和卫生间数轮流作为独立因变量,其余两个变量作为自变量。看看这三个自变量中,哪一个对其余两个变量的解释力高。
较大的是,如果达到了0.9,分母很小,值等于10,说明这个自变量同时解释了一个或多个其他自变量,存在多重共线性。可以考虑删除一些自变量。
VIF越大,共线性越严重。实证方法表明,当0 VIF 10时,不存在多重共线性;当10 VIF 100时,存在较强的多重共线性;当VIF 100时,存在严重的多重共线性。方差膨胀因子的检测我们自己写一个方差展开因子的测试函数吧。
Defvif (df,col_i): df:整个数据col_i:检测到的列名 cols=list (df。columns)cols . remove(col _ I)cols _ noti=cols formula=col _ I ~ 。加入
Test _ data=results [[area , belts ,浴室, a , b ]]for iintest _ data . columns:print(I, \ t ,Vif (DF=test _ data,Col _ I=I)
果然卧室和卫生间的方差展开因子更高,所以这里把自变量卧室删除,重新建模。
lm=ols(公式=价格~卫生间面积A B ,数据=结果)。fit()lm.summary()
消除多重共线性后,模型的精度略有下降,但模型的泛化能力有所提高。再次执行多元共线性检测。
test_data=results[[area , believes , A , B ]]for iintest _ data . columns:print(I, \t ,vif(df=test_data,col_i=i))
那么仅用方差扩展因子就能看出多重共线性吗?其实也不尽然。也可以通过散点图或相关稀疏矩阵结合模型中自变量的系数来看。下图是未处理多重共线性时的自变量系数。
很明显,浴室的参数可能有问题。卫生间的数据每增加一次,总房价怎么可能会减少1.373*10美元的四次方?简单的画个散点图和热力图,就知道房子总价应该和卫生间数量成正比。
模型解释多元线性回归模型具有较强的可解释性。通过打印模型参数可以得到因变量和自变量之间的关系。
所以最终建模结果如下,模型的精度为0.916。
另外,在方程结果中,截距项和面积、卧室等变量的系数很容易理解;两个虚拟变量A和B可能相对困难。实际上,根据原理部分的表格,如果房子在C区,方程中首字母A和B的值都是0,那么这就引出了一个很重要的点:在使用哑变量的多元线性回归模型的结果中,模型中存在的哑变量与被删除的哑变量进行比较。所以这个结果意味着在其他东西完全相同的情况下(虚拟变量除外),A区的房子比C区的房子低8707.18美元,而B区的房子比C区的房子贵449896.73.7美元,当然我们也可以画一个箱线图来检查测试,发现结果在模型中显示为A和B的系数。
本文以多元线性回归为前提,建立了因变量房价和几个自变量的实际观测值的多元线性回归模型。分析和检验各预测变量对因变量的综合线性影响的显著性,尽可能消除多重共线性的影响,筛选出因变量线性影响显著的自变量,优化基准模型,评估各变量的相对重要性,从而提高回归模型的预测精度。
更多精彩推荐都大写“惨”?Kwdmt,三次改变世界却被无情淘汰的程序员!10部优秀作品,20个热点地区曝光,高通如何玩转“艾夏”!加2000亿是不够的。阿里云将再建三个超级数据中心,以加快新基础设施的速度。我还没考,算法说我物理肯定不及格。中间平台架构详解(一)大咖说中间平台Eth2验证器发布快。还有哪些我们不知道的惊喜?分享,喜欢,观看。
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。