700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 【房价预测】BP神经网络回归的现实应用-上海市二手房价格影响因素分析——思路剖析和

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

时间:2022-09-11 07:07:19

相关推荐

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

最近没发新文的原因:

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

实验结果:

说实话,我真没想到可以实现这种效果,反正比预想的好,( 也只是怀着玩玩的心情 = = ),

大部分的差价都在百位左右,少数差价在千位以上和十位以下

思路和步骤:

1.调用爬虫,爬一点需要的数据

2.抓住重点,例如这里,我只用到了比较中心的区域的数据,例如:浦东、徐汇、闵行、黄埔、静安

3.分析数据:

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

可视化探索,例如下图就展示了,地理位置与价格和收藏人数的关系:

可以看到,这个总体关系是呈放射状的,中心区域收藏人数很多(圈圈越大说明收藏人数越多),价格也相对高(越红越高)

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

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

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

先用统计学中的线性关系去看看单位价格各类信息的线性关系:

可以看到,自然地,总价格和单位价格的线性相关性很高(这个在预测中肯定是要去掉的),其次是纬度、近地铁、房屋面积,收藏人数等等。

神经网络相关系数的区别就在于,神经网络可以从更高的纬度去进行映射,但是相关系数是线性的,只能查找数据间二维的关系。

神经网络的优点在于高维映射,但是缺点也在于高维映射。

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

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

此时可能会有人拍脑袋,噢,那肯定选相关系数高的,在这里,那就是这三个:

选择这三个特征,然后去掉其他的就好了。

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

在将数据进行整理:

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

刚开始的数据:

最后得到一个这样的数据:

训练:

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

第一次:

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

第二次:

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

一般这种情况:

过拟合,loss一直在小小地下降,但是val_loss(验证集损失)下降后上升,有可能是因为模型太复杂了。这个可以通过加入:Dropout(0.1)丢弃神经元链接概率,activity_regularizer=regularizers.l1(0.05),施加在输出上的正则项,

kernel_regularizer=regularizers.l2(0.05),施加在权重上的正则项 来解决。特征不相关,上面这些特征根本和【单位房价】没关系,所以根本不能得到收敛的结果,这就像你搜集一百年以来的天气,也许连明天的天气都无法预测一样。但是这不可能,因为第一次训练证明,是可以收敛的,即使效果不那么好。训练的迭代epoch太多。这个不至于,看了下,大约20个epoch就过拟合了,不正常。

第三次:

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

这一次收敛了,但是精度只能达到千的级别,不太满意,loss在1101^{10}110左右,算不上多好。

第四次:

所以进行了第四次训练,这次,又进行了一波数据清洗和特征工程(一些有经验的专家,可以通过特征工程和特征筛选,实现某些强精度分类器)。

当然我不是有经验的专家,我随便洗了下,意外发现效果还不错?

这里在100个epoch后loss达到平稳,训练集之所以train_loss大于val_loss,主要还是训练集占了80%,总数较大,验证集占了20%,总数较小,均方差总额也比较小。

虽然有小波动,但是总体不会持续下降了,波动都是较为偶然的(可能只是刚好训练集和测试集数据某次迭代接近了,不具备普适性了)

查看loss情况:

查看验证结果:

针不戳,收摊!

参考网站:

加州房价预测项目精细解释BP神经网络回归—房价预测基于MATLAB的遗传算法优化的神经网络房价预测实战(附完整代码)Matlab 遗传算法优化BP神经网络感谢大佬的绘图系列博客,确实有意思——

(数据科学学习手札79)基于geopandas的空间数据分析——深入浅出分层设色 python地理处理包——GeoPandas官方中文文档神经网络+波士顿房价数据集BP神经网络回归—房价预测Rasterio 地理绘图-依赖库安装

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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。