预测房价:回归问题

回归问题预测结果为连续值,而不是离散的类别。

波士顿房价数据集

通过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的房价预测的更多相关文章

  1. Deep learning with Python 学习笔记(10)

    生成式深度学习 机器学习模型能够对图像.音乐和故事的统计潜在空间(latent space)进行学习,然后从这个空间中采样(sample),创造出与模型在训练数据中所见到的艺术作品具有相似特征的新作品 ...

  2. Deep learning with Python 学习笔记(9)

    神经网络模型的优化 使用 Keras 回调函数 使用 model.fit()或 model.fit_generator() 在一个大型数据集上启动数十轮的训练,有点类似于扔一架纸飞机,一开始给它一点推 ...

  3. Deep learning with Python 学习笔记(8)

    Keras 函数式编程 利用 Keras 函数式 API,你可以构建类图(graph-like)模型.在不同的输入之间共享某一层,并且还可以像使用 Python 函数一样使用 Keras 模型.Ker ...

  4. Deep learning with Python 学习笔记(6)

    本节介绍循环神经网络及其优化 循环神经网络(RNN,recurrent neural network)处理序列的方式是,遍历所有序列元素,并保存一个状态(state),其中包含与已查看内容相关的信息. ...

  5. Deep learning with Python 学习笔记(3)

    本节介绍基于Keras的使用预训练模型方法 想要将深度学习应用于小型图像数据集,一种常用且非常高效的方法是使用预训练网络.预训练网络(pretrained network)是一个保存好的网络,之前已在 ...

  6. Deep learning with Python 学习笔记(2)

    本节介绍基于Keras的CNN 卷积神经网络接收形状为 (image_height, image_width, image_channels)的输入张量(不包括批量维度),宽度和高度两个维度的尺寸通常 ...

  7. Deep learning with Python 学习笔记(1)

    深度学习基础 Python 的 Keras 库来学习手写数字分类,将手写数字的灰度图像(28 像素 ×28 像素)划分到 10 个类别 中(0~9) 神经网络的核心组件是层(layer),它是一种数据 ...

  8. [Udemy] Recommender Systems and Deep Learning in Python

    1. Welcome 主要讲四部分内容: non-personized systems popularity: 基于流行度或者最大利益化的推荐. 缺点也明显:你可能在特殊地方有些特殊需求, 或者你本来 ...

  9. Machine and Deep Learning with Python

    Machine and Deep Learning with Python Education Tutorials and courses Supervised learning superstiti ...

随机推荐

  1. Django 自定义表

    1.Django自带的用户表 create table auth_user ( id int auto_increment primary key, password varchar(128) not ...

  2. 【转】python version 2.7 required,which was not found in the registry

    源地址:http://www.cnblogs.com/thinksasa/archive/2013/08/26/3283695.html 方法:新建一个register.py 文件,把一下代码贴进去, ...

  3. sublime中如何用less实现css预编译

    实现css预编译的方式有很多,听说glup很流行而且功能也很强大,但是就目前的工作而言,仅要css预编译和YUIcompress就够了,接下来切入正题 Less 是一门 CSS 预处理语言,它扩展了 ...

  4. Python习题(第3课)

    一.独一无二的路 从前有一只小小的机器人叫小器,小器站在一个M*N的格子地板的最左上角,很孤单,世界辣么大,它也想去看看,经过不懈的努力它终于可以(只能)向下或者向右移动啦,它有一个宏伟的愿望就是要穿 ...

  5. VMWare虚拟机安装Linux系统时安装界面显示不全的解决、Linux分区

    1.只有最下面的按钮不全(可以显示字的一部分):可以用Tab键操控进行下一步 2.只有一半左右的界面:用Alt+鼠标左键移动安装界面 3.关于Linux分区:如果想用Linux进行深入操作,尽量不要选 ...

  6. SQL2005的SSMS连接SQL2012会有问题

    SQL2005的SSMS连接SQL2012会有问题 如果用SQL2005的SSMS连接SQL2012会产生“索引数组越界”的问题并且使用不了 反过来使用SQL2012的SSMS连接SQL2005就没有 ...

  7. LevelDB源码分析--Cache及Get查找流程

    本打算接下来分析version相关的概念,但是在准备的过程中看到了VersionSet的table_cache_这个变量才想起还有这样一个模块尚未分析,经过权衡觉得leveldb的version相对C ...

  8. SQL语句结合上下文查询(in查询)

    在多个表联合查询时,使用linq语句查询就显得不那么方便了,执行效率也不高, SQL语句查询的优势就显现出来了. using (var context = new YZS_TRAEntities()) ...

  9. 使用 Azure 门户创建 Windows 虚拟机

    可以通过 Azure 门户创建 Azure 虚拟机. 此方法提供一个基于浏览器的用户界面,用于创建和配置虚拟机和所有相关的资源. 本快速入门介绍了如何创建虚拟机并在 VM 上安装 webserver. ...

  10. windows7环境下使用pip安装MySQLdb for python3.7

    1.首先,需要确定你已经安装了pip.在Python2.7的安装包中,easy_install.py和pip都是默认安装的.可以在Python的安装目录先确认,如果\Python37\Scripts里 ...