在模型训练中,特征选择是非常重要。样本有限的情况,特征过多计算开销过大;通过特征选择去掉冗余和不相关特征,可提高模型性能降低计算开销。两个字:降维。当然降维后,模型性能应该是提升的。特征选择的最终目的是获取尽可能小的特征子集,用于训练模型。
特征选择有什么方法呢?在一次机器学习训练中,我把所有特征作了穷尽组合,然后放到模型中去训练,最后用f1-score来度量,那个好就选那个,悲剧的是,存在过拟合情况,根本无法有效选择特征。在这次训练中,个别特征非常明显,只要选上去训练,f1就能达到90以上。怎么解决呢?我先用一个模型训练过拟合特征,然后把训练结果投入非过拟合特征的训练,不过对结果没有提升,但没再出现过拟合。其实如果通过相关性分析应该可以直接解决的。
回到方法上,主要有三类:1)穷举法(exhaustion)、2)启发法(heuristic)、3)随机法(random)。穷举法需要遍历特征空间中所有的特征组合,所以方法复杂度最大,实用性不强;启发法通过采用期望的人工机器调度规则,重复迭代产生递增的特征子集,复杂度略低于穷举法,但是只能获取近似最优解;随即方法分为完全随机方法和概率随机方法两种,对参数设置的依赖性较强。
如果按照特征评价标准来分,根据评价函数与模型的关系,可以分为筛选器和封装器两种,筛选器的评价函数与模型无关,封装器采用模型的错误概率作为评价函数。筛选器的评价函数可以细分为距离测度、信息测度、相关性测度和一致性测度。距离测度用距离来衡量样本之间的相似度,信息测度利用最小不确定性特征来分类。
我自己的理解是在训练模型前必要的工作就是特征抽取和特征值处理,所以特征选择方法这做一个总结,至于特征值处理不同模型有不同数值要求,归一化或离散化大概是必要的。
1、去掉取值变化小的特征 Removing features with low variance
一般用在特征选择前作为一个预处理的工作,即先去掉取值变化小的特征,然后再使用其他的特征选择方法选择特征。
假设某特征的特征值只有0和1,并且在所有输入样本中,95%的实例的该特征取值都是1,那就可以认为这个特征作用不大。如果100%都是1,那这个特征就没意义了。当特征值都是离散型变量的时候这种方法才能用,如果是连续型变量,就需要将连续变量离散化之后才能用,而且实际当中,一般不太会有95%以上都取某个值的特征存在,悲剧的是我自己在delta比赛中就遇到一个特征80%以上都是某个值。
2、单变量特征选择 Univariate feature selection
单变量特征选择能够对每一个特征进行测试,衡量该特征和响应变量之间的关系,根据得分扔掉不好的特征。对于回归和分类问题可以采用卡方检验等方式对特征进行测试。
卡方检验是用方差来衡量某个观测频率和理论频率之间差异性的方法。皮尔森卡方检验是一种最常用的卡方检验方法,它有两个用途:1)计算某个变量对某种分布的拟合程度,2)根据两个观测变量的Contingencytable来计算这两个变量是否是独立的;主要有三个步骤:第一步用方差和的方式来计算观测频率和理论频率之间卡方值;第二步算出卡方检验的自由度(行数-1乘以列数-1);第三步比较卡方值和对应自由度的卡方分布,判断显著性。
p-value就是为了验证假设和实际之间一致性的统计学意义的值,即假设检验。也叫右尾概