机器学习深入研究:特征选择和过滤方法中的几个重要统计概念————卡方检验、方差分析、相关性coefficient,p值问题导致当我们拿到数据并进行预处理后,却不能直接用它来训练模型,需要选择有意义的特征(也就是特征选择)。这样做有四个好处:1.避免维数灾难2.降低学习难度3.减少过拟合4.增强特征与特征值之间的理解。特征选择的常用方法有3种:过滤法(Filter):先对数据集进行特征选择,然后进行训练学习,特征选择过程与后续学习器无关。Wrapper:根据目标函数(通常是预测效果得分),每次选择几个特征,或者排除几个特征。嵌入法(Embedding):首先使用机器学习模型进行训练,得到各个特征的权重系数,按照系数从大到小来选择特征。其中过滤法最简单,最容易运行,也最容易理解。过滤方法的核心思想是考察自变量与目标变量之间的相关性和相关性,设置阈值,优先考虑与目标相关性高的特征。主要方法:1、分类问题:卡方检验(chi2)、F检验(f_classif)、互信息(mutual_info_classif)2、回归问题:相关系数(f_regression)、信息系数(mutual_info_regression)卡方检验、F检验,mutualinformation,correlationcoefficient,informationcoefficient都是统计学领域的概念,在sklearn特征选择中都会用到,所以在解释这些概念的时候,我也着重参考了sklearn的文档。卡方检验百科定义:卡方检验是统计样本的实际观测值与理论推断值的偏离程度。实际观测值与理论推断值的偏离程度决定了卡方值的大小。如果卡方值越大,说明两者的偏离程度越大;反之,两者偏差越小;如果两个值完全相等,则卡方值为0,说明理论值完全一致。卡方值$\\chi^{2}$计算公式别看公式感叹,其实你只需要抓住第一个等号:A是实际值,T是理论值。F检验F检验和方差分析(ANOVA)是一回事,主要用于两个或多个样本均值差异的显着性检验。方差分析的基本原理是,不同处理组的均值之间存在差异的基本来源有两个:(1)实验条件,即不同处理引起的差异,称为组间差异。表示为各组均值与变量总均值的偏差平方和之和,记为$SS_b$,组间自由度为$df_b$。(2)随机误差,如因测量误差或个体间的差异而引起的差异,称为组内差异,用各组内变量均值与偏差的平方和表示组中的变量值,记录为$SS_w$,组内的自由度$df_w$。f的值可以用来判断假设H0是否成立:$f$的值越大,在一定程度上有理由拒绝原假设,认为两者之间存在显着差异不同人群下的平均值。所以我们可以根据样本的某个特征$x_i$的f值来判断特征$x_i$对预测类别的帮助。$f$的值越大,预测能力越强,相关性越大。基于此特征选择可以被执行。互信息(mutual_info_classif/regression)互信息是衡量变量之间相互依赖性的指标。与相关系数不同,互信息不限于实值随机变量,它更普遍,决定了联合分布p(X,Y)与分解边际的乘积p(X)p(Y)的相似程度分布。两个离散随机变量X和Y的互信息可以定义为:相关系数(f_regression)相关系数是帮助理解特征和响应变量之间关系的最简单的方法。该方法衡量变量之间的关系线性相关,结果取值范围为[-1,1],-1表示完全负相关,+1表示完全正相关,0表示不存在线性相关。$$r_i=\frac{(X_i-\barX_i)^{T}(y-\bary)}{std(X_i)std(y)}$$$$f=\frac{r_i^2}{1-r_i^2}*(n-2)$$其中$X_i$是表示所有样本在特征i上的值的$n$维列向量,分子中实际上有两个$n$维列向量的内积,所以$r_i$是一个值,其实就是样本相关系数。$f$的值越大,说明第i个特征与因变量y的相关性越大,所以我们做特征选择。P值(P-value)P值,又称P值。P值是概率的一种,是指在H0假设成立的前提下,样本结果出现的概率。如果P值很小,说明在原假设成立的前提下,样本结果出现的概率很小,甚至是极端的,这反过来说明原假设错的可能性很大.通常,会设置一个显着性水平(significancelevel)$\\alpha$来与P-value进行比较,如果P-value<$\\alpha$,则表示在显着性水平$\\下拒绝原假设alpha$,$\\alpha$通常设置为0.05。sklearn特征选择-过滤方法sklearn过滤方法特征选择方法SelectBest只保留得分最高的k个特征;SelectPercentile只保留用户指定百分比的得分最高的特征;使用常见的单变量统计检验:假阳性率SelectFpr,错误发现率selectFdr,或整体错误率SelectFwe;GenericUnivariateSelect通过结构化策略进行特征选择,通过超参数搜索估计器进行特征选择。SelectKBest根据分数保留K个特征;SelectPercentile根据分数保留指定百分比的特征;SelectFpr、SelectFdr和SelectFwe对每个特征使用一般的单变量统计检验;GenericUnivariateSelect允许使用可配置的策略(例如超参数搜索估计器)来选择最佳的单变量选择策略。特征选择指标使用sklearn中的SelectKBest函数进行特征选择,参数中的score_func选择:classification:chi2----卡方检验f_classif----方差分析,计算方差分析的F值(ANOVA)(组间均方/组内均方)mutual_info_classif----互信息,互信息方法可以捕捉任何一种统计相关性,但作为非参数方法,需要更多的样本才能进行准确的回归估计:f_regression----correlationcoefficient,计算每个变量与目标变量的相关系数,进而计算F值和P值mutual_info_regression----mutualinformation,mutualinformation衡量X和Y共享的信息:它衡量对这两个变量之一的了解,另一个不确定性降低的程度。sklearnfilteringmethodfeatureselection-example在sklearn中,可以使用chi2类做卡方检验,得到所有特征的卡方值和显着性水平P临界值。我们可以给出卡方值阈值,选择卡方值来比较Largeportion特征。代码如下:首先导入包和实验数据:fromsklearn.feature_selectionimportSelectKBestfromsklearn.feature_selectionimportchi2fromsklearn.datasetsimportload_iris#ImportIRISdatasetiris=load_iris()使用卡方检验选择特征model1=SelectKBest(chi2,k=2)#Selectkbestfeaturesmodel1.fit_transform(iris.data,iris.target)#iris.data是特征数据,iris.target是标签数据,这个函数可以选择k个特征,结果输出为:array([[1.4,0.2],[1.4,0.2],[1.3,0.2],[1.5,0.2],[1.4,0.2],[1.7,0.4],[1.4,0.3],之后可以看到使用卡方检验,最后两个特征被选中,如果我们还想查看卡方检验的p值和score,可以使用步骤3查看p值和scoresmodel1.scores_#Scorescoreoutputis:array([10.81782088,3.59449902,116.16984746,67.24482759])可以看出后两个特征得分最高,与o的结果一致你的第二步;model1.pvalues_#p-valuesp值输出为:array([4.47651499e-03,1.65754167e-01,5.94344354e-26,2.50017968e-15])可以看出后两者的p-valuesfeatures最小,confidence也最高,与之前的结果一致。
