最近没发新文的原因:

  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在1101^{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 地理绘图-依赖库安装

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

  1. Python实现贝叶斯优化器(Bayes_opt)优化BP神经网络回归模型(BP神经网络回归算法)项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 贝叶斯优化器 (BayesianOptimization) 是一 ...

  2. Python实现哈里斯鹰优化算法(HHO)优化BP神经网络回归模型(BP神经网络回归算法)项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 2019年Heidari等人提出哈里斯鹰优化算法(Harris ...

  3. python bp神经网络进行预测_python实现BP神经网络回归预测模型

    神经网络模型一般用来做分类,回归预测模型不常见,本文基于一个用来分类的BP神经网络,对它进行修改,实现了一个回归模型,用来做室内定位.模型主要变化是去掉了第三层的非线性转换,或者说把非线性激活函数Si ...

  4. bp神经网络回归预测模型(python实现)_python实现BP神经网络回归预测模型

    神经网络模型一般用来做分类,回归预测模型不常见,本文基于一个用来分类的BP神经网络,对它进行修改,实现了一个回归模型,用来做室内定位.模型主要变化是去掉了第三层的非线性转换,或者说把非线性激活函数Si ...

  5. 【机器学习】从房价预测问题看回归算法

    关键词:机器学习 / 回归 文章目录 回归问题是什么 生成数据 最小二乘法学习一元线性回归模型 最小二乘法学习多元线性回归模型 梯度下降法学习回归模型 回归问题是什么 回归问题是除了分类问题以外,机器 ...

  6. bp神经网络时间序列预测,bp神经网络数据预处理

    怎么用已经训练好的BP神经网络进行预测下一个值? 谷歌人工智能写作项目:神经网络伪原创 bp神经网络如何用于预测 如何人工神经网络来预测下一个数值 newff函数建立BP神经网络,历史数据作为样本,例 ...

  7. bp神经网络时间序列预测,bp神经网络有几个阶段

    什么是BP神经网络? . BP算法的基本思想是:学习过程由信号正向传播与误差的反向回传两个部分组成:正向传播时,输入样本从输入层传入,经各隐层依次逐层处理,传向输出层,若输出层输出与期望不符,则将误差 ...

  8. 关于考研人数预测的matlab课程论文,计量经济学论文-考研人数的影响因素分析计量经济学论文-考研人数的影响因素分析.doc...

    PAGE PAGE - 13 - 影响报考硕士研究生人数的因素分析摘要:随着我国经济的快速增长,我国对人才市场需求的逐年增加,越来越多的大学生在毕业之后选择了继续深造学业而不是直接就业.尤其是近几年的 ...

  9. 基于Tensorflow框架的BP神经网络回归小案例--预测跳高

    (案例):我们将14组国内男子跳高运动员各项素质指标作为输入,即(30m行进跑,立定三级跳远,助跑摸高,助跑4-6步跳高,负重深蹲杠铃,杠铃半蹲系数,100m,抓举),将对应的跳高成绩作为输出,通过对 ...

  10. 基于keras实现房价预测 (神经网络入门)

    1 数据准备 1.1下载数据 需要提前安装  TensorFlow,keras ,numpy,matplot import tensorflow as tf #从TensorFlow导入keras f ...

最新文章

  1. burpsuite collaborato模块简介 dns log、http_https log、smtp_smtps log
  2. 2.14 向量化 Logistic 回归的梯度输出-深度学习-Stanford吴恩达教授
  3. 神策数据陈世键:融合媒体渠道转型破局策略
  4. 华为离职副总裁徐家骏:透露年薪千万的工作感悟,太震撼了!
  5. Fast Realtime Subsurface Scattering Skin Rendering
  6. Windows Server 2012体验之卸载辅助域控制器
  7. java測試動態方法_java反射学习
  8. Spring Data JPA 从入门到精通~@Param用法
  9. python中表示空类型的是_python中怎么表示空值
  10. linux下adb工具的安装目录下,adb工具包如何安装?怎么用?
  11. OpenDDS项目练习指南
  12. spring boot毕业设计选题及程序开发功能说明
  13. Python报错too many values to unpack解决方案
  14. uniapp离线打包
  15. Windows Server各版本差异
  16. 计算机二级关于ppt的题目,全国计算机二级题库Ppt题目考点.doc
  17. java计算机毕业设计商店管理系统源码+数据库+系统+lw文档+mybatis+运行部署
  18. python语言画图代码_零: python matplotlib 画图进阶(含完整代码)
  19. Django基础概念和MVT架构(一)
  20. 如何选择技术方向和编程语言

热门文章

  1. tampermonkey油猴实现自动定时刷新页面,刷访问量
  2. 项目开发中dev、test和prod是什么意思
  3. 【微信小游戏】微信小游戏开发设置竖屏
  4. JAVA POI导出Excel文件并添加水印
  5. 给各位“老划水员”分享10款提高幸福指数的VSCode“摸鱼神器“
  6. java hd sex_Java学习笔记(十八)——Java DTO
  7. usb接口供电不足_分享电脑usb接口供电不足解决方法
  8. 敌退我进 锂电产业链中日韩三国演义
  9. [计算机数值分析]牛顿插值公式
  10. python图片添加文字