python语法基础知识 python实战项目


python语法基础知识 python实战项目

文章插图
前言「多元线性回归模型」非常常见,是大多数人入门机器学习的第一个案例,尽管如此,里面还是有许多值得学习和注意的地方 。其中多元共线性这个问题将贯穿所有的机器学习模型,所以本文会「将原理知识穿插于代码段中」,争取以不一样的视角来叙述和讲解「如何更好的构建和优化多元线性回归模型」 。主要将分为两个部分:
详细原理Python 实战Python 实战Python 多元线性回归的模型的实战案例有非常多,这里虽然选用的经典的房价预测,但贵在的流程简洁完整,其中用到的精度优化方法效果拔群,能提供比较好的参考价值 。
数据探索本文的数据集是经过清洗的美国某地区的房价数据集
importpandasaspdimportnumpyasnpimportseabornassnsimportmatplotlib.pyplotaspltdf=pd.read_csv('house_prices.csv')df.info();df.head()参数说明:
neighborhood/area:所属街区和面积bedrooms/bathrooms:卧室和浴室style:房屋样式多元线性回归建模现在我们直接构建多元线性回归模型
fromstatsmodels.formula.apiimportols#小写的ols函数才会自带截距项,OLS则不会#固定格式:因变量~自变量(+号连接)lm=ols('price~area+bedrooms+bathrooms',data=https://www.520longzhigu.com/diannao/df).fit()lm.summary()红框为我们关注的结果值,其中截距项Intercept的 P 值没有意义,可以不用管它
模型优化从上图可以看到,模型的精度较低,因为还有类别变量neighborhood和style没有完全利用 。这里我们先查看一下类别变量的类别分布情况:
#类别变量,又称为名义变量,nominalvariablesnominal_vars=['neighborhood','style']foreachinnominal_vars:print(each,':')print(df[each].agg(['value_counts']).T)#Pandas骚操作#直接.value_counts().T无法实现下面的效果##必须得agg,而且里面的中括号[]也不能少print('='*35)虚拟变量的设置因为类别变量无法直接放入模型,这里需要转换一下,而多元线性回归模型中类别变量的转换最常用的方法之一便是将其转化成虚拟变量 。原理其实非常简单,将无法直接用于建模的名义变量转换成可放入模型的虚拟变量的核心就短短八个字:「四散拆开,非此即彼」 。下面用一个只有 4 行的微型数据集辅以说明 。
从上表中,不难发现:
该名义变量有 n 类,就能拆分出 n 个虚拟变量巧妙的使用 0 和 1 来达到「用虚拟变量列代替原名义变量所在类别」接下来要做的就是将生成的虚拟变量们放入多元线性回归模型,但要注意的是:「转化后的虚拟变量们需要舍弃一个」,才能得到满秩矩阵 。具体原因和有关线性代数的解释可以查看笔者打包好的论文,我们可以理解为,当该名义变量可划分为 n 类时,只需要 n-1 个虚拟变量就已足够获知所有信息了 。该丢弃哪个,可根据实际情况来决定 。
因此为原数据集的某名义变量添加虚拟变量的步骤为:
抽出希望转换的名义变量(一个或多个)pandas的get_dummies函数与原数据集横向拼接注意虚拟变量设置成功后,需要与原来的数据集拼接,这样才能将其一起放进模型 。
再次建模后,发现模型精度大大提升,但潜在的多元共线性问题也随之显现出来
在解释模型中虚拟变量的系数之前,我们先消除模型中多元共线性的影响,因为在排除共线性后,模型中的各个自变量的系数又会改变,最终的多元线性回归模型的等式又会不一样 。多重线性回归模型的主要假设之一是我们的预测变量(自变量)彼此不相关 。我们希望预测变量(自变量)与反应变量(因变量)相关,而不是彼此之间具有相关性 。方差膨胀因子(Variance Inflation Factor,以下简称VIF),是「指解释变量之间存在多重共线性时的方差与不存在多重共线性时的方差之比」


以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!

「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助: