[Deep-Learning-with-Python]基于Keras的房价预测
预测房价:回归问题
回归问题预测结果为连续值,而不是离散的类别。
波士顿房价数据集
通过20世纪70年代波士顿郊区房价数据集,预测平均房价;数据集的特征包括犯罪率、税率等信息。数据集只有506条记录,划分成404的训练集和102的测试集。每个记录的特征取值范围各不相同。比如,有01,112以及0~100的等等。
加载数据集
from keras.datasets import boston_housing
(train_data,train_targets),(test_data,test_targets) = boston_housing.load_data()
训练集形状:
>>> train_data.shape
(404, 13)
测试集形状:
>>> test_data.shape
(102, 13)
训练集404条,测试集102条;每条记录13个数值特征。
房价单位为1000美元。
>>> train_targets
[ 15.2, 42.3, 50. ...19.4,19.4,29.1]
房价范围在$10,000到$50,000。
准备数据
因为数据各个特征取值范围各不相同,不能直接送到神经网络模型中进行处理。尽管网络模型能适应数据的多样性,但是相应的学习过程变得非常困难。一种常见的数据处理方法是特征归一化normalization---减均值除以标准差;数据0中心化,方差为1.
mean = train_data.mean(axis=0)
train_data -= mean # 减去均值
std = train_data.std(axis=0) # 特征标准差
train_data /= std
test_data -= mean #测试集处理:使用训练集的均值和标准差;不用重新计算
test_data /= std
模型构建
由于数据集数据量过小,模型也不能太复杂,否则容易发生过拟合。
from keras import models
from keras import layers
def build_model():
model = models.Sequential()
model.add(layers.Dense(64, activation='relu',input_shape=(train_data.shape[1],)))
model.add(layers.Dense(64, activation='relu'))
model.add(layers.Dense(1))
model.compile(optimizer='rmsprop', loss='mse', metrics=['mae'])
return model
模型的最后一层只有一个神经元,没有激活函数--相当于一个线性层。这种处理方法常用在单标量回归问题中。使用激活函数将会限制输出结果的范围,比如使用sigmoid激活函数,输出结果在0~1之间。这里,因为最后一层只是一个线性层,模型的输出结果可能是任意值。
模型的损失函数为mse均方误差。监测的指标为mean absolute error(MAE)平均绝对误差---两个结果之间差的绝对值。
K折交叉验证
当调整模型参数时,为了评估模型,我们通常将数据集分成训练集和验证集。但是当数据量过小时,验证集数目也变得很小,导致验证集上的评估结果相互之间差异性很大---与训练集和测试集的划分结果相关。评估结果可信度不高。
最好的评估方式是采用K折交叉验证--将数据集分成K份(K=4或5),实例化K个模型,每个模型在K-1份数据上进行训练,在1份数据上进行评估,最后用K次评估分数的平均值做最后的评估结果。

