首页 > 人工智能(Artificial Intelligence) > 神经网络模型

机器学习应用实践

开发一个机器学习系统,或者想试着改进一个机器学习系统的性能,你应如何决定接下来应该选择哪条道路?为了解释这一问题,我想仍然使用预测房价的学习例子,假如你已经完成了正则化线性回归,也就是最小化代价函数$J$的值,假如,在你得到你的学习参数以后,如果你要将你的假设函数放到一组新的房屋样本上进行测试,假如说你发现在预测房价时产生了巨大的误差,现在你的问题是要想改进这个算法,接下来应该怎么办?

获得更多的训练样本——通常是有效的,但代价较大,下面的方法也可能有效,可考虑先采用下面的几种方法。

  • 尝试减少特征的数量
  • 尝试获得更多的特征
  • 尝试增加多项式特征
  • 尝试减少正则化程度 $\lambda$
  • 尝试增加正则化程度 $\lambda$

评估一个假设

为了检验算法是否过拟合,我们将数据分成训练集和测试集,通常用70%的数据作为训练集,用剩下30%的数据作为测试集。很重要的一点是训练集和测试集均要含有各种类型的数据,通常我们要对数据进行“洗牌”,然后再分成训练集和测试集。

测试集评估在通过训练集让我们的模型学习得出其参数后,对测试集运用该模型,我们有两种方式计算误差:

  • 对于线性回归模型,我们利用测试集数据计算代价函数 $J$
  • 对于逻辑回归模型,我们除了可以利用测试数据集来计算代价函数外:

             $ J_{test}{(\theta)} = -\frac{1}{{m}_{test}}\sum_\limits{i=1}^{m_{test}}\log{h_{\theta}(x^{(i)}_{test})}+(1-{y^{(i)}_{test}})\log{h_{\theta}(x^{(i)}_{test})}$

误分类的比率,对于每一个测试集样本,计算:

然后对计算结果求平均。

模型选择和交叉验证集

假设我们要在10个不同次数的二项式模型之间进行选择:

显然越高次数的多项式模型越能够适应我们的训练数据集,但是适应训练数据集并不代表着能推广至一般情况,我们应该选择一个更能适应一般情况的模型。我们需要使用交叉验证集来帮助选择模型。

即:使用60%的数据作为训练集,使用 20%的数据作为交叉验证集,使用20%的数据作为测试集

模型选择的方法为:

  1. 使用训练集训练出10个模型
  2. 用10个模型分别对交叉验证集计算得出交叉验证误差(代价函数的值)
  3. 选取代价函数值最小的模型
  4. 用步骤3中选出的模型对测试集计算得出推广误差(代价函数的值)

Train/validation/test error

Training error:

            $J_{train}(\theta) = \frac{1}{2m}\sum_\limits{i=1}^{m}(h_{\theta}(x^{(i)})-y^{(i)})^2$

Cross Validation error:

            $J_{cv}(\theta) = \frac{1}{2m_{cv}}\sum_\limits{i=1}^{m}(h_{\theta}(x^{(i)}_{cv})-y^{(i)}_{cv})^2•$

Test error:

            $J_{test}(\theta)=\frac{1}{2m_{test}}\sum_\limits{i=1}^{m_{test}}(h_{\theta}(x^{(i)}_{cv})-y^{(i)}_{cv})^2$

偏差和方差

学习算法的预测误差, 或者说泛化误差(generalization error)可以分解为三个部分: 偏差(bias), 方差(variance) 和噪声(noise). 在估计学习算法性能的过程中, 我们主要关注偏差与方差. 因为噪声属于不可约减的误差 (irreducible error).

偏差

这里的偏指的是偏离 , 那么它偏离了什么到导致了误差? 潜意识上, 当谈到这个词时, 我们可能会认为它是偏离了某个潜在的 “标准”, 而这里这个 “标准” 也就是真实情况 (ground truth). 在分类任务中, 这个 “标准” 就是真实标签 (label).

方差

一个随机变量的方差描述的是它的离散程度, 也就是该随机变量在其期望值附近的 波动程度。

设一组数据 $x_1,x_2,x_3……x_n$ 中,各组数据与它们的平均数x的差的平方分别是(x1-x)2,(x2-x)2……(xn-x)2

那么我们用他们的平均数来衡量这组数据的波动大小,并把它叫做这组数据   的方差。

当你运行一个学习算法时,如果这个算法的表现不理想,那么多半是出现两种情况:要么是偏差比较大,要么是方差比较大。换句话说,出现的情况要么是欠拟合,要么是过拟合问题。

高偏差和高方差的问题基本上来说是欠拟合和过拟合的问题。

对于训练集,当 $d$ 较小时,模型拟合程度更低,误差较大;随着 $d$ 的增长,拟合程度提高,误差减小。

