房价预测:回归问题

还有一种常见的机器学习问题是回归问题,它预测的是连续值而不是离散标签,例如,根据气象数据预测明天气温,或者根据软件说明书预测项目完成所需要的时间。

数据介绍

这里我们介绍一下数据。要预测的是是20世纪70年代波士顿房屋价格的中位数。这里给出的数据包括犯罪率、当期房产税率等。本次,我们有的数据点相对较少,只有506个,分为404个训练样本和102个测试样本。输入数据的每个特征都有不同的取值范围。有些特征是比例,取值范围为0-1,有的特征取值范围为1-12;还有的特征取值范围为0-100等。

from keras.datasets import boston_housing

(train_data, train_targets), (test_data, test_targets) =  boston_housing.load_data()

train_data.shape

test_data.shape

结果分别是:
(404, 13)
(102, 13)

这里每个样本有13个特征,比如犯罪率、每个住宅平均房屋间数、告诉公路的可达性等。

我们的目标(或者说希望的测试结果)是房屋价格的中位数,单位是千美元

train_targets

array([ 15.2, 42.3, 50. , 21.1, 17.7, 18.5, 11.3, 15.6, 15.6,
14.4, 12.1, 17.9, 23.1, 19.9, 15.7, 8.8, 50. , 22.5,
24.1, 27.5, 10.9, 30.8, 32.9, 24. , 18.5, 13.3, 22.9,…


对数据格式进行处理

将取值范围差异很大的数据直接输入到神经网络中,虽然网络会自动适应这种取值范围不同的数据,但是不进行数据处理直接学效果很不好。因为数据差异比较大的数据在网络中会整体学习效果有较大影响,所以我们需要先做标准化处理(0-1标准差)。

mean = train_data.mean(axis=0)  # axis = 0表示变成一行,实际上是求每列均值
train_data -= mean
std = train_data.std(axis=0)
train_data /= std

test_data -= mean
test_data /= std

构建网络

由于样本很小,所以我们用一个非常小的网络,其中包含两个隐藏层,每层有64个单元,一般来说,训练数据越少,过拟合就会越严重,而较小的网络可以降低过拟合。

from keras import models
from keras import layers

def build_model():
    # Because we will need to instantiate
    # the same model multiple times,
    # we use a function to construct it.
    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
  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Einstellung

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值