特征筛选主要分为3个方法:过滤法、嵌入法(经典的一些树模型比如xgboost)、包裹法(经典的RFECV,RFE递归特征消除法)
过滤法更快速,但更粗糙。
包装法和嵌入法更精确,比较适合具体到算法去调整,但计算量比较大,运行时间长。
当数据量很大的时候,优先使用方差过滤和互信息法调整,再上其他特征选择方法。
在sklearn中,常用三种方法来评判特征与标签之间的相关性:卡方、F检验、互信息。三种方法的适用领域有何不同
t检验和卡方检验、F检验、互信息法是常用的统计分析方法,它们在不同的情况下有不同的应用优先级。
t检验:适用于小样本情况下,用于比较两个样本均值是否有显著差异。
我不懂你们同学为啥会选择t检验(比较特征与target的均值没用呀),然后开头也没有方差过滤?
卡方检验:适用于分析两个及两个以上分类变量之间的关联性。主要用于比较理论频数和实际频数的吻合程度或拟合优度问题。
F检验:适用于比较两个或多个样本方差是否有显著差异。常用于方差分析(ANOVA)中,用于比较多个样本均值是否有显著差异。
互信息法:适用于特征选择和特征相关性分析。通过计算特征与目标变量之间的互信息量,来评估特征对目标变量的重要性。
在选择使用这四种方法时,可以根据具体问题和数据类型来确定优先级:
如果需要比较两个样本均值是否有显著差异,且样本量较小,可以首选t检验。
如果需要分析两个及两个以上分类变量之间的关联性,可以选择卡方检验。
如果需要比较多个样本方差是否有显著差异,可以使用F检验。
如果需要进行特征选择或特征相关性分析,可以考虑使用互信息法。
我的思路,我们应该用fliter中的方差过滤加互信息方法,然后嵌入法中选用xgboost方法
如果老师问为何没有用包裹法,答:我们电脑性能不太好,RFECV需要算力。还有时间不充裕。还有虽然包装法的效果是所有特征选择方法中最利于提升模型表现的,它可以使用很少的特征达到很优秀的效果?(包装法是一种特征选择方法,它通过反复创建模型并保留最佳特征或剔除最差特征的方式来选择特征子集。包装法的效果被认为是所有特征选择方法中最利于提升模型表现的,原因如下:
考虑特征之间的相互作用:包装法在每次迭代时都会重新创建模型,这意味着它可以考虑特征之间的相互作用。通过不断调整特征子集,包装法可以更好地捕捉特征之间的关系,从而提高模型的表现。
个性化特征选择:包装法根据保留或剔除特征的顺序进行排名,最终选出一个最佳子集。这意味着包装法可以根据具体问题的需求选择最适合的特征子集,从而提高模型的性能。
可以使用很少的特征:由于包装法是一种贪婪的优化算法,它会在每次迭代中选择最佳特征或剔除最差特征。这意味着包装法可以使用很少的特征来达到很优秀的效果,从而减少了特征的维度,提高了模型的效率。
总之,包装法通过考虑特征之间的相互作用、个性化特征选择和使用很少的特征来达到很优秀的效果,因此被认为是所有特征选择方法中最利于提升模型表现的方法。)但是包装法和嵌入法在特征选择中都是相对精确的方法,它们可以在特征数目相同时达到相似的效果。这是因为它们都是基于算法自身的选择来完成特征选择的,我们已经使用了xgboost算法模型了,没必要再使用一个算法。
包装法通过训练评估器并使用评估器的属性(如coef_或feature_importances_)来获得每个特征的重要性。然后,它会逐步删除最不重要的特征,直到剩下规定数量的特征。这种方法可以更准确地选择特征,因为它考虑了特征之间的相互作用。
嵌入法也是一种基于算法的特征选择方法,它在算法训练过程中直接选择最佳特征。它通过在训练过程中调整特征的权重或系数来选择最佳特征。这种方法可以更准确地选择特征,因为它考虑了特征与目标变量之间的关系。
因此,当特征数目相同时,包装法和嵌入法都可以通过算法自身的选择来达到相似的效果。它们都可以更准确地选择特征,以提高模型的性能和泛化能力。
当特征选择完成后,可以直接训练模型了,但是可能由于特征矩阵过大,导致计算量大,训练时间长的问题,要进行降低特征矩阵维度。(但是我们此项任务没必要降维,特征数量很小)
常见的降维方法除了以上提到的基于L1惩罚项的模型以外,另外还有主成分分析法(PCA)和线性判别分析(LDA),线性判别分析本身也是一个分类模型。
PCA和LDA有很多的相似点,其本质是要将原始的样本映射到维度更低的样本空间中,但是PCA和LDA的映射目标不一样:PCA是为了让映射后的样本具有最大的发散性;而LDA是为了让映射后的样本有最好的分类性能。所以说PCA是一种无监督的降维方法,而LDA是一种有监督的降维方法。