【机器学习】如何去评价一个神经网络模型的好坏?什么是交叉验证数据集?偏差和高差对模型的影响?

系列文章目录


第十二章 Python 机器学习入门之构建机器学习系统


目录

系列文章目录

前言

一、如何评估一个模型的性能

二 模型的选择和交叉验证数据集的训练方法

三 通过偏差和方差对模型进行诊断

四 正则化对偏差和方差的影响

六 制定一个用于性能评估的基准

总结


前言

如何去评价一个神经网络模型的好坏呢?

 假设我们已经实现了正则化回归,来预测房价,这是模型的代价函数。

学习算法的平方误差加上正则化项,

如果我们运行模型时,发现这个模型预测的结果不准,通常我们会做什么?

1 我们可以添加更多的训练示例

2 减少那些影响较小的特征

3 使用特征工程,添加特征

4 减小或增加正则化项中的λ 的值

这些操作都有可能提提高我们模型的预测精度,也可能不会。


一、如何评估一个模型的性能

Evaluating a model

以学习预测房价模型为例子,

假设我们已经预测模型训练房价作为大小x 的函数

对于四阶多项式,特征为房子的大小,分别为x, x平方, x3次方, x4次方

如果训练数据有5个,那么拟合的曲线如图所示,它可以很好的拟合数据,

很明显,这个模型的泛化能力不行,无法推广到其他的新示例。

这里我们的特征只是房子的大小,如果我们有很多其他特征呢?像房子的年份,房间数等,

这时候拟合出的模型我们可能无法直观的评价它预测的效果,以及如何去改进模型

这时候我们就需要其他的方法了

方法一,如果我们的模型有一个小型的训练集,我们可以将数据集分为两个部分(可能是70%和30%,也可能是80%和20%),一是时训练数据集(大部分),另一个是测试数据集。

 

如果你是使用平方误差代价的线性回归,那么它的代价函数就是如图所示的样子。

首先最小化代价函数J 来拟合参数,为了看看模型的精度

我们可以计算测试集上的平均误差,训练集上的平均误差

 

回到前面预测房价的例子,这里如果我们使用这个方法,训练集上的平均误差可能为0,但是测试集上的平均误差会非常大,由此可见,它并不是一个很好的模型,我们需要改进它。

对于分类问题的模型也是一样

 

首先最小化代价函数J 来拟合参数,

然后计算测试集上的平均逻辑损失,训练集上的平均逻辑损失,来查看模型的性能好坏。

上面讲了第一种方法,下面来看看第二种方法

它不是使用逻辑损失来计算测试误差,而是使用训练误差来衡量数据集的比例,以及因为算法而错误分类的训练集数量。就是通过错误分类的训练集数量来衡量模型的性能。

二 模型的选择和交叉验证数据集的训练方法

下面我们来看看如何使用测试集为给定的机器学习应用程序选择模型

如果我们预测房价或其他的一些线性回归问题,我们首先想到的肯定是如下图这样的线性模型

我们可以一个模型一个模型的试,

首先拟合第一个模型,最小化代价函数来拟合参数,计算Jtest

对于第二个模型也是如此,计算Jtest,一直计算到第十个模型,然后比较哪个测试集的代价比较小,哪个就是性能比较好的模型

这是一个方法,但是这样做不好,因为我们计算的计算的测试集误差低于实际的泛化误差。


实际上,我们有更更好的方法来选择合适的模型。

我们将我们的数据集分成3个不同的子集,训练集,交叉验证集和测试集.

 

交叉验证集cross validation,也成为验证集validation set 或开发集dev set ,

它是一个额外的数据集,用来检查或信任检查不同模型的有效性或真实性

 

有了这三个数据集,我们就可以计算训练误差,交叉验证误差和测试误差了

交叉验证误差也被称为验证误差,开发集误差

有了这三个算法性能的衡量标准,我们可以去选择一个合适的模型了

还是用上面的例子,我们有10个模型

 

这次我们计算交叉验证误差,然后选择交叉验证误差最低的一个模型(假设第4个),我们还是根据泛化误差的估计值来衡量模型适用于新数据的能力,我们就使用第三个数据集了,也就是使用测试数据集来进行测试,并输出这个模型的代价值。

对于分类问题,在选择神经网络框架时,如果我们正在拟合手写数字识别的模型,现在有3个框架

我们需要从中选择一个合适的框架,我们可以训练所以的这三个模型,得到相应的参数

 

这时候我们就可以使用交叉验证误差来评估模型的性能,选择交叉验证误差最低的模型(假设为第2个)来训练数据,如果我们需要泛化误差的估计值,可以使用测试集来估计神经网络的好坏。

