CS229 Machine Learning学习笔记:Note 5(正则化与模型选择)
模型选择
假设目前有d个学习模型构成的集合\(\mathcal M=\{M_1,\cdots,M_d\}\),训练集S,下面介绍几种选取模型的方法
Hold-out cross validation(Simple cross validation)
-
1.按一定比例随机将原始训练集S分为训练集\(S_{train}\)和交叉验证集\(S_{CV}\),一般比例为7:3
-
2.依次用\(S_{train}\)训练每个模型
-
3.用\(S_{CV}\)上的经验误差估计每个模型的泛化误差,最终选取\(h_i\)在\(S_{CV}\)上的经验误差\(\hat \varepsilon_{S_{CV}}(h_i)\)最小
但是这一方法在训练过程中丢失了一部分数据(\(S_{CV}\)),在原始训练集大小很小时,这一方法并不适用
K-fold cross validation
- 1.随机将大小为m的原始训练集S划分成k个互不重复的子集\(S_1,\cdots,S_k\),每个子集有\(\frac m k\)个训练样本。
- 2.对每个模型\(M_i\),按以下方法估计泛化误差:
For j=1...k{
____用除\(S_j\)外的其他数据训练\(M_i\)得到假设函数\(h_{i,j}\)
____在\(S_j\)上测试\(h_{i,j}\)得到经验误差\(\hat \varepsilon_{S_j}(h_{i,j})\)
}
取\(\hat \varepsilon_{S_j}(h_{i,j})\)的平均值为对模型\(M_i\)的泛化误差的估计
一般k=10,但当原始训练集大小实在太小的时候,会选择极端的k=m,以使得每次训练时丢掉最少的数据,这种交叉验证方法叫Leave-one-out cross validation。
特征选择
当训练样本的特征数n远大于训练样本数目m时,即使使用只有n个左右参数的线性分类器(如感知机),根据Note 4的结论,至少要有\(O(n)\)个训练样本才能使模型最终表现良好。因此,此时面临严重的过拟合问题。
假设特征中只有少量特征与学习任务有关,现在要从n种特征中保留其中若干种特征。最简单粗暴的办法就是枚举所有\(2^n\)种选择方案,但这种方法显然计算量太大。
下面介绍几种高效的特征选取算法。
前向搜索(Forward search)
- 1.初始化\(\mathcal F\)为空集
- 2.执行以下循环:
Repeat until \(|\mathcal F|=n\)或\(|\mathcal F|\geq t\)(阈值){
____For i=1...n{
________若\(i \notin \mathcal F\),令\(\mathcal F_i=\mathcal F\cup \{i\}\),用上述的某种交叉验证方法估计保留特征\(\mathcal F_i\)并训练后,得到的泛化误差
____}
____选取泛化误差最小的\(\mathcal F_i\),令\(\mathcal F:=\mathcal F_i\)
}
反向搜索(Backward search)
反向搜索与前向搜索正好相反,从\(\mathcal F=\{1,\cdots,n\}\)开始,每次删除一个使泛化误差减少最小的特征,直至\(|\mathcal F|\)达到阈值。
前向搜索和反向搜索都是封装模型特征选取算法(Wrapper model feature selection),这类算法每次选取(排除)一个特征都要遍历全部n个特征,对于每个特征要重新训练一次模型,计算量明显太大。
过滤特征选择(Filter feature selection)
过滤特征选择算法是一种启发式算法,计算量比之前两种要小,其核心是用实数\(S(i)\)来度量特征\(x_i\)与分类标签\(y\)的信息关联性,\(S(i)\)越大,表明\(x_i\)中包含越多关于\(y\)的信息。
\(S(i)\)常用互信息(mutual information)表示
-
1.这里假设是二分类问题,每个特征都是二值(0或1),在其他情况下,和式的条件会有改变
-
2.\(p(x_i,y),p(x_i),p(y)\)用训练集上的经验分布(Empirical distributions)估计
互信息也可以表示成KL散度(Kullback-Leibler divergence)的形式:
当\(x_i,y\)是相互独立的随机变量时,根据概率公式有:\(p(x_i,y)=p(x_i)p(y)\),此时二者的KL散度=0,表明二者没有相关性;反之,若\(x_i\)包含了很多关于\(y\)的信息,二者的KL散度很大。(这个还不知道怎么证明)
然后将n种特征按S(i)大小从大到小排序,最终保留前k个。数值k的选取方法也可以采用交叉验证,即,从1到n枚举k,对于每种k的取值,用某种交叉验证来估计泛化误差,取泛化误差最小的k即可。
最大后验概率估计(MAP)
回顾:最大似然估计
CS229课程的Note 1介绍了从最大似然(Maximum likelihood,ML)估计的角度解释优化目标:
最大似然估计,就是已知概率分布模型\(p(X;\theta)\),但参数\(\theta\)未知,目标是找到使得已知的m个随机变量X的观测结果\(\{x^{(1)},\cdots,x^{(m)}\}\)出现概率最大的参数\(\theta\)
似然函数是关于未知参数\(\theta\)的函数,表现了在已知\(X\)的m个观测数据\(x^{(i)}\)的情况下,未知参数取值为\(\theta\)时,输出\(x^{(i)}\)的可能性
目标就是要找到使得似然函数值最大的\(\theta\)
这一角度是频率学派的观点。频率学派认为连续值的参数\(\theta\)是未知量,但不是随机变量,我们只是通过一些统计学的方法(如这里的最大似然估计)估算\(\theta\)。
最大后验概率估计
最大后验概率估计是贝叶斯学派的方法,这里的\(\theta\)不是参数,而是未知的随机变量。首先我们要根据经验对随机变量\(\theta\)的分布作出先行假设:\(p(\theta)\)
回顾贝叶斯公式:
其中,\(p(\theta|x)\)是\(\theta\)的后验概率,\(p(x|\theta)\)是随机变量\(\theta\)对\(x\)的似然函数;\(p(\theta)\)是\(\theta\)的先验概率(我们先行假设的\(\theta\)的概率分布);\(p(x)\)是已知的\(x\)的观测结果的分布(evidence),是已知量
最大后验概率估计,就是要最大化\(\theta\)的后验概率\(p(\theta|X)\):
(\(p(X)\)是已知量,与\(\theta\)无关,可以消去)
这个式子与\(\theta_{ML}\)的相比,就是多了\(p(\theta)\)这一项,当\(p(\theta)\)为常数,即我们不对\(\theta\)的分布作任何先行假设,认为其分布是完全均匀的,此时MAP和ML的结果是一样的: