机器学习笔记9: 模型选择

假设我们为了某个学习问题需要从若干模型中选出最优模型,比如在多项式回归模型hθ(x) = g(θ01x+...+θkxk)中,我们应该如何选择合适的k值使得模型的偏差方差达成平衡?又比如在局部加权线性回归问题中,我们应该如何选择合适的波长参数τ使得模型的拟合效果最好呢?

将上述问题给出形式化定义:假设我们有一个有限的模型集合M = {M1, ..., Md},我们应该选择哪个模型Mi作为最优模型呢?

交叉验证

假设训练集用S表示,考虑到上一讲的经验风险最小化(ERM),我们可能会得出这样的一种算法:

  1. 使用S训练每一个Mi,获得对应的假设函数hi
  2. 选择训练误差最小的假设函数

很遗憾,这个算法是不可行的。比如在多项式回归问题中,使用越高阶的多项式,拟合的效果越好,因而训练误差越小。但是在上一讲中我们也说明过这样的选择会有很大的方差,实际上是一种过拟合。

下面我们对这个算法进行改进,这个算法叫做简单交叉验证(hold-out cross validation)。该算法描述如下:

  1. 将训练集随机分为两部分,比如选择70%的数据作为Strain,剩下的30%数据作为Scv
  2. 使用Strain训练每一个Mi,获得对应的假设函数hi
  3. 在Scv上测试每一个hi,计算相应的训练误差εˆScv(hi),并选择训练误差最小的假设函数

由于我们是在Strain上训练的模型,并且在Scv上计算的训练误差,我们计算出的训练误差更接近于实际的泛化误差。通常用于测试的数据集Scv需要占到整个数据集的1/4到1/3之间,30%是典型值。

上述算法的第三步可以做一个改进,在选出最佳模型Mi后,再在全部数据集上做一次训练。通常这样做是很有效的,因为训练数据越多,模型参数越准确。

简单交叉验证算法的缺点是它“浪费”了30%的训练数据,尤其当训练数据本身就很稀少的情况下,去除了30%后剩下的就更少了。

下面的算法优化了数据的利用率,这个算法叫做k重交叉验证(k-fold cross validation)。该算法描述如下:

  1. 将训练集随机分为k个不相交的子集,记为S1, ..., Sk
  2. 对每一个Mi,对每一个j=1, ..., k,使用集合S1, ..., Sj-1, Sj+1, ..., Sk(也就是从训练集中去除Sj)进行训练,获得对应的假设函数hij,并在Sj上测试每一个hij,计算相应的训练误差εˆSj(hij),并选择训练误差最小的假设函数
    Mi的近似泛化误差取所有εˆSj(hij)的平均值
  3. 选择近似泛化误差最小的模型Mi,然后使用全部训练集S再做一次训练,获得对应的假设函数hi

上述算法通常取k = 10。当训练数据非常稀少时,我们可以选取k = m,这意味着每次只留下一份数据用于测试,用尽可能多的数据用于训练,这种方法也被称为留一交叉验证(leave-one-out cross validation)。上面两种算法有效地利用了数据集,但缺点是增加了更多计算的次数。

上面我们介绍了很多交叉验证的算法用于在多个模型中选择一个最佳模型,实际上也可以用于对单个模型进行评估。比如你发明了一个新的学习算法,可以通过交叉验证计算测试集的训练误差是否合理来评估算法预测的质量。

特征选择

模型选择的一个特殊并且重要的场景是特征选择(feature selection)。假设一个监督学习问题中的特征数n非常大,远远大于训练样本数m,但是我们怀疑其中只有一部分特征和学习问题相关,那么我们如何从中选择出我们希望的特征呢?

给定n个特征,我们可以有2n种可能的模型(每个特征要么出现在模型中,要么不出现在模型中)。这样我们就将特征选择问题转化为规模为2n的模型选择问题。但是这样的计算量太大了,因此我们需要用一些启发式搜索方法进行特征选择。下面的这个算法称为前向搜索(forward search):

  1. 初始化特征集合F为空
  2. 不断循环如下步骤,直到F的长度达到预设要求:
    (a). 将i从1到n进行遍历,如果i不在F中,令Fi = F ∪ {i},然后用某种交叉验证算法计算Fi的误差
    (b). 选择误差最小的Fi,并更新为F
  3. 输出最佳特征集合F

