【房价预测】BP神经网络回归的现实应用-上海市二手房价格影响因素分析——思路剖析和结果分享

最近没发新文的原因:

  1. 工作很忙,早出晚归
  2. 正忙着做这个活

实验结果:

说实话,我真没想到可以实现这种效果,反正比预想的好,( 也只是怀着玩玩的心情 = = ),
大部分的差价都在百位左右,少数差价在千位以上和十位以下
在这里插入图片描述

思路和步骤:

1.调用爬虫,爬一点需要的数据
2.抓住重点,例如这里,我只用到了比较中心的区域的数据,例如:浦东、徐汇、闵行、黄埔、静安
在这里插入图片描述
在这里插入图片描述

3.分析数据:

  1. 查看数据的描述,分别都有多少种类,每个数据的类型(数字还是类别\多分类标签)。如果是数字,可以直接进行神经网络的运算,只需要简单地归一化;如果是多分类,例如,房型:2室1厅、1室1厅 、3室2厅等等,则需要进行映射,使得数据变为onehot编码。

  2. 可视化探索,例如下图就展示了,地理位置与价格和收藏人数的关系:
    在这里插入图片描述
    可以看到,这个总体关系是呈放射状的,中心区域收藏人数很多(圈圈越大说明收藏人数越多),价格也相对高(越红越高)

  3. 利用一些简单的模型进行分析,例如:LR回归,均方差,随机森林,k均值,支持向量积 等等,大致估计一下效果。如果可以使用神经网络进行训练,那效果肯定是要比上述方法都好,才体现出神经网络的优越性。

  4. 分析上述方案的loss和结果,分析方法,查看训练效果。

这里肉眼就能归纳出数据的某些分布特征,自然,机器也是能用某种规则去分析影响价格的因素,并且给出一个结果的。

先用统计学中的线性关系去看看 单位价格各类信息的线性关系:
在这里插入图片描述
可以看到,自然地,总价格和单位价格的线性相关性很高(这个在预测中肯定是要去掉的),其次是纬度、近地铁、房屋面积,收藏人数等等。
神经网络相关系数的区别就在于,神经网络可以从更高的纬度去进行映射,但是相关系数是线性的,只能查找数据间二维的关系。

神经网络的优点在于高维映射,但是缺点也在于高维映射。
例如:某个需要研究的对象倘若有4个特征,那么2维只需要(至少)16个有效数据(有效数据当然越多越好),4维则需要256个有效数据(假如这些特征都和该研究对象紧密关联)可以想象,当特征变多时,维度越高,整个空间都变得稀疏了(例如一张纸上,画了1000个点,看起来相当密密麻麻,但是在一个三维空间里,这张纸不过是一个薄片,上面的点甚至对一个三维空间来说,求极限等于->不存在点)

所以增加特征的同时,需要增加数据量,但是数据量不是人能决定的,需要销售的房子就是只有那么多,数据大小是受到现实的需要和限制。此时,就需要筛选出最有效的特征们。

此时可能会有人拍脑袋,噢,那肯定选相关系数高的,在这里,那就是这三个:
在这里插入图片描述
选择这三个特征,然后去掉其他的就好了。

很可惜这样的想法,是低维生物的想法,前面说了,相关系数是线性的,只能查找数据间二维的关系。在低维里不那么相关的信息,可能在高维里又不为人知地高相关了。低维相关的数据,确实对预测过程会有较大的影响

在将数据进行整理:

  1. 去除空白数据,或者是将空白数据置为平均值,或者中位数
  2. 去除不需要的列,例如:总价格 ,显然,总价格和房屋大小,就决定了单位价格,不能留
  3. 将数字列留下,将表示类别的列做onehot映射(例如,房型:2室1厅、1室1厅 、3室2厅等)

刚开始的数据:
在这里插入图片描述

最后得到一个这样的数据:
在这里插入图片描述

训练:

最后丢到MLP网络里尝试着训练:

第一次:

很一般,而且无论如何,val_loss(验证集损失) 都在10位数以上,结果的精度只能达到千的级别,而且有少量预测偏差的数据。
在这里插入图片描述

第二次:

以为第一次是因为训练数据不足,又加入了奉贤长宁等地区的数据,使得总的数据量达到了4万条,但是训练效果不仅很差,而且甚至没有收敛,val_loss(验证集损失) 小小地下降后,又急速地上升了。
一般这种情况:

  1. 过拟合,loss一直在小小地下降,但是val_loss(验证集损失)下降后上升,有可能是因为模型太复杂了。这个可以通过加入:Dropout(0.1)丢弃神经元链接概率,activity_regularizer=regularizers.l1(0.05), 施加在输出上的正则项,
    kernel_regularizer=regularizers.l2(0.05), 施加在权重上的正则项 来解决。
  2. 特征不相关,上面这些特征根本和【单位房价】没关系,所以根本不能得到收敛的结果,这就像你搜集一百年以来的天气,也许连明天的天气都无法预测一样。但是这不可能,因为第一次训练证明,是可以收敛的,即使效果不那么好。
  3. 训练的迭代epoch太多。这个不至于,看了下,大约20个epoch就过拟合了,不正常。
    在这里插入图片描述
第三次:

回到了第一次的数据集,这一次仔细检查了特征,发现1.2万条 房型 数据中,有一些例如:6室1厅,3室0厅等等类型,总共数量只有不到40个,但是有10个类型。这说明这种数据算是异常数据,不能加入正常的训练,可能会干扰整个训练过程,造成很大的偏差(一只老鼠坏汤典例)MLP网络很简单,同时也很容易受干扰。另外又排除了一些其他的多分类问题的干扰,重新开始了训练。
这一次收敛了,但是精度只能达到千的级别,不太满意,loss在 1 10 1^{10} 110左右,算不上多好。
在这里插入图片描述

第四次:

所以进行了第四次训练,这次,又进行了一波数据清洗和特征工程(一些有经验的专家,可以通过特征工程和特征筛选,实现某些强精度分类器)。
当然我不是有经验的专家,我随便洗了下,意外发现效果还不错?
这里在100个epoch后loss达到平稳,训练集之所以train_loss大于val_loss,主要还是训练集占了80%,总数较大,验证集占了20%,总数较小,均方差总额也比较小。
虽然有小波动,但是总体不会持续下降了,波动都是较为偶然的(可能只是刚好训练集和测试集数据某次迭代接近了,不具备普适性了)
在这里插入图片描述
查看loss情况:
在这里插入图片描述
查看验证结果:
针不戳,收摊!
在这里插入图片描述

参考网站:

  1. 加州房价预测项目精细解释
  2. BP神经网络回归—房价预测
  3. 基于MATLAB的遗传算法优化的神经网络房价预测实战(附完整代码)
  4. Matlab 遗传算法优化BP神经网络
  5. 感谢大佬的绘图系列博客,确实有意思——
    (数据科学学习手札79)基于geopandas的空间数据分析——深入浅出分层设色
  6. python地理处理包——GeoPandas官方中文文档
  7. 神经网络+波士顿房价数据集
  8. BP神经网络回归—房价预测
  9. Rasterio 地理绘图-依赖库安装
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值