对于交叉验证集,当 $d$ 较小时,模型拟合程度低,误差较大;但是随着 $d$ 的增长,误差呈现先减小后增大的趋势,转折点是我们的模型开始过拟合训练数据集的时候。

训练集误差和交叉验证集误差近似时:偏差/欠拟合

交叉验证集误差远大于训练集误差时:方差/过拟合

正则化和偏差/方差

在我们在训练模型的过程中,一般会使用一些正则化方法来防止过拟合。但是我们可能会正则化的程度太高或太小了,即我们在选择λ的值时也需要思考与刚才选择多项式模型次数类似的问题。

我们选择一系列的想要测试的 $\lambda$ 值,通常是 0-10之间的呈现2倍关系的值(如:$0,0.01,0.02,0.04,0.08,0.15,0.32,0.64,1.28,2.56,5.12,10$共12个)。 我们同样把数据分为训练集、交叉验证集和测试集。

选择 $\lambda$ 的方法为:

  1. 使用训练集训练出12个不同程度正则化的模型
  2. 用12个模型分别对交叉验证集计算的出交叉验证误差
  3. 选择得出交叉验证误差最小的模型
  4. 运用步骤3中选出模型对测试集计算得出推广误差,我们也可以同时将训练集和交叉验证集模型的代价函数误差与λ的值绘制在一张图表上:

当 $\lambda$ 较小时,训练集误差较小(过拟合)而交叉验证集误差较大

随着 $\lambda$ 的增加,训练集误差不断增加(欠拟合),而交叉验证集误差则是先减小后增加

获得更多的训练样本——解决高方差

尝试减少特征的数量——解决高方差

尝试获得更多的特征——解决高偏差

尝试增加多项式特征——解决高偏差

尝试减少正则化程度λ——解决高偏差

尝试增加正则化程度λ——解决高方差

神经网络的方差和偏差

使用较小的神经网络,类似于参数较少的情况,容易导致高偏差和欠拟合,但计算代价较小使用较大的神经网络,类似于参数较多的情况,容易导致高方差和过拟合,虽然计算代价比较大,但是可以通过正则化手段来调整而更加适应数据。

通常选择较大的神经网络并采用正则化处理会比采用较小的神经网络效果要好。

对于神经网络中的隐藏层的层数的选择,通常从一层开始逐渐增加层数,为了更好地作选择,可以把数据分为训练集、交叉验证集和测试集,针对不同隐藏层层数的神经网络训练神经网络,

然后选择交叉验证集代价最小的神经网络。

机器学习系统的设计

构建一个学习算法的推荐方法为:

1. 从一个简单的能快速实现的算法开始,实现该算法并用交叉验证集数据测试这个算法

2. 绘制学习曲线,决定是增加更多数据,或者添加更多特征,还是其他选择

3. 进行误差分析:人工检查交叉验证集中我们算法中产生预测误差的样本,看看这些样本是否有某种系统化的趋势

准确率

准确率是一个用于评估分类模型的指标。通俗来说,准确率是指我们的模型预测正确的结果所占的比例。正式点说,准确率的定义如下:

$\text{Accuracy} = \frac{\text{Number of correct predictions}}{\text{Total number of predictions}}$

对于二元分类,也可以根据正类别和负类别按如下方式计算准确率:

$\text{Accuracy} = \frac{TP+TN}{TP+TN+FP+FN}$

其中,TP = 真正例,TN = 真负例,FP = 假正例,FN = 假负例。

精确率

精确率指标尝试回答以下问题:

在被识别为正类别的样本中,确实为正类别的比例是多少?

精确率的定义如下:

$\text{Precision} = \frac{TP}{TP+FP}$

注意:如果模型的预测结果中没有假正例,则模型的精确率为 1.0。

召回率

召回率(Recall)尝试回答以下问题:

在所有正类别样本中,被正确识别为正类别的比例是多少?

从数学上讲,召回率的定义如下:

$\text{召回率} = \frac{TP}{TP+FN}$

注意:如果模型的预测结果中没有假负例,则模型的召回率为 1.0。

阈值

为了将逻辑回归值映射到二元类别,须指定分类阈值(也称为判定阈值)。如果值高于该阈值,则表示“垃圾邮件”;如果值低于该阈值,则表示“非垃圾邮件”。人们往往会认为分类阈值应始终为 0.5,但阈值取决于具体问题,因此您必须对其进行调整。

我们希望有一个帮助我们选择这个阀值的方法。一种方法是计算**F1 值**(**F1 Score**),其计算公式为:${{F}_{1}}Score:2\frac{PR}{P+R}$

我们选择使得F1值最高的阀值。

关闭
感谢您的支持,我会继续努力!
扫码打赏,建议金额1-10元


提醒:打赏金额将直接进入对方账号,无法退款,请您谨慎操作。