假设目前有d个学习模型构成的集合\(\mathcal M=\{M_1,\cdots,M_d\}\),训练集S,下面介绍几种选取模型的方法
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}\)),在原始训练集大小很小时,这一方法并不适用
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\)种选择方案,但这种方法显然计算量太大。
下面介绍几种高效的特征选取算法。
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\)
}
CS229 Machine Learning学习笔记:Note 5(正则化与模型选择)
原文:https://www.cnblogs.com/qpswwww/p/9319773.html