斯坦福机器学习实现与分析之七(学习理论)

前言


  学习理论是一系列的理论与方法,用于保证训练出的模型能高效稳定工作。机器学习算法主要有4个阶段:

  1. 训练样本准备。充分有效的训练样本是模型训练的基本前提。
  2. 特征选择。训练样本是多种多类的,有效提取能表达其本质特性的量,保证类内一致性和类间区分性,是模型训练成功的重要因素。
  3. 模型选择。如何选择合适的模型,保证其工作时既有较高的准确率也有较好的抗干扰能力,对整个学习系统有着决定性影响。
  4. 结果验证。同一个问题或同一组训练样本,可以基于多种特征和模型来学习分类,如何衡量不同模型的好坏也是必不可少的。

训练样本准备


  在前面实现的算法中,每个算法对训练样本都有一定要求,比如正负样本的数量需要均衡或者服从其先验分布,GDA中还要求训练样本数量不得小于样本维数等,这些都是从算法原理上分析的具体要求。在目前的条件下,充分有效的数据往往比一个好的模型能表现出更好的结果。通常情况下,样本数量越多,样本越完备,训练出的模型准确性越高。
  首先,训练误差为误判的训练样本比例,即:
\begin{aligned} \varepsilon(h)=\frac{1}{m}\sum_{i=1}^m{I(h(x_i) \neq y_i)} \end{aligned}
  那么,在给定训练误差的前提下,训练样本的数量下限约束如下:

  • 模型空间有限
      假设模型有k种可能,要保证在不低于概率(1-\delta)下训练误差不超过上限(\gamma),那么训练样本数m需满足:
    \begin{aligned} m>=\frac{1}{2\gamma2}log;\frac{2k}{\delta}=O(\frac{1}{\gamma2}log;\frac{k}{\delta})\end
  • 模型空间无限
      假设模型空间的VC维是d,要保证在概率(1-\delta)下训练误差不超过上限(\gamma),那么训练样本数m需满足:
    \begin{aligned}m=O_{r,\delta}(d)\end{aligned}
      也就是说样本数量和模型空间的VC维成线性关系。

特征选择


  对于一个待解决问题,我们可能会对样本提取多种特征,但特征之间的相关性以及各个特征的重要性通常是未知的。如何选择表现最好的特征?特征选择有封装模型特征选择和过滤特征选择两种方法。这两种方法确定出所有特征的重要性。

  • 封装模型特征选择
      一种封装模型特征选择方法——前向搜索的过程如下:

A.已选中特征集初始化为空。
B.依次加入1个未选中特征,训练模型并使用交叉验证来选出最佳的那个特征,将其放到已选中特征集中。
C.若仍存在未选中的特征,则继续B步,否则结束。

  可以看到前向搜索是逐个增加特征,同样地还有后向搜索,那自然就是逐个减少特征。这两种方法需要训练的次数为(n+(n-1)+(n-2)+…+1=O(n^2)),显然当候选特征数较多时,计算量会非常大。

  • 过滤特征选择
      相对于到上述前向/后向搜索方法的巨大计算量,过滤特征选择可采用更快速的方法来进行特征选择,其主要思想为计算每一个特征与样本标签的相关性,相关性越高,说明特征越 重要,越能表达样本的本质特性。对于离散特征通常是计算其于类别标签的互信息:
    \begin{aligned}MI(x_i,y)=\sum_{x_i}{\sum_y{p(x_i,y)log\frac{p(x_i,y)}{p(x_i)p(y)}}}\end{aligned}
      通过上述前向/后向搜索或过滤选择的方法,可以将所有特征按其重要性递减排序,最后则需要选择其中前k个作为最终的特征用于训练模型。如何确定k的取值呢?再一次地采用交叉验证的方法来得出最优的k值。