在机器学习中,我们如何选择参数,选择哪个多项式时,只看训练集和交叉验证集,最后才使用测试集来决定我们使用什么模型。因为我们没有任何使用测试集的决策,这就使得测试集对我们的模型对新数据的泛化程度公平,而且不会过度乐观的估计。

通过偏差和方差对模型进行诊断

在开发机器学习系统的时候,我们训练模型总希望模型可以实现我们所想的,可是每次训练的结果偏差都很大,所以我们就需要去改进我们的模型,这里偏差和模型就可以起到很好的作用,

我们前面学习了线性回归方程的过拟合和欠拟合,其中欠拟合有可以称为高偏差,过拟合可以称为高方差。

对于单个特征,我们可以绘制它的图像来查看它,但是如果有多个特征时,就无法实现可视化了。

 

为了选择合适的模型,我们可以使用到训练集和交叉验证集,如图中的左边left,这是高偏差,计算误差值,我们会发现它的训练误差过大,交叉验证误差过大;来看看右边right的模型,这是高方差,它的训练误差很低,交叉验证误差过大;而中间的模型,通过计算你会发现它的训练误差和交叉验证误差都很低,所以它不存在什么高偏差和高方差问题。

通过上面的例子,我们可以了解到为什么存在高偏差和高方差,以及它们与我们训练误差和交叉验证误差的关系。那我们如何诊断我们的学习算法中的偏差和方差呢?

 

如果我们的学习算法存在高偏差(欠拟合)的时候,关键的指标时它的训练误差是否高,这时交叉验证误差一般也会很高;

如果我们的学习算法存在高方差(过拟合)的时候,关键的指标时它的交叉验证误差是否远大于训练误差,当我们将一个非常高阶的多项式拟合到一个非常小的数据集时,就会发生这种情况;

如果我们的学习算法既存在高偏差又存在高方差的时候,关键的指标时它的训练误差很高,而交叉验证误差远大于训练误差;

正则化对偏差和方差的影响

正则化对偏差和方差的影响,其实时正则化参数λ 对偏差和方差的影响。

我们还是距离说明

我们将使用四阶多项式模型,使用正则化拟合这个模型

 

如果我们将正则化参数λ设置为10000,这会使得其他参数w将会变的非常小,接近0,此时拟合的模型可以看成一条直线如图中的左边left, 这个模型显然具有高偏差,不适合训练数据;

如果我们将正则化参数λ设置为0,这会使得模型没有正则化,此时拟合的模型如图中的右边right , 这个模型显然具有高方差,不适合训练数据。

我们想要做的就是找到一个合适的λ值,可以使得模型很好的拟合数据,交叉验证为我们提供了一种方法,下面我们来看看。

我们给定几个λ的可能值,通过最小化代价函数来拟合参数,计算交叉验证误差,误差最小的模型就是我们所需要的(假设为第5个),我们选择相应的参数,最后如果我们要报告泛化误差的估计,那就计算测试误差来确定最后的模型。 

为了进一步了解这个算法在做什么,让我们看一下训练误差和交叉验证误差如何作为参数λ 的函数而变化

当λ 太小时,模型会存在高方差,当当λ 太大时,模型会存在高偏差。训练误差和交叉验证误差与参数λ 的关系如图所示变化,我们希望找到一个合适的λ,它在中间。

将这个图与我们之前那个多项式的图(横轴时多项式的次数)作比较,这两个图看起来正好相反

制定一个用于性能评估的基准

建立性能基准水平的一种常见方法是衡量性能的好坏,如果人类可以完成这项任务,那么人类水平的表现通常是一个很好的基准,例如语言,图像识别等。

另一种估计性能基准水平的方法是,如果有一些竞争算法,也许是以前实现的,或者其他人已经实施的算法,用这些算法来建立估计性能好坏的基准。

在判断一个算法是否具有高偏差或高方差时,我们一般会查看性能的基准水平和训练误差,交叉验证误差。

那么要测量的两个关键量:一是在训练误差和我们希望达到的基准水平之间有什么区别;二是在训练误差和交叉验证误差之间有什么区别

如图,第一个是高方差的模型;第二个是高偏差的模型;第三个是高方差,高偏差的模型。 


总结

本文主要讲了如何去评估一个模型的性能,可以使用交叉验证数据集的训练方法,通过偏差和方差对模型进行诊断等,通过这些,我们可以对模型进行选择。后面还讲到了正则化对偏差和方差的影响以及如何去制定一个用于性能评估的基准去评价模型性能。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

晓亮.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值