主要内容

顺序特征选择

本主题介绍了顺序特征选择,并提供了一个使用自定义标准和顺序选择特征的示例sequentialfs函数。

顺序特征选择介绍

一种常用的特征选择顺序特征选择.这个方法有两个组成部分:

  • 一个目标函数,叫做标准,该方法寻求在所有可行特征子集上最小化。常用的标准是均方误差(用于回归模型)和误分类率(用于分类模型)。

  • 一种顺序搜索算法,在评估标准的同时从候选子集中添加或删除特征。因为穷尽比较的标准值在所有2n的子集n-特征数据集通常是不可行的(取决于n和目标调用的成本),顺序搜索只向一个方向移动,总是增加或总是缩小候选集。

该方法有两种变体:

  • 顺序前向选择SFS),在该方法中,特征被依次添加到一个空候选集,直到进一步的特征的添加不降低标准。

  • 顺序逆向选择SBS),其中特征被依次从一个完整的候选集中删除,直到进一步的特征被删除增加了标准。

统计和机器学习工具箱™提供了几个顺序特征选择功能:

  • 逐步回归是一种专门为最小二乘拟合设计的序列特征选择技术。的函数stepwiselm而且stepwiseglm使用只有在最小二乘条件下才可能实现的优化。与其他顺序特征选择算法不同的是,逐步回归可以删除已添加的特征或添加已删除的特征,其依据是“标准”名称-值对参数。

  • sequentialfs使用自定义标准执行顺序特征选择。输入参数包括预测器数据、响应数据和实现准则函数的文件的函数句柄。您可以定义一个标准函数来度量数据的特征或学习算法的性能。可选输入允许您指定SFS或SBS、必需或排除的功能部件以及功能部件子集的大小。函数调用cvpartition而且crossval在不同的候选集上评价准则。

  • fscmrmr使用最小冗余最大相关性(MRMR)算法对分类问题的特征进行排序。

选择具有比较预测能力的特征子集

本例使用度量广义线性回归问题预测能力的自定义准则来选择特征的子集。

考虑一个包含10个预测因子的100个观察值的数据集。从逻辑模型中生成随机数据,在预测器的每一组值处具有响应的二项分布。有些系数被设为零,这样就不会所有的预测因子都影响响应。

rng (456)为可重复性设置种子N = 100;M = 10;X = rand(n,m);B = [1 0 0 2 .5 0 0 0.1 0 1];Xb = X*b';p = 1 /(1+exp(-Xb));N = 50;y = binornd(N,p);

拟合逻辑模型的数据使用fitglm

Y = [Y N*ones(size(Y))];model0 = fitglm(X,Y,“分布”“二”
model0 =广义线性回归模型:logit(y) ~ 1 + x1 + x2 + x3 + x4 + x5 + x6 + x7 + x8 + x9 + x10分布=二项估计系数:估计SE tStat pValue _________ _______ ________ __________(拦截)0.22474 0.30043 0.74806 0.45443 x1 0.68782 0.17207 3.9973 6.408e-05 x2 0.2003 0.18087 1.1074 0.26811 x3 -0.055328 0.18871 -0.29319 0.76937 x4 2.2576 0.1813 12.452 1.3566e-35 x5 0.54603 0.16836 3.2432 0.0011821 x6 0.069701 0.17738 0.39294 0.69437 x7 -0.22562 0.16957 -1.3306 0.18334 x8 -0.19712 0.17338 -1.1383 0.25498 x9 -0.20373 0.16796 -1.213 0.22514 x10 0.99741 7.3296e-09 100观察,离散度:1 Chi^2统计量与常数模型:222,p值= 4.92e-42

显示配合的偏差。

Dev0 = model0。异常
Dev0 = 101.5648

这个模型是完整的模型,包含了所有的特征和一个初始常数项。顺序特征选择在完整模型中搜索具有相当预测能力的特征子集。

在进行特征选择之前,必须指定选择特征的条件。在这种情况下,标准是拟合的偏差(残差平方和的一般化)。的critfun函数(在本例的末尾显示)调用fitglm并返回匹配的偏差值。

如果对本例使用实时脚本文件,则critfun函数已经包含在文件的末尾。否则,您需要在.m文件的末尾创建这个函数,或者将它作为一个文件添加到MATLAB路径中。

执行特性选择。sequentialfs通过函数句柄调用criterion函数。

Maxdev = chi2inv(.95,1);Opt = statset(“显示”“通路”...“TolFun”maxdev,...“TolTypeFun”“abs”);inmodel = sequentialfs(@critfun,X,Y,...“简历”“没有”...“nullmodel”,真的,...“选项”选择,...“方向”“前进”);
开始前向顺序特征选择:初始列包含:无不能包含的列:无步骤1,使用初始列,准则值323.173步骤2,添加列4,准则值184.794步骤3,添加列10,准则值139.176步骤4,添加列1,准则值119.222步骤5,添加列5,准则值107.281最终列包含:1 4 5 10

迭代显示显示,随着每个新特征添加到模型中,准则值下降。最终的结果是一个简化的模型,只有原来十个特征中的四个:列145,10X,如逻辑向量所示inmodel返回的sequentialfs

简化模型的偏差大于完整模型的偏差。然而,任何其他单一特征的添加不会使准则值的降低超过绝对公差,maxdev,设置在选项结构中。添加一个没有效果的特征可以减少一个具有一个自由度的卡方分布的量的偏差。添加一个显著的特征会导致偏差发生更大的变化。通过设置maxdevchi2inv (.95, 1),你指示sequentialfs如果偏差的变化大于随机期望的变化,继续添加特性。

创建具有初始常数项的简化模型。

模型= fitglm(X(:,inmodel),Y,“分布”“二”
模型=广义线性回归模型:logit(y) ~ 1 + x1 + x2 + x3 + x4分布=二项估计系数:估计SE tStat pValue __________ _______ _________ __________ (Intercept) -0.0052025 0.16772 -0.031018 0.97525 x1 0.73814 0.16316 4.5241 6.0666e-06 x2 2.2139 0.17402 12.722 4.4369e-37 x3 0.54073 0.1568 3.4485 0.00056361 x4 1.0694 0.15916 6.7191 1.8288e-11 100个观测值,95个误差自由度色散:1 Chi^2统计量与常数模型:216, p值= 1.44e-45

这段代码创建了函数critfun

函数dev = critfun(X,Y) model = fitglm(X,Y,)“分布”“二”);dev = model.Deviance;结束

另请参阅

||

相关的话题