1. 首页
  2. 机器学习

如何开发神经网络来预测汽车保险支出

为新数据集开发神经网络预测模型可能具有挑战性。

一种方法是首先检查数据集并为可能使用的模型开发思路,然后探索数据集上简单模型的学习动态,然后最后使用健壮的测试工具为数据集开发和调整模型。

此过程可用于为分类和回归预测建模问题开发有效的神经网络模型。

在本教程中,您将发现如何为瑞典汽车保险回归数据集开发多层Perceptron神经网络模型。

完成本教程后,您将知道:

  • 如何加载和汇总瑞典汽车保险数据集,以及如何使用结果来建议要使用的数据准备和模型配置。
  • 如何探索简单的MLP模型的学习动态以及数据集上的数据转换。
  • 如何开发出对模型性能的可靠估计,调整模型性能以及对新数据进行预测。

本教程分为四个部分。他们是:

  1. 汽车保险回归数据集
  2. 首个MLP和学习动力
  3. 评估和调整MLP模型
  4. 最终模型和做出预测

汽车保险回归数据集

第一步是定义和探索数据集。

我们将使用“汽车保险”标准回归数据集。

该数据集描述了瑞典的汽车保险。只有一个输入变量,即索赔的数量,目标变量是以数千瑞典克朗为单位的索赔总额。目的是在给定索赔数量的情况下预测总付款额。

您可以在下面看到数据集的前几行。

我们可以看到这些值是数字的,范围从几十到几百。这表明在使用神经网络进行建模时,某种类型的缩放比例将适用于数据。

我们可以直接从URL将数据集作为pandas DataFrame加载;例如:

运行示例将直接从URL加载数据集并报告数据集的形状。

在这种情况下,我们可以确认该数据集具有两个变量(一个输入和一个输出),并且该数据集具有63行数据。

对于神经网络来说,这不是很多数据行,因此建议使用一个可能带有正则化的小型网络是合适的。

这也表明,使用k折交叉验证是一个好主意,因为与火车/测试拆分相比,它可以提供更可靠的模型性能估算,并且因为单个模型的拟合时间为数秒而不是数小时或数天。最大的数据集。

接下来,我们可以通过查看摘要统计信息和数据图来了解有关数据集的更多信息。

运行示例之前,先加载数据,然后输出每个变量的摘要统计信息

我们可以看到每个变量的平均值在十个以内,范围从0到数百。这证实了缩放数据可能是一个好主意。

然后为每个变量创建一个直方图。

我们可以看到每个变量都有相似的分布。它看起来像是偏态的高斯分布或指数分布。

我们可以在每个变量上使用幂变换来降低概率分布的偏斜度,这可能会带来一些好处,这很可能会改善模型的性能。

汽车保险回归数据集的直方图

汽车保险回归数据集的直方图

现在我们熟悉了数据集,让我们探讨如何开发神经网络模型。

首个MLP和学习动力

我们将使用TensorFlow为数据集开发一个多层感知器(MLP)模型。

我们不知道学习超参数的哪种模型架构对该数据集将是好的还是最好的,所以我们必须进行实验并发现什么是行之有效的。

考虑到数据集很小,小批量可能是个好主意,例如8或16行。入门时,使用Adam版本的随机梯度下降法是个好主意,因为它会自动适应学习率,并且在大多数数据集上都能很好地工作。

在我们认真评估模型之前,最好回顾一下学习动态并调整模型体系结构和学习配置,直到我们拥有稳定的学习动态,然后再充分利用模型。

我们可以通过使用简单的训练/测试数据拆分并查看学习曲线图来做到这一点。这将帮助我们了解我们是学习过度还是学习不足;然后我们可以相应地调整配置。

首先,我们可以将数据集分为输入和输出变量,然后分为67/33训练集和测试集。

接下来,我们可以定义一个最小的MLP模型。在这种情况下,我们将使用一个包含10个节点的隐藏层和一个输出层(任意选择)。我们将在隐藏层中使用ReLU激活功能以及“ he_normal ”权重初始化,因为它们在一起是一种很好的做法。

模型的输出是线性激活(不激活),我们将最小化均方误差(MSE)损失。

我们将模型拟合为100个训练时期(任意选择),批量为8个,因为它是一个很小的数据集。

