从零开始-Machine Learning学习笔记(6)-机器学习性能评估

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/kabuto_hui/article/details/80067724

​ 通常我们建立起一个机器学习系统时,系统的表现不尽如人意。这时就需要想出一些办法来改进系统的性能。但是我们应该从哪些方面去着手改进性能呢?Stanford的Andrew Ng给我们提供了以下的几个思路:

  • 获取更多的训练实例(通常有效,但是代价较大)
  • 尝试减少特征的数量
  • 尝试获得更多的特征
  • 尝试增加多项式特征
  • 尝试减少归一化程度 λ
  • 尝试增加归一化程度 λ

但是我们不能随机选择某种办法来改进我们的算法,而是应用一些机器学习诊断法来帮助我们知道上面那些办法对于我们的算法是有效的。

1.如何判断模型泛化误差

​ 通常我们的模型会出现两种问题,要么是欠拟合,要么是过拟合。这两个问题都会导致模型的泛化误差增高。

​ 所谓欠拟合是指对训练样本的一般性质尚未学好,对于新的样本,表现则更差。

​ 所谓过拟合是指对训练样本“学的太好了”,而导致系统把训练样本自身的一些特点当作了所有潜在样本都具有的性质,从而导致系统的泛化能力下降,即面对新的样本时表现较差。

​ 其中,欠拟合比较容易克服,但是过拟合则很麻烦,所以过拟合是机器学习面临的关键障碍

​ 所以,为了对学习器的泛化误差进行评估并做出选择。为此我们需要使用一个“测试集”(testing set)来测试学习器对于新样本的判别能力,然后以测试集上的测试误差来作为泛化误差的近似。

​ 但是通常我们只有一个包含m个样例的数据集,所以我们需要从这m个样例中分离出训练集S与测试集T。通常我们有如下的几种办法。

1.1 留出法

​ 所谓留出法,指的是从数据集D中划分出来两个互斥的集合,其中一个作为训练集S,一个作为测试集T。这两个数据集的大小要满足以下的三个要求:

1、训练集S与测试集T的比例大概为7:3

2、两个样本互斥

3、两个样本中的样本类别比例一致

第一点不用多说;第二点指的是T中的数据不能出现在S中,同样S中的数据也不能出现在T中;而第三点两个样本中的类别比例一致是指S与T中的正负样本的比例要一致。

1.2 K-fold交叉验证

​ 交叉验证发先将数据集划分为K个大小相似的互斥子集,每个子集的数据分布尽量一致(可以通过分层采样实现)。然后每次将k-1个子集作为训练集,剩下的一个作为验证集。这样就可以进行k次训练和k次验证。最后返回的结果就是这k次测试结果的均值。

这里写图片描述

1.3 模型选择与交叉验证

​ 到这里,之前的两个办法都是通过划分数据集来求出系统的泛化误差。如留出法就是训练完成之后,直接使用测试集得出泛化误差的近似,k-fold交叉验证则是通过k次训练与验证,最后返回的k次验证结果的均值作为泛化误差的近似。

​ 在这个方法中,我们将数据集按6:2:2的比例(当然这个比例不是绝对的)把数据分成训练集,交叉验证集和测试集三个数据集。

​ 而我们此时的模型有10个,我们不知道哪个模型最好,泛化误差是多少。于是我们采取下面的步骤:

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

通过这种方式我们不仅选择出来最好的模型,也得到了模型的泛化误差。

2. 偏差bias与方差variance

​ 通常我们画出学习曲线就可以判断某一个学习算法是否处于偏差与方差问题。学习曲线是将训练集误差与交叉验证集误差作为训练集实例数量m的函数绘制图标。

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

所以我们有以下结论:

训练集误差与交叉验证集误差相近时:高偏差/欠拟合

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

根据学习曲线我们也总结了几个观点:

1.在高偏差/欠拟合的情况下,增加训练集不一定有帮助(换言之就是如果模型不合适,训练集再多也无济于事)

2.在高方差/过拟合的情况下,交叉集误差远大于训练集误差,这个时候增加训练集可能会提高模型的效果

所以我们在最开始写的那六个点可以解决的问题可以描述为:

  • 获取更多的训练实例(通常有效,但是代价较大)–解决高方差/过拟合
  • 尝试减少特征的数量–解决高方差/过拟合
  • 尝试获得更多的特征–解决高偏差/欠拟合
  • 尝试增加多项式特征–解决高偏差/欠拟合
  • 尝试减少归一化程度 λ –解决高偏差/欠拟合
  • 尝试增加归一化程度 λ –解决高方差/过拟合

3. 查准率(Precision)、查全率(Recall)与F1

​ 虽然错误率与精度通常用于判断某个机器学习算法的好坏与否,但是在某些问题上,我们更关注算法的其他方面的性能,那么错误率与精度就不够用了。

​ 如在西瓜问题中,瓜农拉来一车西瓜,我们用训练好的模型去对西瓜进行判别,错误率指的是有多少比例的瓜被判别错误。但是如果我们的关注点是“挑出来的瓜有多少比例是好瓜”或“所有好瓜中有多少比例被挑了出来”,那么错误率就不够用了。

​ 再如在信息检索与web搜索中,我们经常会关心“检索出的信息有多少是用户感兴趣的”,“所有用户感兴趣的信息有多少被检索出来了”。这个时候就需要查准率与查全率来度量了。

​ 我们将算法的预测结果分为四种情况:

1.正确肯定 (True Positive, TP):预测为真 ,实际为真

2.正确否定 (True Negative,TN):预测为假,实际为假

3.错误肯定 (False Positive,FP):预测为真,实际为假

4.错误否定 (False Negative,FN):预测为假,实际为真

可以用如下的表格表示:

这里写图片描述

所以查准率P与查全率R分别定义为:

P = T P T P + F P

R = T P T P + F N

查准率P表示,预测结果中,真正例占预测为正例的比例

查全率R表示,所有的正例中,被预测为正例的比例

所以P,R我们一般追求越高越好,但是通常P,R是一对矛盾的度量。一般来说,查准率P高的时候,查全率R往往偏低;查全率R偏高时,查准率P往往偏低。

如何使用这两个度量来提高算法的性能?我们希望算法对于P,R都有很好的表现,如何调节我们参数?

这个时候我们定义了度量F1:

F 1 = 2 P R P + R

我们调节算法的参数,使得F1的值尽可能的高,那么我们选择使F1最高的参数,就能使我们的算法在P,R上都有很好的表现。F1的来源是计算: 1 F 1 = 1 P + 1 R

在一些应用中,对查准率与查全率有不同的重视程度,所以F1有更一般的形式 F β ,能让我们表达出对查准率与查全率不同的偏好,它定义如下:

F β = ( 1 + β 2 ) P R ( β 2 P ) + R

β >1时对查全率有更大的影响

β <1时对查准率有更大的影响

猜你喜欢

转载自blog.csdn.net/kabuto_hui/article/details/80067724
今日推荐