Oluwole Alowolodu作者吴金笛校对李润嘉翻译

使用机器学习预测房价(附链接)

本文使用监督式机器学习技术来预测美国爱荷华州艾姆斯市(Ames, Iowa)的房价。

介绍

该项目旨在使用监督式机器学习技术来预测美国爱荷华州艾姆斯市(Ames, Iowa)的房价。Ames的房屋数据集来自Kaggle,这是谷歌旗下的一个在线平台,它为数据科学家和机器学习科学家提供合作和竞争的机会。Kaggle以提供不同的数据和竞赛为特色,其中便包括由Dean De Cock编辑的Ames房屋数据集。

该数据集包含具有81个特征的测试集和训练集。其中,训练文件包括1460条观测值,测试文件包含1459个观测值。

数据清洗

建模的第一步便是数据探索和数据清洗,旨在理解数据集中的每个特征和模式。将训练集和测试集合并到一起进行统一的数据工程,并对缺失值进行探索。以下是一张热力图,可从中看出数据中的缺失值所处的位置。

热图为特征缺失,尤其是包含大量缺失值的列提供了线索。通过对组合数据集的进一步分析,提取出每个特征所含缺失值的具体数量。可知共有34列含有缺失值,其中PoolQC,LotFrontage,FireplaceQual,Fence,Alley和MiscFeatures列的缺失值最多。以下是一个条形图,显示了缺失值的分布情况。

不同的含有缺失变量的特征有不同的估算方式。在估算之前需要考虑以下因素:该特征是分类型特征还是数值型特征,缺失值是随机完全缺失、随机缺失还是非随机缺失。

对于含有随机缺失值的数值型特征,比如 'LotFrontage' ,将使用位于同一区域的房屋的中位数来进行估算。其他含有缺失值的数值型特征大多根据一定的规则进行填充,大部分情况下使用0来填充。对于分类型特征,其中一些似乎含有缺失值,但是空值(NA)实际上意味着这个变量或房子显然缺少这样的特征,例如,'PoolQC' 中的空值意味着该变量没有 'Pool' 这个属性,它应当归为 'No_pool' 。类似的方法可适用于大多数特征。

删除异常值——缺失值估算的下一步是对数据集进行探索,找出可能的异常值。可通过在散点图上可视化每列来完成。 

'AboveGroundLivingArea',

BasementSquareFootage' 

和 'LotFrontage' 特征具有明显的异常值,这些变量应当从数据集中删除

特征工程

在进行特征工程之前,需要对特征进行相关性分析,以便更深入地了解它们的方差、自变量特征之间的相关关系和自变量特征与因变量特征—— SalePrice之间的相关关系。

从热力图中可观察到 'GarageCars' 与 'GarageArea'高度相关,'GarageYearBuilt'与 'YearBuilt' 高度相关,'TotalRoomsAboveGround' 与 'GroundLivingArea' 高度相关。它们的相关性均在80%以上。从该矩阵还可以深入了解最适于特征工程的特征。

特征添加——在现有特征基础上构造了9个新特征,主要是二分类特征。新添的第一个特征是 "GrYrAfter" ,它代表了 'Garage year difference' ,记录了建筑物建造年份 ' YearBuilt ' 和车库建造年份 'GarageYrBuilt ' 之间是否存在时间差。这个潜在的差值值得洞悉,因为这可能意味着建筑物的施工时间非常漫长或者期间进行了一些重大改造,这些信息都需要了解。新添的第二个特征是 "Remodelling",生成两个模型来刻画房屋改建的时间差,第一个是二分类特征,它记录了房屋的建造年份 ' YearBuilt ' 与改建年份 ' YearRemodAdd ' 是否相同。第二个是数值特征,它在第一个特征为“是”的情况下,记录了二者的时间差(YearRemodAdd - YearBuilt)。房屋建造时间是否晚于1980年和是否早于1960年也是新添的两个二分类特征,其余所有特征如下表所示。

基于对 'Garage Year Built' 中的缺失情况的仔细分析、它的高相关性以及由它构造出的新特征,对其采取了删除措施。因为它对自变量的影响已被更简单的特征所代替。

特征变换——对4个特征进行了变换以校正其分布图中所观察到的偏斜情况。

观察到 'LotAre' 的分布异常,需要对其进行变换。对数变换之后得到了更好的分布,如下图所示:

LotArea特征的变换

另一个需要进行变换的特征是 'GroundLivingArea' ,它的分布向右倾斜,进行对数变换之后也得到了更好的分布,如下图所示:

GroundLivingArea特征的变换

其他两个特征中,'First Floor Square Footage' 特征也进行了对数变换,'Lot Frontage' 则进行了box-cox变换。

最后一个进行特征变换的是因变量 'SalePrice '。在目标变量中观察到的向右倾斜经过对数变换,修正为正态分布。

目标变量 —— SalePrice的变换

