知识碎片
知识碎片
这部分内容没有固定主题,不定期更新,都是些零碎的,我觉得有必要记一笔的知识。希望能对其他人也有所帮助。
sklearn.feature_selection 里的 F_regression
特征选择方法众多,sklearn 的特征选择模块里给出了几种非常简易高效的方法。针对回归问题,sklearn 给出了两种方法,其中一种是 F_regression 引起了我的注意。F_regression 在 sklearn 里只有寥寥几句的介绍,好在源码简短易读。之前搜了搜网上其它对这个函数的解读,要么解释不全,要么干脆是错的,所以我就在这里详细讲讲。
先放源码如下:
F_regression 在干什么?一句话就能讲清楚:每个特征 X 单独拎出来和 Y 计算相关系数,并排序。特征选择就是基于 X 和 Y 的相关程度。
当然实际操作还是分了三步:
-
计算相关系数;
-
转化为 F score;
-
计算 p 值;
最后排名是根据 F score,可以选择输出 p 值。
一步一步讲。相关系数最不用谈,就是 Y 与 X 线性关系的度量。计算完相关系数还不够,这里的相关系数严格来说是样本相关系数,如何从样本推论到总体呢?这就需要做假设检验,对未知参数提出某种假设,利用样本提供的信息对提出的假设进行检验,根据检验结果对提出的假设做出拒绝或接受的判断。参照线性回归的假设检验形式,在此我们提出的假设(零假设)为 X 与 Y 不存在线性关系,即 \(\beta = 0\)。提出零假设后,我们需要去计算 p 值,p 值即零假设成立的情况下所得到的样本观察结果或更极端结果出现的概率。如果 p 值足够小,我们就能拒绝零假设,从而认为 X 与 Y 存在线性关系。
注意到相关系数和 R 平方的关系,两者在简单线性回归,即只有一个变量的情形下是等价的。
这种方法的缺陷一目了然,就是完全忽略了其它特征的影响,实际用的时候还需谨慎。我一般会参照 p 值,设定一个显著性水平,低于显著性水平的特征全部舍弃。或者舍弃排名最靠后的,而不是取排名靠前的。