实战!使用机器学习,实现对房价的评估预测

前言

自己动手,爬取58同城上的租房网站信息,然后用该数据预测未知的房源价格。爬虫部分不是我写的,我只是完成了其中的一部分预测功能。

预测主要是使用回归预测,预测结果比较简陋,但是也可以通过这个小项目,来简单地学习一下基于Python的回归预测。

在本文中,我实现了三种回归预测算法:

1. 支持向量回归(SVR)

2. logistic回归

3. 以及使用核技巧的岭回归(L2回归)

实现过程

数据准备

我们把项目上传到github中去,该部分的实现在这里:

https://github.com/TomorrowIsBetter/crawler/tree/master/price_prediction

在这个文件夹下的 文件就是爬出到的部分文件数据。我们可以直接来看下文件的格式:

由于58同城在一线城市,例如笔者所在的北京,一般没有人在这上面租房和发布房源,数据大多数都是来源于中介。但是58在二三线城市的可用性还是可以的,所以,这里面的数据抓取的是国内某二三线城市中的数据。

在这里,我们可以注意到CSV文件的title,命名比较诡异,咳咳,就这样吧,不要吐槽哦~

模型训练

算法是统计学习方法,使用基于Python语言的scikit-learn库来实现。先看下代码我们再解释:

完整的代码在这个位置:

https://github.com/TomorrowIsBetter/crawler/blob/master/price_prediction/train.py

先说先这里代码的问题:

命名问题:归一化函数应该命名为动词词性;

当时命名的时候忘记这个了,代码都写出来了,懒得改了,大家知道就行了。

模型说明

代码主要分为这么几个部分:

1. 数据预处理:载入数据,打乱数据,数据的归一化

2. 数据集拆分:将数据集拆分为训练集和验证集

3. 训练模型:自动测试最佳超参数,使用训练集训练模型

4. 数据可视化:将预测结果和偏差分布情况可视化出来

归一化

模型的归一化遵循下面的公式来实现:

其中,类别部分是使用标号来标记的不通类别,归一化时,直接直接除以N即可。

数据集乱序

训练数据集必须要进行打乱,防止训练数据倾斜,造成的预测结果偏差。

如果大家想观察一下效果,可以将这两句代码注释掉:

之后,大家就会直观地看到非乱序数据训练造成的模型预测结果(留给大家去操作一下,如果大家没有时间动手的话,只需要记住这个结论就好)。

数据集拆分

这使用的是交叉验证法,将数据集拆分为训练集和验证集两部分,其实对于深度学习这样数据集比较多的时候,一般拆分为训练集,测试集,验证集三部分,这里数据比较少,就拆分成这两个部分吧。

训练集和验证集的比例是 8:2

测试效果

如图所示,是该程序运行后的可视化图像:

从上图中可以看到,预测结果还是可以的;下图中显示的是预测结果与实际值之间的偏差,将该偏差以直方图的形式展现出来的结果。

可以看到,偏差整体呈现左偏分布,主要集中在[0,500]区间范围,表明该模型具有一定的预测效果。

总结

在此篇博文中,我们仅谈论具体的实现,在今后,我们会在博客中去介绍实现的一些原理,和对相关机器学习算法的讲解。

github中有训练集数据和其他实现部分,大家可以参考下:

https://github.com/TomorrowIsBetter/crawler

其中,该部分内容位于 目录中,其他部分是使用Node实现的爬虫以及使用AntDesign 实现的Web前段页面,由笔者美美哒女朋友实现(逃….)

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180521A0VHYZ00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券