学习理论-模型选择-3-模型训练规则、特征选择

参考 http://www.cnblogs.com/jerrylead

假设可选的模型集合是 M={M1,M2,...,Md} ,它可能包含了 SVM、logistic回归、神经网络等模型。
在上一篇中我们已经知道,我们要选择使得泛化误差 ϵ(h^) 最小的模型,这时为了选择模型,我们可能会想到如下方法:
1、用训练样本去训练 M 中的每一个模型,之后便可以的到每个模型的 ϵ(h^)
2、选取使得 ϵ(h^) 最小的模型。
很容易理解,但是却很不靠谱,我们把所有的样本都拿来训练,没有留下任何样本用来测试必然会导致训练结果有很低的偏差,但却有很高的方差。因为这样做,模型中多项式的指数越大必然训练误差越小,因此我们要留下一部分样本用来测试,既要保证偏差合理也要保证方差合理。

交叉验证(Cross validation)

简单交叉验证(hold-out cross validation):
1、从全部的训练数据 S 中随机选择70%的样例作为训练集 Strain ,剩余的 30% 作为测试集 SCV , SCV 称为交叉验证集。
2、用 Strain 去训练 M 中的每个模型 Mi ,得到对应的 hi
3、用 SCV 在每个模型 hi 上做测试,选择具有最小经验错误 ϵ^SCV(hi) hi 作为最佳模型。

简单交叉验证虽然可行,但是训练模型时只是用了 70% 的样本,虽然我们也可以用 80% 等等,但是,显然训练一个模型时,样本的数量越多越好;另外,当样本总数很少时,我们就更不希望在分出一部分用来做验证。下面来看看另一种方法:
k-折叠交叉验证(k-fold cross validation):
1、将全部训练集 S 分成k ( k 一般可以取值为10)个不相交的子集,假设 S 中的训练样例个数为 m ,那么每一个子集有mk个训练样例,相应的子集称作 {S1,S2,,Sk}
2、按照如下方式训练每个模型:

For j = 1, . . . , k
    Train the model Mi on S1 ∪ · · · ∪ Sj−1 ∪ Sj+1 ∪ · · · Sk (i.e., train on all the data except Sj) to get some hypothesis hij
    Test the hypothesis hij on Sj, to get ε ˆSj(hij)

模型 Mi 的泛化误差用该在模型训练得到的所有 hij 的误差均值来表示即: 1mkj=1ϵ^Sj(hij) .
3、选出平均经验错误率最小的 Mi ,然后使用全部的 S 再次在模型Mi上训练,得到最终的 hi

说白了,这个方法就是将简单
交叉验证的测试集改为 1/k ,每个模型训练 k 次,测试 k 次,错误率为 k 次的平均。 一般讲 k 取值为 10。这样数据稀疏时基本上也能进行。显然,缺点就是训练和测试次数过多,代价比较大。
极端情况下, k 可以取值为 m,意味着每次留一个样例做测试,这个称为 leave-one-out cross validation。

如果我们发明了一种新的学习模型或者算法,那么可以使用交叉验证来对模型进行评价。

特征选择

特征选择是模型选择中很重要的一部分,我们要根据样本的特性来确定什么模型更加适合。
但是有时候,样本的属性n会特别多远远大于样本的数量m (nm) ,这种情况下经常会有很多兀余属性,我们训练模型时并不需要他们。因为如果考虑的属性过多,必然导致模型更加复杂,但是在上述情况下其实我们可以只用更简单的模型,同样可以很好的对样本分类(即在上述简单模型和复杂模型下的VC维是相同的)。此时如果不进行适当的特质选择必然导致数据过拟合,产生高方差。

假如样本中有n个属性,即样本是n维的,如果我们利用枚举法,那么就会有 2n 种组合,当n稍微大点时这条路就走不通了。下面给出一些启发式方法:

1、初始化特征集 F 为空
2、

Repeat {
(a) For i = 1, . . . , n if i 6∈ F, let Fi = F ∪ {i}, and use some version of cross validation to evaluate features Fi. (I.e., train your learning algorithm using only the features in Fi, and estimate its generalization error.)
(b) Set F to be the best feature subset found on step (a).
}

3、 从上步中得到的 n Fi中选出错误率最小的 Fi 作为属性输出。

前向搜索属于 wrapper model feature selection。 Wrapper 这里指不断地使用不同的特征集来测试学习算法。前向搜索说白了就是每次增量地从剩余未选中的特征中选出一个加入特征集中,待达到阈值或者 n 时, 从所有的 F 中选出错误率最小的。

前向搜索每次将 F 中的属性个数加1,其实我们完全可以按照相反的思路:开始时将 F 初始化为包含样本所有属性的集合,然后逐次减去一个属性进行比较,选取最合适的属性集,即后向搜索(backward search)。

这两种算法都可以很好的工作,但是计算复杂度比较大。时间复杂度为 O(n+(n1)+(n2)++1)=O(n2) .

过滤特征选择(Filter feature selection):

过滤特征选择是依据启发式规则的,它的计算代价相对前一种方法而言小了很多。
过滤特征选择方法的想法是针对每一个特征 xi ,计算 xi 相对于类别标签 y 的信息量S(i),它反映了属性 xi 的重要程度,之后我们将属性按照重要程度排序,利用交叉验证法中的前向搜索法确定最终特征集。显然,这样复杂度大大降低,为 O(n)
某个属性 xi 的重要程度就是指它与类别之前的关联度,我们使用相互信息(mutual information)来衡量 S(i) xiy 的相互信息 MI(xi,y) 表示如下:
这里写图片描述
上式是假设 xiy 都是二值的{0,1},对于多值情况可以直接推广。
公式里的 p(xi,y),p(xi)p(y) 都可以直接由训练样本统计得到。

上式来源于信息论中的用以衡量不同概率分布之前的差异的标准——(Kullback-Leibler)KL距离 :
这里写图片描述
它反映了 p(xi,y)xiy 的联合(joint)概率与后面相乘的 p(xi)p(y) 之间的关联度.
如果 p(xi)p(y) 是相互独立的,那么 p(xi,y)p(xi)p(y) 相等,它们是相同的分布,此时KL距离为0,即MI值为0;相反,如果两者密切相关,那么MI 值会很大。

现在每个属性的相互信息MI已经知道了,我们下面要做的就是选取k个属性构成特征集,此时我们可以使用交叉验证法来确定最终的集合。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值