我们正在原始数据上拟合模型,我们认为这可能不是一个好主意,但这是一个重要的起点。

在培训结束时,我们将评估模型在测试数据集上的性能,并将性能报告为平均绝对误差(MAE),我通常更喜欢MSE或RMSE。

最后,我们将在训练期间在训练和测试集上绘制MSE损失的学习曲线。

综上所述,下面列出了评估我们在汽车保险数据集上的第一个MLP的完整示例。

运行示例首先使模型适合训练数据集,然后报告测试数据集上的MAE。

注意:由于算法或评估程序的随机性,或者数值精度的差异,您的结果可能会有所不同。考虑运行该示例几次并比较平均结果。

在这种情况下,我们可以看到该模型实现了大约33.2的MAE,这是性能的良好基准,我们可能可以对其进行改进。

然后在火车和测试仪上创建MSE的线图。

我们可以看到该模型具有良好的拟合度,并且收敛良好。模型的配置是一个很好的起点。

在汽车保险数据集上学习简单MLP的曲线

在汽车保险数据集上学习简单MLP的曲线

到目前为止,学习动力很好,MAE是一个粗略的估计,不应该被依赖。

我们可能可以稍微增加模型的容量,并期待类似的学习动态。例如,我们可以添加具有八个节点(任意选择)的第二个隐藏层,并将训练时期数增加一倍至200。

下面列出了完整的示例。

运行示例首先使模型适合训练数据集,然后报告测试数据集上的MAE。

注意:由于算法或评估程序的随机性,或者数值精度的差异,您的结果可能会有所不同。考虑运行该示例几次并比较平均结果。

在这种情况下,我们可以看到MAE略有改善,达到了约27.9,尽管训练/测试拆分的高方差意味着该评估是不可靠的。

然后绘制MSE训练和测试集的学习曲线。我们可以看到,正如预期的那样,该模型在合理的迭代次数内实现了良好的拟合和收敛。

在汽车保险数据集上学习更深层次的MLP曲线

在汽车保险数据集上学习更深层次的MLP曲线

最后,我们可以尝试转换数据,看看这如何影响学习动态。

在这种情况下,我们将使用幂变换来减少数据分布的偏差。这还将自动标准化变量,以使它们的平均值为零,标准偏差为1,这是使用神经网络进行建模时的一种好习惯。

首先,我们必须确保目标变量是二维数组。

接下来,我们可以将PowerTransformer应用于输入变量和目标变量。

这可以通过首先将转换适合训练数据,然后转换训练集和测试集来实现。

此过程将分别应用于输入和输出变量,以避免数据泄漏。

然后将数据用于拟合模型。

然后,可以根据模型所做的预测和测试集中的预期目标值对转换进行倒置,并且可以像以前一样以正确的比例来计算MAE。

综上所述,下面列出了使用转换后的数据拟合和评估MLP以及创建模型的学习曲线的完整示例。

运行示例首先使模型适合训练数据集,然后报告测试数据集上的MAE。

注意:由于算法或评估程序的随机性,或者数值精度的差异,您的结果可能会有所不同。考虑运行该示例几次并比较平均结果。

在这种情况下,该模型可以达到合理的MAE分数,尽管比以前报告的性能差。现在,我们将忽略模型性能。

创建了学习曲线的线图,表明该模型达到了合理的拟合度,并且有足够的时间收敛。

通过汽车保险数据集上的数据变换来学习更深层次的MLP曲线

通过汽车保险数据集上的数据变换来学习更深层次的MLP曲线

现在,我们对带有或不带有数据转换的简单MLP模型的学习动力学有了一些了解,我们可以看看评估模型的性能以及调整模型的配置。

评估和调整MLP模型

的k折交叉验证过程可以提供的MLP性能更可靠的估计,虽然它可以是非常慢的。

这是因为必须拟合和评估k个模型。当数据集大小较小(例如汽车保险数据集)时,这不是问题。

我们可以使用KFold类创建拆分并手动枚举每个折叠,拟合模型,对其进行评估,然后在过程结束时报告评估得分的平均值。

我们可以使用此框架通过一系列不同的数据准备,模型架构和学习配置来开发MLP模型性能的可靠估计。

