我对何时使用哪种过滤方法进行特征选择感到困惑。我试图通过在线资源来学习它们,并找到了一些方法,如卡方法、方差阈值法、F检验法、互信息法等。当我阅读这些方法时,我对该使用哪一种方法感到困惑。我如何知道该方法是否真的选择了最相关的特性,并且没有删除任何实际上是导致输出的特性?
发布于 2019-08-15 01:46:02
通常,您需要将特征选择筛选方法包装在交叉验证方案中。下面是这样一个算法的示例,假设您也在调优超参数。
对于每一个k折叠,对于迭代i =1 to k,做1)让验证集是折叠i,而“内部训练”集是不等于折叠i。2)使用过滤方法,使用内部训练集上的一些截止值来选择特性的某些子集。例如,我可能筛选出与目标变量y的绝对相关性小于p= 0.3的变量。3)拟合模型。4)预测验证集=折叠i.评分模型,即评估您想要优化的函数,如日志丢失、均方/绝对误差、Brier等。结束
在完成了对一组超参数的交叉验证之后,取所有k折叠的平均分数。如果得分优于在前一次迭代中发现的前一组超参数,则保存这些超参数。
注意:您可以选择有p,您的过滤器截止,也是一个超参数在这里。为了简单起见,我将它保持不变,但通常情况下,如果您也调优过滤截止值,您可能会做得更好。
最后,再次重复整个过程,但这一次,不要执行任何筛选选择方法(省略筛选过程)。在交叉验证中使用完全相同的种子,并在步骤1中的初始拆分处使用相同的种子,以确保您在使用筛选时以相同的方式拆分数据。现在,比较测试集的分数,看看使用过滤方法是否有任何好处。
一般来说,我不喜欢基于过滤器的方法,因为它们都引入了一些任意的截止值=p,而且都是单变量的(它们不考虑模型中的其他变量,只是孤立地)。话虽如此,他们很快,他们可能会为你的问题工作。
编辑:此外,根据您拥有的数据数量和验证分数的可变程度,可能需要对上述整个算法(步骤1至步骤5)进行多次重复,以获得使用筛选和不使用筛选之间的有效比较。您可以重复上面的算法,例如,N次,一次用过滤,一次没有,总共2N次。然后,您将计算平均值(使用过滤方法查找N次重复的平均分数,并在相同的N次重复上找出平均分数而不进行过滤)。然后,你可以比较分数,形成信心间隔,等等,为一个更值得信赖(但也更耗时)的比较。
希望这能有所帮助。
发布于 2019-10-07 17:11:59
如果有标签数据,请检查递归功能消除(RFE)。
这正好指出了你的问题:我怎么知道这个方法是否真的选择了最相关的特性,并且没有删除任何实际上是导致输出的特性?
https://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.RFE.html
来自文档:
给定赋予特征权重的外部估计器(例如线性模型的系数),递归特征消除(RFE)的目标是通过递归地考虑越来越小的特征集来选择特征。首先,对估计器进行关于初始特征集的培训,并通过coef_属性或feature_importances_属性获取每个特征的重要性。然后,将最不重要的特征从当前的一组特征中删除。该过程在剪枝集上递归重复,直到最终达到所需的要选择的功能数。
希望能帮上忙!
https://datascience.stackexchange.com/questions/57570
复制相似问题