上张图很难看出规律,需要重新绘制。
- 删除前10个数据点,因为它们的取值范围与曲线上其他点不同;
- 将每个数据点替换为前面数据点的指数移动平均值,以便得到光滑的曲线。
绘制验证分数(删除前10个数据点)
def smooth_curve(points, factor=0.9):
smoothed_points = []
for point in points:
if smoothed_points:
previous = smoothed_points[-1]
smoothed_points.append(previous * factor + point * (1 - factor))
else:
smoothed_points.append(point)
return smoothed_points
smooth_mae_history = smooth_curve(average_mae_history[10:])
plt.plot(range(1, len(smooth_mae_history) + 1), smooth_mae_history)
plt.xlabel('Epochs')
plt.ylabel('Validation MAE')
plt.show()
每轮验证MAE(删除前10个数据点).png
80轮后开始过拟合。
训练最终模型
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)
print(test_mae_score)
32/102 [========>.....................] - ETA: 0s
102/102 [==============================] - 0s 127us/step
2.5407708579418706
预测的房价和实际价格相差约2500美元。
小结
1、回归问题使用的损失函数与分类问题不同。回归问题常用的损失函数为均方误差(MSE);
2、回归问题使用的评估指标与分类问题不同。常用平均绝对误差(MAE);
3、输入数据特征取值范围不同,要对数据进行预处理,进行归一化;
4、若可用数据过少,使用K折验证可以很好评估模型;
5、如果训练数据少,则使用较少的隐藏层(1到2个),避免出现过拟合。
网友评论