特征虚拟化——在建模之前对分类型特征进行哑编码。经过特征添加、删除和变换后,数据框中包含87个特征和2919条观测值:

在哑编码和从每个哑编码后的特征中删除一个哑变量之后,有201个列添加到数据框中,总共有288个特征。

建模

将合并后的数据框重新拆分为训练数据框和测试数据框,其中训练集包括1460条观测值,测试集包括1459条观测值。总共有5个模型在训练集上进行了训练。

基于线性的回归——即Ridge,Lasso和ElasticNet是为预测而构建的第一批模型。之所以使用这些惩罚多元线性回归技术,是因为它们可在最小化预测误差时调节特征之间的多重共线性。

岭回归——对于该模型,完成了交叉验证所需折叠次数的试验,如下图所示:

从图中可以看出,随着折叠次数的增加,标准偏差也随之增加,而平均误差保持不变,使用的折叠次数为10。

岭回归系数与正则化/惩罚强度折线图

上图为岭回归系数与正则化/惩罚强α折线图。随α的增加,系数也随着减小收缩到0。不仅系数减小,(量度变量与回归直线接近程度的统计量)也随之下降。这意味着该模型减少了方差,也因此引入了偏差但产生了减少的预测误差 ——“偏差-方差权衡”。令alpha = 10,tol = 1e-05,solver ='svd',得到最佳交叉验证得分0.1132。

Lasso回归——Lasso回归同岭回归一样,也是正则化模型,用来减轻多重共线性的影响。在超参的优化基础上,令alpha = 10,max_iter = 25,得到最佳交叉验证得分0.1147。

Elatic-Net模型——这是一个将岭回归和Lasso惩罚强度结合起来的正则化模型。

同样,与其他惩罚模型一样,随着α的增加,系数缩小为0,如同从特征的图形表示中观察到的那样,它们完全从lasso下降到零。经过调参得到最佳参数是l1_ratio = 0.001和α=0.1,得到交叉验证得分0.11204。

基于树的模型——训练了三种基于树的模型,即支持向量机(SVM),梯度增强回归(Gradient Boosting Regressor)和XGBoost

支持向量回归——对于这个基于树的模型,需要3个主要参数来指示模型的最优调参,它们是gamma,epsilon和C。其中C的影响最大,它是一个调整参数,如同epsilon一样,有助于确定可容忍的违规边界和超平面的阈值。

网格搜索法得到回归的最佳参数是gamma = .000001,C = 100,epsilon = 0,它们也可从图像中观察得到。对于低均方根误差,需要低gamma值和高C值。

其他模型有:

Gradient Boosting Regressor——此模型的交叉验证得分为0.12020; 和XGBoost ——最后训练的模型得出了0.11872的交叉验证分数。

下面的表格显示了所有使用的模型以及它们的运行情况,而不局限于本地模型,还包括kaggle。岭回归的kaggle得分为0.12286,位居kaggle整体排名的前20%。

特征重要性

使用基于树的模型,绘制了特征重要性图,首先来自梯度增强回归模型:

'OverallQua' 特征是对房屋的整体材料和完成度进行评级,根据梯度增强回归模型,其对预测的影响最大。这并不奇怪,因为房屋的销售价格会随着其质量的提高而提高。在预测中具有高度重要性的下一个特征是 'GrLivArea',它以平方英尺为单位测量房屋的生活区域,这意味着房屋的大小会影响其价格,而模型也捕捉到了这一点。在分析特征重要性时,我首先想到的是相关矩阵。

高度相关(> 80%)的特征是否对预测产生相同的影响?在文章前部分,可看到 'GrLivArea' 与 'TotRmsAbvGrd' 有83%的相关性,这意味着以平方英尺为单位所测量的生活区域和地上的总房间数是相关的。然而,在观察到的特征重要性中,尽管 'GrLivArea' 的影响非常大,'TotRmsAbvGrd' 并不在重要特征的前15名中。这个模型的表现说明梯度增强回归在多重共线性上非常鲁棒。

用于分析特征重要性的另一个模型是随机森林

随机森林模型获得的特征重要性与从梯度增强模型获得的特征重要性非常相似。两个模型的前3个重要的特征完全一样,虽然它们对模型的影响程度不同。同样,与梯度增强一样,随机森林对多重共线性具有鲁棒性,因为它为随机森林中的每棵树选择随机特征子集。

未来的工作

集成模型以查看是否可以改进整体预测。

这项研究由三位数据科学研究员参与:Oluwole Alowolodu,David Levy和Benjamin Rosen。

原文标题:

House price prediction using machine learning

原文链接:

https://nycdatascience.com/blog/student-works/machine-learning/house-price-prediction-using-machine-learning/

动脉网
动脉网

专注医疗产业服务平台

工程房价机器学习
3
相关数据
网格搜索技术

