绘制验证分数(删除前10个数据点)

上张图很难看出规律,需要重新绘制。

  • 删除前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()
绘制验证分数(删除前10个数据点)_第1张图片
每轮验证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个),避免出现过拟合。

你可能感兴趣的:(绘制验证分数(删除前10个数据点))