文章目录
1.数据集及问题简介
20 世纪70 年代中期波士顿郊区房屋价格数据集,它包含的数据点相对较少,只有506 个,分为404 个训练样本和102 个测试样本。输入数据的每个特征(比如犯罪率)都有不同的取值范围。例如,有些特性是比例,取值范围为0-1;有的取值范围为1-12;还有的取值范围为0~100,等等。
我们将要预测当时该地区房屋价格的中位数,这是一个回归问题。
分类问题,其目标是预测输入数据点所对应的单一离散的标签。另一种常见的机器学习问题是回归问题,它预测一个连续值而不是离散的标签,例如,根据气象数据预测明天的气温,或者根据软件说明书预测完成软件项目所需要的时间。
2.加载数据集并探索数据
from keras.datasets import boston_housing
(train_data, train_targets), (test_data, test_targets) = boston_housing.load_data()
print(train_data.shape) # (404, 13)
print(test_data.shape) #(102, 13)
print(train_targets) #array([ 15.2, 42.3, 50. ... 19.4, 19.4, 29.1])
#【房价大都在 10000~50000 美元】
简单了解各属性的意义:
import pandas as pd
train = pd.DataFrame(train_data)
train.columns=['crim','zn','indus','chas','nox','rm','age','dis','rad','tax','ptratio','b','lstat']
train.columns=['人均犯罪','用地','非商业地','河','环保指标','房间数',
'老房子比例','dis','交通便利','税率','教师学生比','黑人比','低收入房东比']
train
3.准备输入的数据
将取值范围差异很大的数据输入到神经网络中,这是有问题的。网络可能会自动适应这种取值范围不同的数据,但学习肯定变得更加困难。对于这种数据,普遍采用的最佳实践是对每个特征做标准化,即对于输入数据的每个特征(输入数据矩阵中的列),减去特征平均值,再除以标准差,这样得到的特征平均值为0,标准差为1。用Numpy 可以很容易实现标准化。
#【1】求每一列的平均值
mean = train_data.mean(axis=0)
#【2】减去平均值
train_data -= mean
#【3】求每一列的标准差
std = train_data.std(axis=0)
#【4】除以标准差
train_data