网格搜索是一项模型超参数优化技术,常用于优化三个或者更少数量的超参数,本质是一种穷举法。对于每个超参数,使用者选择一个较小的有限集去探索。然后,这些超参数笛卡尔乘积得到若干组超参数。网格搜索使用每组超参数训练模型,挑选验证集误差最小的超参数作为最好的超参数。

机器学习技术

机器学习是人工智能的一个分支,是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、计算复杂性理论等多门学科。机器学习理论主要是设计和分析一些让计算机可以自动“学习”的算法。因为学习算法中涉及了大量的统计学理论,机器学习与推断统计学联系尤为密切,也被称为统计学习理论。算法设计方面,机器学习理论关注可以实现的,行之有效的学习算法。

参数技术

在数学和统计学裡,参数(英语:parameter)是使用通用变量来建立函数和变量之间关系(当这种关系很难用方程来阐述时)的一个数量。

数据科学技术

数据科学,又称资料科学,是一门利用数据学习知识的学科,其目标是通过从数据中提取出有价值的部分来生产数据产品。它结合了诸多领域中的理论和技术,包括应用数学、统计、模式识别、机器学习、数据可视化、数据仓库以及高性能计算。数据科学通过运用各种相关的数据来帮助非专业人士理解问题。

随机森林技术

在机器学习中,随机森林是一个包含多个决策树的分类器,并且其输出的类别是由个别树输出的类别的众数而定。 Leo Breiman和Adele Cutler发展出推论出随机森林的算法。而"Random Forests"是他们的商标。这个术语是1995年由贝尔实验室的Tin Kam Ho所提出的随机决策森林(random decision forests)而来的。这个方法则是结合Breimans的"Bootstrap aggregating"想法和Ho的"random subspace method" 以建造决策树的集合。

均方根误差技术

平方平均数(Quadratic mean),简称方均根(Root Mean Square,缩写为 RMS),是2次方的广义平均数的表达式,也可叫做2次幂平均数。常用于计算误差

线性回归技术

在现实世界中,存在着大量这样的情况:两个变量例如X和Y有一些依赖关系。由X可以部分地决定Y的值,但这种决定往往不很确切。常常用来说明这种依赖关系的最简单、直观的例子是体重与身高,用Y表示他的体重。众所周知,一般说来,当X大时,Y也倾向于大,但由X不能严格地决定Y。又如,城市生活用电量Y与气温X有很大的关系。在夏天气温很高或冬天气温很低时,由于室内空调、冰箱等家用电器的使用,可能用电就高,相反,在春秋季节气温不高也不低,用电量就可能少。但我们不能由气温X准确地决定用电量Y。类似的例子还很多,变量之间的这种关系称为“相关关系”,回归模型就是研究相关关系的一个有力工具。

特征工程技术

特征工程是利用数据所在领域的相关知识来构建特征,使得机器学习算法发挥其最佳的过程。它是机器学习中的一个基本应用,实现难度大且代价高。采用自动特征工程方法可以省去采用人工特征工程的需求。Andrew Ng 说“挖掘特征是困难、费时且需要专业知识的事,应用机器学习其实基本上是在做特征工程。”

支持向量机技术

在机器学习中,支持向量机是在分类与回归分析中分析数据的监督式学习模型与相关的学习算法。给定一组训练实例,每个训练实例被标记为属于两个类别中的一个或另一个,SVM训练算法创建一个将新的实例分配给两个类别之一的模型,使其成为非概率二元线性分类器。SVM模型是将实例表示为空间中的点,这样映射就使得单独类别的实例被尽可能宽的明显的间隔分开。然后,将新的实例映射到同一空间,并基于它们落在间隔的哪一侧来预测所属类别。

正则化技术

当模型的复杂度增大时,训练误差会逐渐减小并趋向于0;而测试误差会先减小,达到最小值后又增大。当选择的模型复杂度过大时,过拟合现象就会发生。这样,在学习时就要防止过拟合。进行最优模型的选择,即选择复杂度适当的模型,以达到使测试误差最小的学习目的。

交叉验证技术

交叉验证,有时亦称循环估计, 是一种统计学上将数据样本切割成较小子集的实用方法。于是可以先在一个子集上做分析, 而其它子集则用来做后续对此分析的确认及验证。 一开始的子集被称为训练集。而其它的子集则被称为验证集或测试集。交叉验证的目标是定义一个数据集到“测试”的模型在训练阶段,以便减少像过拟合的问题,得到该模型将如何衍生到一个独立的数据集的提示。

XGBoost技术

XGBoost是一个开源软件库,为C ++,Java,Python,R,和Julia提供了渐变增强框架。 它适用于Linux,Windows,MacOS。从项目描述来看,它旨在提供一个“可扩展,便携式和分布式的梯度提升(GBM,GBRT,GBDT)库”。 除了在一台机器上运行,它还支持分布式处理框架Apache Hadoop,Apache Spark和Apache Flink。 由于它是许多机器学习大赛中获胜团队的首选算法,因此它已经赢得了很多人的关注。

暂无评论
暂无评论~