模型选择


  模型是对实际问题的一种理想的抽象化描述,合理恰当的模型就如同一座高楼的地基。选择合适的模型来解决问题需要考虑到哪些因素?总体说来就两方面,准确性和稳定性。

  • 方差与偏差
      通常使用泛化误差来评价模型的性能,泛化误差是针对所有样本应用该模型产生的误差的期望。泛化误差由方差和偏差两部分组成。偏差表征模型对模型的拟合程度,方差表征模型的可变程度。模型越复杂,模型对数据的拟合性越好但需要更多参数,则其对应的偏差越小,方差越大;反之,模型越简单,偏差越大而方差越小。对应地,方差表达了模型的稳定性,而偏差表达模型的准确性。
      一个合适的模型需要权衡方差与偏差两个方面,以达到最终的泛化误差最小。方差与偏差的权衡实质上就是欠拟合与过拟合的权衡。模型训练好后,偏差可以比较容易计算,若偏差过大,可逐渐增加模型复杂度以达到要求。但随着模型越来越复杂,方差也在不断增大,且方差也难以直观估计,如何有效防止方差过大呢?可以采用下面的正则化方法。

  • 正则化方法
      在前面的回归算法以及GDA和朴素贝叶斯中,算法都是基于最大似然推导,即:
    \begin{aligned} \theta_{ML}=\underset{\theta}{argmax}\prod_{i=1}^m{p(y|x_i;\theta)} \end{aligned}
      然后通过求导直接求得参数(\theta)。这里是认为(\theta)是一个确定的未知量。
      另一种观点是认为(\theta)是一个随机变量,服从先验分布(p(\theta))。对于给定一个样本集S,理论上可以求出标签y的后验分布,从而求出y的期望作为最终预测值。但这样计算难以实现,在上述条件,我们可以求在给定S的条件下,(\theta)最可能是那个值,也就是最大化(\theta)的后验概率。这就是正则化方法。
      根据贝叶斯公式有:
    \begin{aligned} p(\theta|S)=\frac{p(S|\theta)p(\theta)}{p(S)} \end{aligned}
      由此可知,采用正则化方法求解的形式为:

\begin{aligned} \theta_{MAP} &=\underset{\theta}{argmax}\;p(\theta|S)\\&= \underset{\theta}{argmax}\;p(S|\theta)p(\theta)\\&= \underset{\theta}{argmax} \prod_{i=1}^m{p(y^{(i)}|x^{(i)}\theta)p(\theta)}\\ \end{aligned}

  通常认为(\theta ;\sim; N(0, kI) )。
  通过上述正则化方法求得的参数(\theta)一般比最大似然函数求得的(\theta)范数更小,从而稳定性更高。在很多算法优化时,常常增加一个需最小化的正则项为所有参数的绝对值的和,也就是这个道理。

交叉验证


  在前面特征选择和模型选择中,都需要不断验证每个特征或模型的好坏程度,对于给定一个训练样本集,一般采用交叉验证的方法来评估特征与模型。主要的交叉验证有以下几种:

  • 保留交叉验证
      保留交叉验证是把训练样本分为2部分,用其中一部分训练,另一部分测试。用于测试部分的样本就是保留样本,其通常为所有样本的1/4—1/3,通常取30%。
  • K层交叉验证
      对于1个特征或模型,保留交叉验证只处理1次,这样验证结果好坏可能会爆RP,采用k层交叉验证可以提升验证结果的说服力。具体作法为:将样本集随机均分为k组,第i次用第i组作为测试样本,其他k-1组作为训练样本,最后将k次验证的结果平均值作为最终结果。通常k取值为10,LWF上的人脸比对测试就是采用这种方法。
  • 留1交叉验证
      留1交叉验证实质上就是k层交叉验证,只不过k的取值就是样本数量,这样每组只有1个样本。显然这种验证会非常耗时,通常用于样本获取比较困难或代价很大的情况。

结语


  对于实现一些研究相对成熟的应用,如行人检测、人脸识别等,很多paper已经做了特征和模型选择的工作,我们实现时最主要的工作是搜集样本;而对于某些需要自己独立解决的问题,则上面的几个方面都能帮助你选择一种最优的方案,同时避免在此过程中走弯路。

posted @ 2015-04-29 20:23  过客冲冲  阅读(1197)  评论(0编辑  收藏  举报