上述算法属于封装模型特征选择(wrapper model feature selection)。前向搜索是指每次循环都是从剩余未被选中的特征中选出一个最好的特征加到特征集合中。与之相对的还有后向搜索(backward search),初始化特征集合F = {1, ..., n},每次循环都是从现有特征集合中选出一个最差的特征,然后将其从特征集合中移除,循环直到F的长度达到预设要求后才结束。

封装模型特征选择可以很好地工作,但是计算量比较大,时间复杂度达到了O(n2)。

过滤特征选择(filter feature selection)算法是另一个启发式搜索方法,拥有较低的计算复杂度。算法的主要思想是,对每一个特征xi,计算其与y的信息量S(i),S(i)越大说明xi与y的相关性越强。计算完所有的S(i)后,选择前k个拥有最大S(i)的特征即可。

在实际应用中,S(i)通常选择为xi和y的互信息(mutual information)MI(xi, y):

上述公式中的几个概率值都可以在训练集上计算得到。为了对这个公式有直观的感受,我们可以将互信息表示成KL散度(Kullback-Leibler (KL) divergence)的形式:

如果xi和y互相独立,那么p(xi, y) = p(xi)p(y),那么这两个概率分布的KL散度为0,因此xi和y是不相关的,对应的S(i)较小。相反地,如果xi和y的相关性越大,那么KL散度越大,对应的S(i)也较大。

还有一个细节需要注意,计算完所有的S(i)后,应该如何选择k值?一个标准做法是使用交叉验证法来选择k值,不过这次的时间复杂度是线性的。

贝叶斯统计与规则化

这一节我们再介绍一种可以减少过拟合发生的方法。

回顾之前我们在逻辑回归中使用了最大似然估计(maximum likelihood (ML))法来拟合参数,其公式为:

在上式中,我们把θ视为一个未知的常数,这一观点被认为是频率学派(frequentist)的观点。在频率学派的观点下,θ不是随机的,只是一个未知的变量,我们的任务就是通过某些方法估计出θ的值。

另一种看待θ的观点来自贝叶斯学派(Bayesian)。贝叶斯学派认为θ是随机的未知的变量,因而首先为θ指定一个先验概率(prior distribution)p(θ)。给定一个训练集S = {x(i), y(i)}i=1, ..., m,我们可以计算出θ的后验概率(posterior distribution):

上式中的p(y(i)|x(i), θ)的计算取决于我们使用的具体模型。比如在贝叶斯逻辑回归模型中,

对于一个新的输入x,我们可以用下面的公式进行预测:

如果我们要求期望值的话,可以用如下公式:

我们可以把上面步骤理解为“全贝叶斯预测”,因为我们在求后验概率时是对θ所有的值都计算了一遍,遗憾的是通常我们很难计算出这样的后验概率,因为对所有θ(通常是高维的)求积分是非常困难的。

因此,在实际应用中,我们需要对后验概率作一个近似估计,通常用单个θ的取值来替代整个后验概率。最大后验概率估计(maximum a posteriori(MAP))方法就采用了这个思想,其估计公式为:

可以发现,θMAP和θML的公式非常相似,除了在最大后验概率估计公式后面多了一项θ的先验概率。

在实际应用中,我们通常让θ服从高斯分布N(0,τ2I)。确定了这样的先验概率后,通常θMAP比θML的拟合效果更好,出现过拟合的概率更低。

总结

  • 模型选择的常用方法是交叉验证,交叉验证具体又分为简单交叉验证、k重交叉验证和留一交叉验证等方法
  • 特征选择的常用方法有封装模型特征选择和过滤特征选择。封装模型特征选择分为前向搜索和后向搜索,时间复杂度都为O(n2);过滤特征选择的时间复杂度为O(n)
  • 在参数拟合问题上有频率学派和贝叶斯学派两种观点。频率学派认为θ是固定的未知的变量,使用最大似然估计法;贝叶斯学派认为θ是随机的未知的变量,使用最大后验概率估计法;最大后验概率估计法拟合出来的参数通常拟合效果更好,出现过拟合的概率更低

参考资料

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,198评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,663评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,985评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,673评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,994评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,399评论 1 211
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,717评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,407评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,112评论 1 239
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,371评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,891评论 1 256
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,255评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,881评论 3 233
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,010评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,764评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,412评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,299评论 2 260

推荐阅读更多精彩内容