欢迎来到王者荣耀(自带音效?)啊不,是小白入门大数据分析之项目实战第一篇?。本文主要介绍如何利用Python实现Kaggle经典比赛项目,波士顿房价预测问题(至于Python安装问题,推荐大家参照一篇文章自行去下载安装,这里就不再详细讲解安装过程,文章地址https://www.liaoxuefeng.com/wiki/1016959663602400/1016959856222624)
首先导入相关的Python包,方便后面使用
然后导入数据集,因为这个数据集是sklearn包中自带的,所以直接导入即可。
其中x是自变量,也是我们通常所说建模用到的特征或者标签,y是因变量,在这里就是我们要预测的房价。
打印出每个特征并查看其含义
我们把数据转成DataFrame数据框的形式,方便后续处理,显示前10行数据。
接着我们把因变量房价数据也放到数据框中来,定义其字段名为target方便后续分析并显示前5行数据
接下来我们看下数据中有没有缺失值及各个字段数据类型
很幸运!各字段都没有缺失值,所以这里不用考虑缺失值填充问题。然后我们看下数据的基本描述情况,主要是看下数据的各个分位数及最大值最小值等,简单了解数据的分布情况(敲黑板,这是上节课提到的统计学知识哦)这里做了一个转置显示
然后我们可以看到,因变量target房价的最大值达到了50,这里明显可以看出这个数值是异常值(统计学中定义异常值为超过3倍标准差的样本),所以需要将异常值房价为50美元的样本剔除掉
接下来进入很关键的一步,查看各变量与因变量之间的相关性,即各特征对房价的重要程度
注,相关性为正数表示正相关,反之则为负相关,相关性绝对值在0~0.3之间为弱相关,0.3~0.5之间为中等相关,0.5以上表示强相关
这里可以看出RM平均每居民房数,PTRATIO城镇师生比例,LSTAT人群中地位较低人群的百分数这3个变量与房价之间有强相关关系,接下来需要重点探讨,其他次要变量这次暂时忽略。
我们可以通过散点图观察这3个变量与房价之间的分布关系,首先是RM平均每居民房数与房价之间的散点图
分析结论:
1.两者之间存在较强的线性关系;
2.住宅房间数处于(4, 5)区间的情况下,房价绝大部分最高不超过25;
3.住宅房间数处于(5, 6)区间的情况下,房价绝大部分最高不超过30;
4.住宅房间数处于(6, 7)区间的情况下,房价绝大部分最高不超过40;
5.住宅房间数处于(7, 8)区间的情况下,房价绝大部分最低不低于30。
然后看下PTRATIO城镇师生比例与房价之间的散点图
分析结论:
1.学生教师比例小于14的情况下,房价最低不低于20,绝大部分高于30;
2.学生教师比例处于(14, 20)区间的情况下,房价最低不低于10;
3.只有在学生教师比例大于20的情况下,房价会低于10,绝大部分不高于30。
最后看下LSTAT人群中地位较低人群的百分数与房价之间的散点图
分析结论:
1.只有低收入阶层占比小于10的情况下,房价会高于35;
2.低收入阶层占比小于5的情况下,房价最低不低于20;
3.低收入阶层占比处于(10,20)区间的情况下,房价处于(10, 30)区间;
4.低收入阶层占比大于20的情况下,房价最高不高于25。
ok简单分析完毕!现在我们已经确定,我们建模的自变量是RM、PTRATIO、LSTAT这三个变量,因变量就是房价,不用说啦,哈哈。首先我们先划分下数据集
这里我们的训练集与测试集是按7:3的比例划分,当然也可以按6:4划分,问题都不大,根据自己的习惯和需要来就行。
最后,我们进入建模最重要的一步,就是模型训练与预测,并观察模型效果
r2此处为评判模型效果的参考指标,正常范围0~1之间,数值越大表示模型效果越好。
可以看到本次模型的R2为0.69,模型效果一般,还有进一步的提高空间,这里主要是因为前面没做特征工程和数据预处理,当然大家有时间有兴趣也可以尝试在这个案例中做特征工程和数据预处理再进行建模,效果提升会很明显!特征工程很重要,可以说是提升模型效果最直接有效的方式之一,关于特征工程的内容以后再跟大家分享。本次内容到此,下节课给大家带来另外一个Kaggle经典实战案例,惊喜下回揭晓哦?,不见不散~