import numpy as np
k = 4
num_val_samples = len(train_data) // k
num_epochs = 100
all_scores = []
for i in range(k):
print('processing fold #',i)
val_data = train_data[i*num_val_samples : (i+1)*num_val_samples] # 划分出验证集部分
val_targets = train_targets[i*num_val_samples : (i+1)*num_val_samples]
partial_train_data = np.concatenate([train_data[:i*num_val_samples],train_data[(i+1)* num_val_samples:] ],axis=0) # 将训练集拼接到一起
partial_train_targets = np.concatenate([train_targets[:i*num_val_samples],train_targets[(i+1)* num_val_samples:] ],axis=0)
model = build_model()
model.fit(partial_train_data,partial_train_targets,epochs=num_epochs,batch_size=16,verbose=0)#模型训练silent模型
val_mse, val_mae = model.evaluate(val_data, val_targets, verbose=0) # 验证集上评估
all_scores.append(val_mae)
模型训练
model = build_model()
model.fit(train_data, train_targets,epochs=80, batch_size=16, verbose=0)
test_mse_score, test_mae_score = model.evaluate(test_data, test_targets)# score 2.5532484335057877
小结
- 回归问题:损失函数通常为MSE均方误差;
- 模型评估监测指标通常为MAE(mean absolute error);
- 当数据取值范围不一致时,需要对特征进行预处理;
- 数据量小时,可以采用K折验证来衡量模型;
- 数据量小时,模型复杂度也应该相应的简单,可以避免模型过拟合。
[Deep-Learning-with-Python]基于Keras的房价预测的更多相关文章
- Deep learning with Python 学习笔记(10)
生成式深度学习 机器学习模型能够对图像.音乐和故事的统计潜在空间(latent space)进行学习,然后从这个空间中采样(sample),创造出与模型在训练数据中所见到的艺术作品具有相似特征的新作品 ...
- Deep learning with Python 学习笔记(9)
神经网络模型的优化 使用 Keras 回调函数 使用 model.fit()或 model.fit_generator() 在一个大型数据集上启动数十轮的训练,有点类似于扔一架纸飞机,一开始给它一点推 ...
- Deep learning with Python 学习笔记(8)
Keras 函数式编程 利用 Keras 函数式 API,你可以构建类图(graph-like)模型.在不同的输入之间共享某一层,并且还可以像使用 Python 函数一样使用 Keras 模型.Ker ...
- Deep learning with Python 学习笔记(6)
本节介绍循环神经网络及其优化 循环神经网络(RNN,recurrent neural network)处理序列的方式是,遍历所有序列元素,并保存一个状态(state),其中包含与已查看内容相关的信息. ...
- Deep learning with Python 学习笔记(3)
本节介绍基于Keras的使用预训练模型方法 想要将深度学习应用于小型图像数据集,一种常用且非常高效的方法是使用预训练网络.预训练网络(pretrained network)是一个保存好的网络,之前已在 ...
- Deep learning with Python 学习笔记(2)
本节介绍基于Keras的CNN 卷积神经网络接收形状为 (image_height, image_width, image_channels)的输入张量(不包括批量维度),宽度和高度两个维度的尺寸通常 ...
- Deep learning with Python 学习笔记(1)
深度学习基础 Python 的 Keras 库来学习手写数字分类,将手写数字的灰度图像(28 像素 ×28 像素)划分到 10 个类别 中(0~9) 神经网络的核心组件是层(layer),它是一种数据 ...
- [Udemy] Recommender Systems and Deep Learning in Python
1. Welcome 主要讲四部分内容: non-personized systems popularity: 基于流行度或者最大利益化的推荐. 缺点也明显:你可能在特殊地方有些特殊需求, 或者你本来 ...
- Machine and Deep Learning with Python
Machine and Deep Learning with Python Education Tutorials and courses Supervised learning superstiti ...
随机推荐
- Linux笔记(一):CentOS-7安装
(一) 安装环境 VMware® Workstation 12 Pro,安装到物理机的话还需要做个U盘启动盘 (二) 下载 https://www.centos.org/download/ ...
- 负载均衡(Load Balancing)学习笔记(三)
本文讲述实现负载均衡的常用算法. 轮询法(Round Robin) 轮询法是负载均衡中最常用的算法,它容易理解也容易实现.轮询法是指负载均衡服务器(load balancer)将客户端请求按顺序轮流分 ...
- SQL Server中事务transaction如果没写在try catch中,就算中间语句报错还是会提交
假如我们数据库中有两张表Person和Book Person表: CREATE TABLE [dbo].[Person]( ,) NOT NULL, ) NULL, ) NULL, [CreateTi ...
- 索引,B+ tree,动态hash表
数据库课索引部分的学习笔记. 教材: Database System: The Complete Book, Chapter 15 Database System Implementation, Ch ...
- 转:Web 开发中很实用的10个效果【附源码下载】
原文地址:http://www.cnblogs.com/lhb25/p/10-useful-web-effect.html 在工作中,我们可能会用到各种交互效果.而这些效果在平常翻看文章的时候碰到很多 ...
- 直播内容不合规怎么办?智能AI为您解决审核难题
背景 近些年来,视频直播快速发展,大量的直播平台如雨后春笋一般出现,但是这同样给直播内容的监管带来了巨大的挑战,一方面国家对于直播内容监管的要求日益严格,另一方面相对于文字内容的审核,多媒体内容的审核 ...
- ESXI6.0新添加硬盘未能格式化成功
最近练手,手头现有的硬盘是从其他机器上拆下来的,插入ESXI主机上,然后在系统配置硬盘的时候,不能格式化 报错 提示如下错误:"在ESXi"xxx.xxx.xxx.xxx" ...
- MySQL基础之 LIKE操作符
LIKE操作符 作用:用于在WHERE子句中搜索列中的指定模式. 语法:SELECT COLUMN_NAME FROM TABLE_NAME WHERE COLUMN_NAME LIKE ...
- 使用ubuntu过程中遇到的问题汇总
使用ubuntu过程中遇到的问题汇总 1.使用图形界面设置免密码登录之后,改回密码登陆失效 解决方案: https://askubuntu.com/questions/211084/how-do-i- ...
- 关于Vue的nextTick的一点小理解
官方文档表示:为了在数据变化之后等待Vue完成更新DOM,可以在数据变化之后立即执行Vue.$nextTick(callback),这样回调函数就可以在数据变化之后立即执行. 这段话的意思是: 例如: ...