《python深度学习》笔记---3.6、预测房价:回归问题
《python深度学习》笔记---3.6、预测房价:回归问题
一、总结
一句话总结:
(404, 13)对应模型输入是13维度:因为train_data的结构是(404, 13),也就是13维,所以模型输入维度就是13维
输出层一个神经元拟合任何数:因为是回归问题,所以输出层就是只有一个神经元的dense层
【减均值,除标准差】:因为数据涉及的特征的标度比较乱,所以减均值,除标准差
1、logistic回归不是回归算法?
logistic回归是分类算法:不要将回归问题与 logistic 回归算法混为一谈。令人困惑的是,logistic 回归不是回归算法, 而是分类算法。
2、注意,用于测试数据标准化的均值和标准差都是在训练数据上计算得到的?
不能使用在测试数据上的任何数据:在工作流程中,你不能使用在测试数据上计算得到的任何结果,即使是像数据标准化这么简单的事情也不行。
3、回归问题:最后一层是纯线性的,所以 网络可以学会预测任意范围内的值?
回归问题网络最后一层没有激活函数:网络的最后一层只有一个单元,没有激活,是一个线性层。这是标量回归(标量回归是预 测单一连续值的回归)的典型设置。
添加激活函数将会限制输出范围:例如,如果向最后一层 添加 sigmoid 激活函数,网络只能学会预测0~1 范围内的值。
4、均方误差(MSE,mean squared error)和平均绝对误差(MAE,mean absolute error)?
目标值之差的绝对值:平均绝对误差(MAE,mean absolute error)
预测值与目标值之差的平方:均方误差(MSE,mean squared error)
5、为什么使用 K 折交叉验证?
数据集小验证分数波动大:但由于数据点很少,验证集会非常小(比如大约 100 个样本)。因此,验证分数可能会有很大波动,这取决于你所选择的验证集和训练集。
验证集的划分方式可能会造成验证分数上有很大的方差:也就是说,验证集的划分方式可能会造成验证分数上有很大的方差,这样就无法对模型进行可靠的评估。
6、数据标准化(train_data的维度是(404, 13))?
减均值除标准差:train_data -= mean;train_data /= std
批量操作:mean = train_data.mean(axis=0)
mean = train_data.mean(axis=0) train_data -= mean std = train_data.std(axis=0) train_data /= std test_data -= mean test_data /= std
7、K 折交叉验证?
训练集上训练和测试:在训练集上就是一部分数据做训练,一部分数据做测试,然后再在测试集上测试
训练集上的训练数据和测试数据是轮换的:比如把训练数据分5份,那么1/2/3/4/5分别做测试数据
代码操作就是分别选训练和测试数据:代码非常简单,选出训练数据,选出测试数据
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=1, verbose=0) val_mse, val_mae = model.evaluate(val_data, val_targets, verbose=0) all_scores.append(val_mae)
二、预测房价:回归问题
博客对应课程的视频位置:
import pandas as pd
import numpy as np
import tensorflow as tf
import matplotlib.pyplot as plt
步骤
1、读取数据集
2、格式化数据集(方便数据使用)
3、构建模型
4、训练模型
5、检验模型
需求
1、读取数据集
In [2]:
(train_data, train_targets), (test_data, test_targets) = tf.keras.datasets.boston_housing.load_data()
In [3]:
print(train_data.shape)
print(train_targets.shape)
print(test_data.shape)
print(test_targets.shape)
In [4]:
print(train_data[0:2])
print(train_targets[0:2])
2、格式化数据集
数据标准化
In [5]:
mean = train_data.mean(axis=0)
train_data -= mean
std = train_data.std(axis=0)
train_data /= std
test_data -= mean
test_data /= std
In [6]:
print(mean)
In [7]:
print(std)
3、构建模型
13->64->64->1
因为输入数据是13维度
In [19]:
print(train_data.shape[1])
In [9]:
model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Dense(64, activation='relu',input_shape=(train_data.shape[1],)))
model.add(tf.keras.layers.Dense(64, activation='relu'))
model.add(tf.keras.layers.Dense(1))
model.summary()
4、训练模型
In [13]:
model.compile(optimizer='rmsprop', loss='mse', metrics=['mae'])
history = model.fit(train_data, train_targets, batch_size=32, epochs=500, validation_data=(test_data, test_targets))
In [14]:
plt.plot(history.epoch,history.history.get('loss'),'b--',label='train_loss')
plt.plot(history.epoch,history.history.get('val_loss'),'r-',label='test_loss')
plt.title("loss")
plt.legend()
plt.show()
In [15]:
plt.plot(history.epoch,history.history.get('mae'),'b--',label='train_mae')
plt.plot(history.epoch,history.history.get('val_mae'),'r-',label='test_mae')
plt.title("mae")
plt.legend()
plt.show()
5、检验模型
In [18]:
pridict_y=model.predict(test_data)
# print(pridict_y)
# print(test_targets)
In [17]:
test_y = test_targets
pridict_y=pridict_y.flatten()
test_y=np.array(test_y)
print(test_y)
print(pridict_y)
print(test_y-pridict_y)
In [ ]:
版权申明:欢迎转载,但请注明出处
一些博文中有一些参考内容因时间久远找不到来源了没有注明,如果侵权请联系我删除。
在校每年国奖、专业第一,加拿大留学,先后工作于华东师范大学和香港教育大学。
2024-09-05:27岁,宅加太忙,特此在网上找女朋友,vx:fan404006308
AI交流资料群:753014672