阅读更多
由于笔者水平限制,本文可能晦涩难懂,特此向阅读本编文章的朋友们表示歉意!
weka3.8.1中关于特征选择的搜索函数有3个类,分别是Ranker,GreedyStepwise,BestFirst,这3个类的作用是配合评估函数,将训练数据集中的特征进行筛选、排序。以下是笔者对于这3个类的个人理解,如有错误之处望发现的朋友予以批评指正。
总的来说Ranker速度最快,如果不考虑特征间的关系,可以考虑使用它,比如朴素贝叶斯算法;GreedyStepwise速度次之,如果资源有限,又要考虑特征间的关系,比如逻辑回归、决策树,建议用GreedyStepwise;如果资源较多,又要考虑特征间的关系,建议使用BestFirst,因为它的效果会比GreedyStepwise更好。
Ranker
获得一个特征排序列表,按照每个特征的作用进行排序;
优点
速度快,每个特征都独立获得评估;
缺点
只能评估单个的特征,不能评估特征组合
GreedyStepwise
获得一个推荐的特征集合,该特征集合包括初始指定的特征集合,如果不指定即为空;
在初始特征集合的基础上,按顺序遍历每一个特征,评估每个一个特征对初始特征集合的作用,如果有积极作用,则将该特征加入初始特征集合,如果没有积极作用,则将该特征忽略;
优点:
每个特征都得到评估,基本上可以找出一个相对有价值的特征集合,计算量不是很大,计算时间不会太长。
疑点1:
特征集合评估的基础集合不断变化,对于每一个待评估的特征不公平;比如第1个特征有价值1.0,第二个特征价值1.1,均入选,到了第n个特征,由于初始数据集中入选了大量有价值的特征,n的特征价值是2.0,也许可能被落选。即前面的特征选择比较宽松,遍历到后期,特征选择比较苛刻。
疑点2:
按顺序筛选,可能存在的问题是,特定组合效果非常好,未必会被发现,比如1、2、3组合的效果是1.0,但123加上4的效果并不好,123加上5的效果也不好,
4加上5的效果却好于123的组合,此时4、5的组合就无法被发现。(疑点待验证)
BestFirst
1、初始化特征集合r,作为下一步计算的基础;初始集合可以在函数中指定;否则初始集合为空,如果是反向获取(做减法),初始集合为全部特征;
2、克隆特征集合r,得到新的集合c,遍历所有集合,找出和克隆集合c配合最好的n个特征,将这列特征分别加入到现有的初始特征集合中,存放在列表l中(n可设置)
3、从列表l中取得第一个对象,即当前效果最好的特征集合,作为新的克隆特征集合c,比较集合c和r,如果c效果更有,将c赋值给r,同时在列表l中删除第一个对象,重复步骤2
4、循环重复步骤3,直到连续循环n次,特征集合r均未发生变化,则退出,并返回特征集合r。
优点:
各个特征独立参与,保证每个特征在公平环境下竞争,可以解决GreedyStepwise的疑点1
组合顺序不是特定的按特征排序,可以解决GreedyStepwise的疑点2
如果参数设置足够大,几乎可以遍历所有种可能,在优中选优的指导思想下,在计算资源足够多时,很可能可以找出比较优秀靠谱的特征集合。
疑点:
计算量比较大,对计算机资源消耗比较大。如果参数设置的比较小,虽然计算量可控,但依然有很大的可能性是没有找出最佳特征集合。