本文采用Kaggle上面的Boston HousePrice数据集展示了如何建立机器学习模型的通常过程,包括以下几个阶段:
- 数据获取
- 数据清洗
- 探索性数据分析
- 特征工程
- 模型建立
- 模型集成
标签变量(房价)采取了对数转换,使其符合正太分布,最后从12个备选模型中选出预测效果最好的6个模型Lasso,Ridge,SVR,KernelRidge,ElasticNet,BayesianRidge分别进行加权平均集成和Stacking集成,最后发现Stacking集成效果更好,创新之处在于将Stacking集成后的数据加入原训练集中再次训练Stacking集成模型,使得模型性能再次得到改善,作为最后的预测模型,预测结果提交kaggle上后表现不错。另外受限于训练时间,超参数搜索空间小,有待改善。
数据获取
Kaggle官网提供了大量的机器学习数据集,本文从其中选择了Boston HousePrice数据集,下载地址为https://www.kaggle.com/c/house-prices-advanced-regression-techniques/data,下载后的数据集包括train.csv,test.csv,data_description.txt,sample_submission.csv四个文件,顾名思义train.csv为训练数据集,用于训练模型,test.csv为测试数据集,用于验证模型的准确性,data_description.txt描述train.csv字段,sample_submission.csv提供了最后提交文件的样式。其中训练集有1459条样本,81个字段,一个ID字段,一个标签SalePrice字段,测试集共有1458条样本,80个字段。
赛题给我们79个描述房屋的特征,要求我们据此预测房屋的最终售价,即对于测试集中每个房屋的ID给出对于的SalePrice字段的预测值,主要考察我们数据清洗、特征工程、模型搭建及调优等方面的技巧。本赛题是典型的回归类问题,评估指标选用的是均方根误差(RMSE),为了使得价格的高低对结果的评估有均等的影响,赛题均方根误差基于预测值和实际值分别取对数来计算。特征初步分析:
特征名称 |
描述 |
类型 |
单位 |
SalePrice |
房屋售价,我们要预测的label |
数值型 |
美元 |
MSSubClass |
建筑的等级 |
类别型 |
|
MSZoning |
区域分类 |
类别型 |
|
LotFrontage |
距离街道的直线距离 |
数值型 |
英尺 |
LotArea |
地皮面积 |
数值型 |
平方英尺 |
Street |
街道类型 |
类别型 |
|
Alley |
巷子类型 |
类别型 |
|
LotShape |
房子整体形状 |
类别型 |
|
LandContour |
平整度级别 |
类别型 |
|
Utilities |
公共设施类型 |
类别型 |
|
LotConfig |
房屋配置 |
类别型 |
|
LandSlope |
倾斜度 |
类别型 |
|
Neighborhood |
市区物理位置 |
类别型 |
|
数据清洗
数据清洗,是整个数据分析过程中不可缺少的一个环节,其结果质量直接关系到模型效果和最终结论。数据清洗对象主要有离群点、缺失值、重复值,以及数据转换等。
离群值
离群点通常指的是数值型变量,通过做特征GrLivArea和SalePrice散点图发现右下方存在两个异常点,因为不太可能居住面积越大,而售价却越低,因而删除。