重要的是,在使用k-fold交叉验证来评估性能之前,我们首先需要对上一部分中的数据集模型的学习动态有一个了解。如果我们开始直接调整模型,我们可能会得到很好的结果,但是如果没有,我们可能不知道为什么,例如模型过大或过小。

如果我们再次对模型进行较大的更改,则最好返回并确认模型正在适当收敛。

下面列出了用于评估上一节中的基本MLP模型的此框架的完整示例。

运行示例将在评估过程的每次迭代中报告模型性能,并在运行结束时报告MAE的平均值和标准偏差。

注意:由于算法或评估程序的随机性,或者数值精度的差异,您的结果可能会有所不同。考虑运行该示例几次并比较平均结果。

在这种情况下,我们可以看到MLP模型的MAE约为38.913。

我们将使用此结果作为基准,以查看是否可以实现更好的性能。

首先,让我们尝试在原始数据集上评估更深层次的模型,以查看其性能是否比基准模型更好。

下面列出了完整的示例。

运行报告运行结束时MAE的平均值和标准偏差。

注意:由于算法或评估程序的随机性,或者数值精度的差异,您的结果可能会有所不同。考虑运行该示例几次并比较平均结果。

在这种情况下,我们可以看到MLP模型的MAE约为35.384,这比基线模型的MAE约为38.913略好。

接下来,让我们尝试使用与上一节相同的对输入变量和目标变量进行幂变换的模型。

下面列出了完整的示例。

运行报告运行结束时MAE的平均值和标准偏差。

注意:由于算法或评估程序的随机性,或者数值精度的差异,您的结果可能会有所不同。考虑运行该示例几次并比较平均结果。

在这种情况下,我们可以看到MLP模型获得的MAE约为37.371,这比基准模型好,但不比更深的基准模型好。

也许这种转变没有我们最初想象的那样有用。

另一种变换是对输入变量和目标变量进行归一化。

这意味着将每个变量的值缩放到[0,1]范围。我们可以使用MinMaxScaler来实现;例如:

综上所述,下面列出了使用数据规范化评估更深层MLP的完整示例。

运行报告运行结束时MAE的平均值和标准偏差。

注意:由于算法或评估程序的随机性,或者数值精度的差异,您的结果可能会有所不同。考虑运行该示例几次并比较平均结果。

在这种情况下,我们可以看到MLP模型获得的MAE约为30.388,这比我们迄今为止尝试过的任何其他配置都要好。

我们可以继续测试模型架构的替代配置(更多或更少的节点或层),学习超参数(更多或更少的批处理)以及数据转换。

我将其保留为练习;让我知道你发现了什么。您可以获得更好的结果吗?
将您的结果发表在下面的评论中,我很乐意看到您所得到的。

接下来,让我们看一下如何拟合最终模型并使用它进行预测。

最终模型和做出预测

选择模型配置后,我们可以在所有可用数据上训练最终模型,并使用它对新数据进行预测。

在这种情况下,我们将使用数据归一化的更深层模型作为最终模型。

这意味着,如果我们要将模型保存到文件中,则必须保存模型本身(用于进行预测),输入数据的转换(用于新的输入数据)和目标变量的转换(用于新预测)。

尽管可以在整个数据集而不是数据集的训练子集上,但我们仍可以像以前一样准备数据并拟合模型。

然后,我们可以使用此模型对新数据进行预测。

首先,我们可以定义一行新数据,这只是该数据集的一个变量。

然后,我们可以转换此新数据,以准备将其用作模型的输入。

然后我们可以做出预测。

然后将预测的变换反转,以便我们可以按正确的比例使用或解释结果。

在这种情况下,我们将仅报告预测

综上所述,下面列出了为汽车保险数据集拟合最终模型并使用其对新数据进行预测的完整示例。

运行示例可以使模型适合整个数据集,并为单行新数据做出预测。

注意:由于算法或评估程序的随机性,或者数值精度的差异,您的结果可能会有所不同。考虑运行该示例几次并比较平均结果。

在这种情况下,我们可以看到输入13导致输出62(千瑞典克朗)。

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站不拥有所有权,不承担相关法律责任。如发现有侵权/违规的内容, 联系QQ1841324605,本站将立刻清除。

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注

联系我们

服务热线:130-0886-1890

QR code