本系列是《玩转机器学习教程》一个整理的视频笔记。本小节主要介绍什么是偏差和方差,并从偏差和方差这种更高更全面的视角来探讨模型过拟合和欠拟合,最后提出在算法层面上主要解决高方差,并提出五条解决高方差的手段。
1
方差和偏差
在之前几个小节中,主要介绍了在进行机器学习模型训练的过程会遇到Overfitting和Underfitting,也就是过拟合和欠拟合的问题。这些问题都会使训练的机器学习模型在真实的预测过程中产生各种误差或者错误。
这一小节,将从一个更高的视角上更加全面的看一下,在机器学习这个领域中,当训练一个模型的时候出现误差,我们应该怎样对其进行分类,这就是偏差和方差的权衡(Bias Variance Trade off),其中偏差为Bias方差为Variance。
那什么是偏差什么是方差呢???
据此了解了偏差和方差,具体再来看上面的图。看最上面两个打靶的结果,蓝色点都围绕着红色中心点周围,相当于就是低偏差,也就是没有偏差。
最下面两张图都有非常高的偏差。
将打靶与进行机器学习的过程进行类比,实际要训练模型目的都是要预测一个问题,这个问题本身就可以理解成靶子的中心(红色中心点),而根据数据来拟合模型,进而预测这个问题。拟合的这个模型其实就是我们打出去的这些枪,那么此时模型就有可能犯偏差和方差两种错误,所以一般来说当我们训练一个模型的时候,这个模型就会有误差。这个误差通常来源于三个方面。
这三个方面的误差就是偏差、方差以及不可避免的误差,所谓不可避免误差,顾名思义就是对于这部分误差,我们无能为力,它是由各种各样的原因所导致的。最典型的例子就是采集到的数据本身具有噪音,这是无论我们如何改进模型或改进算法都不可避免的。但是偏差和方差这两个问题,确实是和训练模型以及算法相关的两个问题。
很有可能对当前问题来说,本身的假设是不正确的。最典型的例子就是如果我们针对非线性数据或者非线性的问题,使用诸如线性回归这种线性方法的话,显然会产生非常高的偏差,那么在现实的环境中欠拟合就是这样的一个例子。由于训练的这个算法对于整个数据来说是欠拟合,所以导致模型具有非常高的偏差。当然带来高的偏差,还有其他的可能性,另外一个典型的例子就是训练数据所采用的特征,如果这个特征和要解决的问题完全没有关系,比如说如果想要预测一个学生的考试成绩,我们用学生的名字作为特征来预测成绩,那么很显然一定是高偏差的,因为姓名这个特征与预测成绩之间是高度不相关的。不过对于这个课程中主要介绍的是机器学习算法而不是讨论特征选取的问题,所以在算法层面上欠拟合是导致偏差最主要的原因。
对于方差这个错误,在机器学习的过程中表现在于数据的一点点扰动都会极大的影响模型,换句话说模型没有完全学习到解决问题的实质(红色中心点),而是学习到了很多噪音。通常来讲模型具有较高的方差是因为模型太过复杂。比如在这一章介绍的高阶多项式回归,Overfitting会极大的引入方差。
2
偏差方差与算法
理解了偏差和方差的概念之后,来看一看目前学过的机器学习算法中那些算法天生就是高偏差,那些算法天生就是高方差。
在我们学习的大多数机器学习算法中,通常都有相应的参数,可以通过参数来调整偏差和方差。
通过上面的分析描述也可以看出来,偏差和方差这两种错误,它们是相互矛盾相互制约的。
通常在一个机器学习算法中,降低偏差就会提高方差,而降低方差就会提高偏差,通常我们需要找到一个平衡。如果我们训练出来的模型,通过实践发现他是一个低偏差低方差的模型,那固然非常好,可是在实际情况下并不会这么理想,我们会发现算法本身是具有错误的,在这个时候需要通过观察来看算法主要的错误到底是集中在偏差的位置还是方差的位置,看看能不能让模型的偏差和方差达到一定的平衡。换句话说,模型没有特别高的方差,因为在这种情况下,模型的泛化能力太差了,也不能有特别高的偏差,因为在这种情况下,模型太偏离这个问题了。我们可能不能让模型完全杜绝错误,但是让模型有一点偏差,也有一点方差,而不是集中在某一个方向上,那么达成这个目标通常就是机器学习算法在调参过程中要做的一个主要的事情。
3
主要挑战方差以及解决高方差主要手段
在机器学习领域主要挑战来自于方差而不是偏差。当然对于这个说法,其实仅仅局限在算法层面上,在问题的层面上不一定主要挑战是方差,因为我们对于很多问题的理解太过肤浅,比如对于疾病的理解,还比如说对金融市场的理解,在过去很多人都尝试过使用历史的金融数据来预测未来的金融情况,这些预测的结果通常都不是很理想,很有可能因为历史的金融数据本身并不能非常好的反映未来的金融走向,那么这种预测方法本身带来的非常高的偏差,当然这依然是特征选择的范畴,不是课程的重点。
在这个课程中,假设我们此时已经有了相对比较好的数据,数据也有相对比较好的特征,在这种情况下,问题的关键是使用算法来基于这些数据得到可靠的结果,此时我们的主要挑战大多数来自于方差。换句话说,我们可以很容易让模型变的非常复杂,也就是让模型的偏差非常的低,但是这样的模型具有非常高的方差,因此模型的泛化能力很差,最终也没有很好的性能表现。所以我们很可能经常听到,Overfitting也就是解决过拟合的问题是很多机器学习工程师都要面临的问题,那么如果面对过拟合问题,也就是模型具有很高的方差,此时该如何去解决呢???
通常有下面几种手段来解决模型高方差,也就是解决模型过拟合的手段。