动机
为了预测湾区的房价,我选择了来自湾区住房销售数据库和Zillow的房价数据集。此数据集基于2013年1月至2015年12月期间出售的房屋。它具有许多学习特点,数据集可从此处下载。
数据预处理
有几个我们不需要的特征,比如“info”,“z_address”,“zipcode”(我们有“neighborhood”作为位置变量),“zipid”和“zestimate”(这是Zillow估计的价格,我们不希望我们的模型受到这个影响),所以会丢弃它们。
“zindexvalue”的数据类型应该是数字,所以让我们更改它。
(‘01/02/2013’, ‘12/31/2015’)
房屋销售期限为2013年1月至2015年12月。我现在使用describe()方法来显示数字变量的汇总统计信息。
计数,平均值,最小值和最大值是不言自明的。 std显示标准偏差,25%,50%和75%的行显示相应的百分位数。
为了了解我们处理的数据类型,我们绘制了每个数值变量的直方图。
!图1.每个数值变量的直方图
有些直方图有一点偏右,但这并不是异常的。
让我们创建一个包含经度和纬度的散点图来显示数据:
!图2.数据的散点图
现在让我们根据价格从高到低绘图:
!图3.湾区房价
这张图片告诉我们,最昂贵的房子出售在北部地区。
我们要预测的变量是“最后售出的价格”。那么我们来看看每个独立变量与这个因变量的相关程度。
当平方尺和浴室数量增加时,最后售出的价格往往会增加。您可以看到建成年份和最后售出价格之间存在小的负相关关系。最后,接近零的系数表明没有线性相关。
我们现在要通过使用Pandas的scatter_matrix函数来可视化变量之间的相关性。我们只关注一些有“前途”的变量,这些变量似乎与最后售出的价格最相关。
!图4.散布矩阵
影响最后售出价格的最有可能的变量是平方英尺,所以让我们放大它们的相关散点图。
!图5.平方英尺与最近出售的价格
相关性确实非常强;你可以清楚地看到上升的趋势,并且这些点不是太分散。
由于每栋房屋面积不同,每个社区的房价都不同,我们真正需要的是每平方英尺的价格。所以,我们添加一个新的变量“pricepersqft”。然后,我们检查这个新的自变量与最后售出价格的相关程度。
不巧的是,新的pricepersqft变量只显示与最后售出价格非常小的正相关。但是我们仍然需要这个变量来分组社区。
数据中有71个街区,我们将对他们进行分组。
71
以下步骤将街区分为三组:1.低价格; 2.高价低频; 3.高价高频。
这些是低价格的街区:
Index([‘Bayview’, ‘Central Richmond’, ‘Central Sunset’, ‘Crocker Amazon’,‘Daly City’, ‘Diamond Heights’, ‘Excelsior’, ‘Forest Hill’,‘Forest Hill Extension’, ‘Golden Gate Heights’, ‘Ingleside’,‘Ingleside Heights’, ‘Ingleside Terrace’, ‘Inner Parkside’,‘Inner Richmond’, ‘Inner Sunset’, ‘Lakeshore’, ‘Little Hollywood’,‘Merced Heights’, ‘Mission Terrace’, ‘Mount Davidson Manor’,‘Oceanview’, ‘Outer Mission’, ‘Outer Parkside’, ‘Outer Richmond’,‘Outer Sunset’, ‘Parkside’, ‘Portola’, ‘Silver Terrace’, ‘Sunnyside’,‘Visitacion Valley’, ‘West Portal’, ‘Western Addition’,‘Westwood Highlands’, ‘Westwood Park’],dtype=’object’, name=’neighborhood’
这些是高价格和低频率的街区:
Index([‘Buena Vista Park’, ‘Central Waterfront — Dogpatch’, ‘Corona Heights’, ‘Haight-Ashbury’, ‘Lakeside’, ‘Lone Mountain’, ‘Midtown Terrace’,‘North Beach’, ‘North Waterfront’, ‘Parnassus — Ashbury’, ‘Presidio Heights’, ‘Sea Cliff’, ‘St. Francis Wood’, ‘Telegraph Hill’, ‘Twin Peaks’], dtype=’object’, name=’neighborhood’)
这些是高价格和高频率的街区:
Index([‘Bernal Heights’, ‘Cow Hollow’, ‘Downtown’, ‘Eureka Valley — Dolores Heights — Castro’, ‘Glen Park’, ‘Hayes Valley’, ‘Lake’, ‘Lower Pacific Heights’, ‘Marina’, ‘Miraloma Park’, ‘Mission’, ‘Nob Hill’, ‘Noe Valley’, ‘North Panhandle’, ‘Pacific Heights’, ‘Potrero Hill’, ‘Russian Hill’, ‘South Beach’, ‘South of Market’, ‘Van Ness — Civic Center’, ‘Yerba Buena’],dtype=’object’, name=’neighborhood’)
我们根据集群添加一个组列:
在执行上述预处理之后,我们不再需要以下列:“address, lastsolddate, latitude, longitude, neighborhood, pricepersqft”,所以将它们删除。
数据看起来完美!
但在构建模型之前,我们需要为这两个分类变量创建哑变量:“usecode”和“group”。
如下图所示:
训练并建立线性回归模型
LinearRegression(copyX=True, fitintercept=True, n_jobs=1, normalize=False)
搞定!我们现在有一个可用的线性回归模型。
计算R平方:
Linear Regression R squared: 0.5619
因此,我们的模型为56.19%。这并不令人兴奋。
计算均方根误差(RMSE):
Linear Regression RMSE: 616071.5748
我们的模型能够在真实价格的616071美元之内预测测试集中每个房子的价值。
计算平均绝对误差(MAE):
Linear Regression MAE: 363742.1631
随机森林
让我们尝试一个更复杂的模型来看看是否可以改进结果 - RandomForestRegressor:
RandomForestRegressor(bootstrap=True, criterion=’mse’, maxdepth=None, maxfeatures=’auto’, maxleafnodes=None,minimpuritysplit=1e-07, minsamplesleaf=1,minsamplessplit=2, minweightfractionleaf=0.0,nestimators=10, njobs=1, oobscore=False, randomstate=42,verbose=0, warmstart=False)
Random Forest R squared”: 0.6491
Random Forest RMSE: 551406.0926
好多了!让我们再试试。
Gradient boosting
GradientBoostingRegressor(alpha=0.9, criterion='friedmanmse', init=None,learningrate=0.1, loss='ls', maxdepth=3, maxfeatures=None,maxleafnodes=None, minimpuritydecrease=0.0,minimpuritysplit=None, minsamplesleaf=1,minsamplessplit=2, minweightfractionleaf=0.0,nestimators=100, presort='auto', randomstate=None,subsample=1.0, verbose=0, warmstart=False
Gradient Boosting R squared”: 0.6616
Gradient Boosting RMSE: 544579.8296
这些是迄今为止我们获得的最佳结果,因此,我认为这是我们的最终模型。
特征的重要性
我们在模型中使用了19个特征(变量)。让我们找出哪些功能很重要,反之亦然。
最重要的特征是finishedsqft,zindexvalue,bathrooms,totalrooms,yearsbuilt等等。而最不重要的特征是Apartment,这意味着无论是否是公寓,与售价无关。总体而言,这19个特征中的大多数都被使用。
到你了!
希望这篇文章能够让你了解机器学习回归项目是什么样的。正如您所看到的,大部分工作都在数据准备步骤中,而机器学习大部分时间花在这些过程上。
现在是时候行动,开始探索和清理您的数据。尝试两种或三种算法,并让我知道它是怎么回事。
这篇文章的源代码可以在这里找到。我很乐意收到任何反馈或问题。
原作者:Susan Li原文地址:https://towardsdatascience.com/linear-regression-in-python-predict-the-bay-areas-home-price-5c91c8378878
以上。
领取专属 10元无门槛券
私享最新 技术干货