## 房价影响因素分析
**摘要**:
本文主要分析影响房价的因素,数据来源为链家网,机器学习模型的使用中,采用了三种线性模型,一种非线性模型,最后得出的结论是房子的大小,房子的位置,房子的建造年份以及房子的高度对房价影响较大。
### 问题描述
现在房价居高不下,特别是上海等一线城市,房价更是高的离谱,那么在决定一个房子的价格中,哪些因素占了主要的地位,如何让想买房的人快速获取大概的房价信息。那么本文介绍的就是如何用机器学习去训练上海房价信息并生成模型然后进行分析的过程。
### 数据收集及处理
**数据源选择**
经过在网上对几个房价信息网的比较,
![](https://www.writebug.com/myres/static/uploads/2021/12/25/e031fda679fe7e7731abead47798b44d.writebug)
安居客房价信息
![](https://www.writebug.com/myres/static/uploads/2021/12/25/a6ce1f0353ebac0e1f3e9c7fdb48f14c.writebug)
搜房网房价信息
![](https://www.writebug.com/myres/static/uploads/2021/12/25/947e2fece5f0c52343582cfee8dc105f.writebug)
链家网房价信息
可以看到,各个房价网站展示的房价信息差别不大,另外根据百度上查到链家网的房价与实际的房价差距较小,所以就把链家网的房价数据作为数据源。
目前上海的新房较少,链家网上上海的新房信息只有约 400 套,数据集过小,不适合进行训练,所以选择了二手房信息作为数据集进行训练。在链家网上,上海二手房数据有几万套,可以进行机器学习的训练。
**数据收集**
使用爬虫从链家网上爬取房价信息的数据,爬虫使用 python 编写,并存入 MongoDB 数据库,以备之后的训练。爬虫代码见附录
**数据处理**
由之前截图可见,房价信息数据还不能直接用于机器学习的训练,所以对其中的一些数据进行处理使得更适合训练。
首先是房型![](https://www.writebug.com/myres/static/uploads/2021/12/25/a2cf9bb48c119c32fac862ec57fb771b.writebug)可以看到这里可以比较轻松的把房型拆分为几个房间,几个客厅。![](https://www.writebug.com/myres/static/uploads/2021/12/25/d501f5ea1d0b02b189c7c2640d970a0f.writebug)对于楼层高度,总共有 6 层高,房子位于中层,那么就用 6*0.5 表示房子的高度。同样,对于低层和高层的房子,分别用楼高乘以 0.2 和 0.8 表示房子的高度。
![](https://www.writebug.com/myres/static/uploads/2021/12/25/a23ace7a15a396a65d3ded17246315a6.writebug)
对于地址,调用了高德地图的地址查询 API 把它转换成了经纬度信息。
其他的数据信息都比较标准,不需要进行额外的处理。
### 采用的模型及原因
所有的模型训练都是把已有的数据集按照 80% 作为训练集,20% 作为测试集来进行模型的训练的。
**线性回归模型**
线性回归模型是比较基本的房价训练模型,在预测波士顿房价的这个机器学习案例中使用的就是线性回归模型。并且,给每个房价的特征赋予一个系数来生成具体的房价是一个直观上感觉很正确的方法。
**神经网络**
目前比较流行的机器学习方法,对于数据的训练通常会有比较好的结果,因为通过反向传播算法不断迭代使得预测结果逼近实际值,可以作为与线性回归模型的对比来看看是否会有更好的表现。
**支持向量机**
也是比较流行的机器学习算法,对于线性模型的训练效果一般会优于线性回归模型,使用这个模型也是想看能不能对线性回归模型进行一些提高。
### 使用的 python 机器学习库
因为目前 python 对机器学习的支持比较好,有大量机器学习的库可以调用,而且我的爬虫也是使用机器学习编写的,所以决定使用 python 的 sklearn 库中的机器学习算法来进行训练及预测。
Sklearn 作为目前机器学习中一个常用的 python 第三方模块,封装了许多机器学习的算法,它的官网是,在 GitHub 上可以看到相应的介绍和源代码。这个库是在 2007 年 Google 的一个暑期项目中由 David Cournapeau 开发并由 800 多位 contributor 合力开发出的机器学习库。
### 建模过程
**数据特征分析**
总共爬取了 39622 条房源信息,爬取的特征如下:
![](https://www.writebug.com/myres/static/uploads/2021/12/25/fb2cbfc46c0e3b621732c614967a0ec9.writebug)
其大部分的特征都是 number 类型,根据平时对于房价的影响因素的了解,目前认为比较重要的特征有房子大小,房子位置,房子的建造年份这几个特征。
在训练时按序输入的特征如下:房子中的房间数,房子中的客厅数,房子的大小,房子的建造年份,房子的高度,房子所在那栋楼的高度,房子的经度,房子的纬度。一共八个特征。
**调参**
在训练的过程中,根据训练出的结果中特征的重要程度不同进行调参,把不重要的特征删除并再次训练,直到剩下的特征都对结果影响很大。
**结果分析及模型对比**
对于训练出的结果,线性回归模型,神经网络,svm 的误差基本都在每平方米 18000 元左右,这个误差是比较大的。所以,这个房价的模型可能是非线性的,才会产生如此大的误差。
![](https://www.writebug.com/myres/static/uploads/2021/12/25/26577999adb8be2127f01d2c942d24f6.writebug)
由上图可知,线性回归的表现较好,神经网络次之,svm 最差。另外,从线性回归的模型参数来看,每多一个房间,每多一个客厅,房子建的越晚,都会导致房价变低,这显然是不符合常识的。所以这个房价模型应该是一个非线性模型。
### 非线性模型建模
**非线性决策树**
使用了 sklearn 库中自带的 DecisionTreeRegressor 模型,经计算误差在 8500 元每平左右。评分达到了 0.84(满分 1 分)
![](https://www.writebug.com/myres/static/uploads/2021/12/25/9b981b9ec36c7b7eb377998566f39a00.writebug)
**结论**
可以看出,在改用非线性模型之后,结果有了很大的改善。另外根据输出的模型参数权重,可以得知,房子的大小,建造年份,房子的高低以及房子所处的位置对房价有较大的影响,而房子的房型以及房子所在整栋楼的高度对房价的影响很小。另外,房子的经纬度对房价的影响非常大,说明在上海,市区和郊区的房价跨度很明显。
### 房价查询界面
先在链家网上随意找一条房源信息
![](https://www.writebug.com/myres/static/uploads/2021/12/25/270134b8da5f45bf2a99c33f8f62fa4b.writebug)
输入查询界面
![](https://www.writebug.com/myres/static/uploads/2021/12/25/9ec2d001d23c6d91e0c33704fa10989e.writebug)
点击查询进行房价咨询
![](https://www.writebug.com/myres/static/uploads/2021/12/25/b7dee50c23e06af654e5b912901becf1.writebug)
会输出房子的每平米价格及总价,可以看到,链家网上挂出的价格是每平米 64960 元,模型的预测结果为每平米 61417 元,总价相差 40 万,基本达到了帮助用户了解房价的需求。
### 改进措施
**收集更多数据**
![](https://www.writebug.com/myres/static/uploads/2021/12/25/fdc5fe76e7c1a6f9d4e52715872b9505.writebug)
数据集在 20000 条以下时的训练学习曲线
![](https://www.writebug.com/myres/static/uploads/2021/12/25/4f93e4baf62541a68326ae547f44b8d8.writebug)
数据集在 40000 条以下时的训练学习曲线
从上面的两张图可以看出,随着数据集变大,验证集的准确率不断上升,所以需要收集更多的训练数据来精化模型。目前的房价数据还不是非常的多,容易受到部分异常房价信息的影响
**寻找更多特征**
影响房价的因�
没有合适的资源?快使用搜索试试~ 我知道了~
资源推荐
资源详情
资源评论
收起资源包目录
基于机器学习模型预测.rar (22个子文件)
基于机器学习模型预测
期末项目.docx 527KB
get_data_to_mongo.py 6KB
机器学习模型预测
预测模型
LICENSE 1KB
img
10-04af71313e2f0ff64357f0f12fb0dcb7.png 71KB
14-e61a54ed14792ebed41bb51a27697545.png 35KB
7-7caf95c89da25e600d94ffdf4f7a8f1e.png 54KB
5-27e959d97b020057a4f456403d538e10.png 1KB
13-fe7dae08334eea5b979249eefad8a394.png 38KB
6-937ec905baf69d5d150715a4cbde17d8.png 3KB
4-19663b156f5f4b6e50037623da587896.png 1KB
3-78ae986d22db55ed746e1a70fde5ad69.png 77KB
11-62c8745ca13e04dff5576d4f3cc7ba94.png 10KB
2-65c0d41172060528352cb37444ec34eb.png 76KB
12-99d8c6ac138e0112e5856e0fad84d2d5.png 19KB
8-2b1fb37dfe331606692cbd45b3a7673e.png 19KB
9-fde60174b5deacccc77f5f4da980cf87.png 19KB
1-88c9197f4980cc2786519b4c4477a81f.png 74KB
load_data_and_train.py 3KB
README.md 18KB
test_gaode_api.py 496B
test_sklearn_1.py 1KB
test_sklearn_2.py 696B
共 22 条
- 1
资源评论
程序员奇奇
- 粉丝: 3w+
- 资源: 297
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功