线性回归实战案例二:车辆零售价回归模型分析步骤详解
手动反爬虫,禁止转载:
原博地址 https://blog.csdn.net/lys_828/article/details/121431534(CSDN博主:Be_melting)
知识梳理不易,请尊重劳动成果,文章仅发布在CSDN网站上,在其他网站看到该博文均属于未经作者授权的恶意爬取信息
案例二:车辆零售价回归模型
2.2.1 模块加载与忽略警告设置
打开Jupyter notebook,然后新建一个python3文件,命名为车辆回归分析模型.ipynb。文件首个cell中导入数据分析常用模块(三剑客加上一个seaborn模块),设置提示警告的过滤,代码如下。
2.2.2 加载数据和表头处理
案例二的数据集要比案例一复杂,字段数量达到了15个,而且里面既包含了数值字段,也包含了字符串字段。由于数据中是没有字段名称(表头),所以在读取文件的时候需要设置一下header = None,读入数据后结果如下。 由于没有表头,就需要人为手动指定,指定的方式就是将各字段的名称放置在列表中,赋值给df.columns即可。
2.2.3 探索式数据分析(EDA)
(1)首先看一下各个字段的基础信息,包括数据量和数据类型。 int 或者 float 对应字段数据为数字类型,object 就代表是字符串。 (2)接着进行各字段中的缺失值查看。当前数据的缺失值情况如下,缺失数据量的个数很少,可以直接进行删除,这里先先不做删除操作,只是进行数据的探索。 (3)然后都是数值字段,可以进行绘制统计表格。统计表格中包含了各字段中的均值、标准差、最小/最大值,以及四分位数。注意:describe()方法只会针对数值字段进行统计,会自动过滤掉字符串数据类型。 (4)如果是分类型字段,可以使用value_couts()进行各类别之间的频数统计。比如选取汽车的生产厂商字段进行数据的计数,有时候输出的类别数据较多,可以采用切片的方式只输出一部分数据。
2.2.4 探究字段之间的关联性
在进行模型数据输入时,可以直接将全部数据输入,也可以先将一些与因变量无关的自变量删除后再进行输入,两种数据的处理方式对最终模型的结果影响不大,但是会对模型的计算速度产生影响。实际的处理过程中往往采用后者进行,因为除了可以剔除字段简化数据外,可以先做一个相关因素的探索,了解与因变量相关的因素,方便后续的分析。
在案例一中,可以通过sns.pairplot()方法进行绘制散点图,粗略查看因变量与自变量之间的关系,但是在本案例中,数值字段的数量较多,仔细查看发现因变量零售价字段并没有在数值字段中(还未对美元和千分位符号进行处理),因此这一步可以先跳过,直接采用关联矩阵结合热力图查看自变量彼此之间的相关性。
2.2.5 特征工程
相对于案例一,本案例中的数据更接近与实际数据,因此在进行建模之前需要进行特征工程,对数据进行处理。再次审视一下数据集,输出如下。 本案例的目的就是根据车辆的特征信息,预测车辆的价格。先处理因变量(价格相关信息),其中的涉及到价格的字段有两个,分别是量售价和不含税价格,两者是成比例,比例关系约为:零售价*90%=不含税价格。因此选用其中的任意字段即可,比如下面使用的为零售价字段,需要先进行数据清洗,代码如下。 封装的函数就是为了去掉字段数据中的美元符号和千分位号,应用的方式也很简单,在pandas应用基础中反复强调map()方法的重要性,处理完毕后字段类型就变成数值型。 有了因变量后,就可以查看因变量与各自变量之间的关系,可以采用sns.pairplot()方法绘制散点图展示。除了因变量外,还有较多的数值字段,并不需要一个个复制粘贴字段名称,describe()方法就可以有妙用,借助该方法自动获取数值字段的名称,代码操作如下。 此时使用这种方式就不适合应用字段较多的场景了,x轴刻度对应的标签值无法看清。第17步输出的内容去掉第一个属于因变量字段名称,剩下的字段名称就是对应第18步输出图形中的x轴标签数据。因此直接一步到位使用热力图来查看因变量和自变量之间的关系,代码及输出结果如下。 输出的图形中只需要看第一列或者第一行即可,比如上方标记的是第一列,此外可以进一步直接通过条件判断索引获取关联系数大于某一值对应的自变量。比如选择关联系数绝对值大于0.45,最终输出与因变量相关的自变量有如下几个。 确定相关因素之后,可以单独展示这部分因素与因变量之间关联系数,单独选取对应的字段,然后输出关联矩阵和散点矩阵,结果如下。 需要留意的是上面的结果可能会报错,与seaborn版本有关(或者底层的numpy有关),因为之前查看气缸数量字段是存在着缺失值,可以先把缺失值填充后再进行可视化展示(填充的依据就是按照中位数进行填充,也可以通过前面的describe()方法获得中位数的值,填进去即可)。 除了绘制因变量和各个因素之间的关联图,还可以进行控制某一变量再绘制可视化图形,只需要将控制的字段名称赋值给hue参数即可(这个字段是属于分类字段),输出结果如下。 如果要只显示一半的图形内容,可以借助corner参数,指定为True,再进行结果输出,结果如下。 此外还可以设置颜色的格调,通过palette的设置来实现,具体有哪些色调可以通过试错法进行查看,比如任意赋值一个字符串,比如d,输出结果如下。 提示的可选色调可以任意进行复制,比如选择Blues,然后再次运行代码,输出结果如下。 如果想要知道一共有多少中色调可以选择,把提示的色调全部复制到列表中进行统计,输出如下。(共有178种色调)
2.2.6 模型创建与应用对比
(1)导入创建和评估模型相关的模块,核实数据中没有缺失值。 (2)划分特征数据和标签数据。数据准备好了之后就需要单独把各部分数据分开,标签数据对应这零售价字段,特征数据就为剩下的字段。 y中的数值只截取了部分,具体多少数据可以进行len()统计,顺带核实标签数据量是否和特征数据量一致,输出结果如下。 (3)切分数据集。将数据按照一定的比例分成训练集和测试集,比如按照8:2的比例。 (4)模型创建、拟合、预测和评估。前期数据工作完成后,模型方面的应用就是很简单的几行代码搞定。 (5)数据标准化/缩放化。由案例一可知,当数据标准化之后,最后的自变量前面的系数的可解释性相对较强,可以探究该案例数据中标准化是否对模型的好坏有所影响。(需要处理的是特征数据也就是X数据,不需要对标签数据进行标准化) 数据处理好后,就是创建模型,查看模型训练拟合后的得分情况,顺带也可以查看模型拟合后相关的参数,输出结果如下。(对比未经过标准化后训练的模型,在平均绝对误差上,原始数据训练过的模型要比标准化后训练的模型误差要大一些,但是拟合程度上不如标准化后训练的模型) (6)考虑字符串字段下的模型。比如车的生产商和零售价之间就存在关系就不可忽视,BBA的车子比一般的车子价钱要高一些。由于计算机不认识字符串数据,因此需要转化为独热编码,操作如下。 然后再将转化后的DataFrame数据与之前数据进行合并,构成新的数据集。(再次输出df2,核实数据是否合并成功,处理过后字段的数量由4个变成了43个) 剩下的步骤就和前面创建的模型类似,处理数据完成后(也可以对比标准化和为标准化后的数据训练后模型效果),进行模型的创建,拟合,预测与结果评估,代码如下。 输出结果中,无论是平均绝对误差还是R方,结果都比仅考虑数值字段数据训练的模型要好。
(7)不同模型之间的对比。上面使用的均为线性回归模型,接下来也可以尝试其它的模型进行回归分析,比如最常用的随机森林模型,建模、拟合、预测和评估基本都是一致的操作,代码及结果输出如下。(由于没有设定随机种子,每次模型训练后进行评估的结果都会有所不同) (8)模型结果可视化。最终的结果希望可以展现到图上,利用sns.regplot()快速绘制回归图形,可以参照如下代码进行输出。 如果有进一步需求,想要把拟合度也显示出来,可以使用yellowbrick模块(需要在命令行模块进行安装),绘图代码如下。 只需要替换里面的模型对应的变量即可,比如把随机森林对应的模型变量传入,输出的结果如下。
|