Preface
主要内容:
Cross Validation(交叉验证)
Feature Selection(特征选择)
问题定义
对于一个实际问题,我们需要从模型集合 中选择一个恰当的模型 ,使得模型偏倚(bias)和方差(variance)之间寻求最佳的平衡点(在过拟合与欠拟合之间寻求最佳的平衡点)。
Cross Validation
Hold-out Cross Validation/Simple Cross Validation(保留交叉验证/简单交叉验证):
- 对于一个给定的训练集,我们随机的将其划分为两个在自己的子集(训练子集、保留交叉验证子集)。
- 使用训练子集进行训练模型,然后使用保留交叉验证子集进行测试。
- 最后选择具有最小测试误差的模型。
对于保留交叉验证/简单交叉验证常常将训练子集、保留交叉验证子集按1:2或3:7等比例划分。
k- fold Cross Validation(k重交叉验证):
- 将训练集 分成k份,分别记为 。
- 对于每一个模型
,都执行如下过程:
在 上训练模型得到 ,使用 来验证,计算泛化误差。
然后求得对于模型 平均泛化误差。 - 最后选择具有最小平均泛化误差的模型。
对于k重交叉验证常常将k设置为5,10。
Least-one-out Cross Validation(留一交叉验证):
这是一种特殊的k重交叉验证,即k=m(训练集样本数量)。
Feature Selection
回忆我们在贝叶斯估计中所讲述的垃圾邮件拦截的例子,里面的特征多到几万个,其中有许多无效特征(对最后结果几乎无影响),这就使得如何选取较少的特征成为我们需要思考的问题。
假设样本有n个特征,那么,其有
种可能的特征子集,如果特征选择需要去穷举所有种可能的特征子集,对于n比较大的情况,计算的代价太大,无法真正实现。因此可以通过一些启发式算法实现特征的选择。
Forward/Backward Search(正向搜索/反向搜索)
正向搜索:
- Initialize F=Null
- Repeat{
(a) for i=1,…,n,如果i不属于F,就让i加入集合F
then 交叉验证评估特征集 (泛化误差最小的)
(b) 找出步骤(a)中最佳特征子集F
}
- 找出在整个搜索过程中最佳特征子集。
对于正向搜索我们可以这样理解我们初始化一个特征子集F,
Step1:第一层循环:循环K次(我们设置的特征集阈值)
Step2:第二层循环:循环特征总数量次数
Step3:每一次加入一个特征到F并使用交叉验证计算泛化误差
Step4:第二层结束
Step5:找到一个当前最小泛化误差的F
Step6:当F中的特征值大于阈值时结束
反向搜索,它是假设所有的特征都在集合内,逐步减少属性,直至找到(局部)最优属性集。
前向搜索和后向搜索属于封装特征选择(wrapper model feature selection),在执行的时候需要不断重复的调用你的学习算法。前向搜索和后向搜索都有两层循环,并且最坏情况下循环计数都到达 ,所以时间复杂度都为 。
Filter Feature Selection Method(滤特征选择算法)
虽然我们可以使用正向搜索/反向搜索来解决贝叶斯估计中所讲述的垃圾邮件拦截的例子,但是由于特征太多会导致计算量过于巨大。这里我们将使用一种计算量较少的算法——滤特征选择算法。
滤特征选择算法:我们定义评价函数
,用来评价第i个特征与标签y之间的影响关系。最后选择出
得分高的
个特征。
对于评价函数
我们这里退供一种思路:
定义
为
和
之间的联系程度,通常(对于离散值)采用Mutual Information(相互信息)来度量
和
之间的联系程度。
上述公式中的 可以有由训练样本计算出来。
在信息论中相互信息也被定义为KL距离,即为:
当 与 满足独立时,KL=0;这个结果的大小与 与 之间的相关程度成正比
最后,我们使用评价函数 将特征按一定的规则从大到小排序,依次选取特征,利用交叉验证确定k的取值。