本主题介绍了顺序特性选择,并提供了一个使用自定义标准和sequentialfs
函数。
常用的方法特征选择是连续的特征选择.这个方法有两个组件:
该方法有两种变体:
统计和机器学习工具箱™提供了几种顺序特征选择功能:
逐步回归是一种序列特征选择技术,专门为最小二乘拟合而设计。的函数stepwiselm
和stepwiseglm
使用只有在最小二乘条件下才能实现的优化。与其他顺序特征选择算法不同的是,逐步回归算法可以删除已添加的特征,或者添加已删除的特征,这些特征是基于指定的准则的“标准”
名称-值对的论点。
sequentialfs
使用自定义标准执行顺序特征选择。输入参数包括预测器数据、响应数据和实现标准函数的文件的函数句柄。您可以定义一个标准函数来度量数据的特征或学习算法的性能。可选输入允许您指定SFS或SBS、所需或排除的特性以及特性子集的大小。的函数调用cvpartition
和crossval
在不同的候选集上评估准则。
fscmrmr
使用最小冗余最大关联(MRMR)算法对特征进行分类。
此示例使用自定义标准选择特征的子集,该标准测量广义线性回归问题的预测能力。
考虑一个包含10个预测因子的100个观察值的数据集。从逻辑模型中生成随机数据,在每一组预测值上都有响应的二项分布。一些系数被设置为零,以便不是所有的预测因子都影响响应。
rng (456)为重现性设置种子n = 100;m = 10;X =兰德(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(氮、磷);
为使用的数据拟合一个逻辑模型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.3306100个观测值,89个误差自由度
展示拟合的偏差。
dev0 = model0。异常
dev0 = 101.5648
这个模型是完整的模型,具有所有的特征和一个初始常数项。序列特征选择在完整模型中搜索具有比较预测能力的特征子集。
在执行功能选择之前,必须指定用于选择功能的标准。在这种情况下,标准是拟合的偏差(剩余平方和的剩余总和的概括)。这critfun
函数(在本例的最后显示)调用fitglm
并返回异常的匹配。
如果在本例中使用活动脚本文件,则critfun
函数已经包含在文件的末尾。否则,您需要在.m文件的末尾创建这个函数,或者将其作为文件添加到MATLAB路径中。
进行特征选择。sequentialfs
通过函数句柄调用标准函数。
maxdev = chi2inv (.95, 1);选择= 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
迭代显示显示,随着每个新特征添加到模型中,准则值会降低。最终的结果是一个简化模型,只有原来10个特征中的4个:列1
,4
,5
,10
的X
,如逻辑向量所示inmodel
返回sequentialfs
.
简化模型的偏差大于完整模型的偏差。然而,任何其他单一特征的增加不会使标准值的下降幅度超过绝对公差,maxdev
,设置在选项结构中。添加一个无效果的特征可以减少偏差量,该偏差量具有一个自由度的卡方分布。添加一个重要的特性会导致偏差发生更大的变化。通过设置maxdev
来chi2inv (.95, 1)
,你指导sequentialfs
在偏差变化大于随机预期变化的情况下,继续添加特性。
用初始常数项创建简化模型。
模型= fitglm (X (:, inmodel), Y,“分布”,'二重子')
模型=广义线性回归模型:logit(y) ~ 1 + x1 + x2 + x3 + x4Estimate SE tStat pValue __________ _______ _________ __________ (Intercept) -0.0052025 0.16772 -0.031018 0.97525 x1 0.73814 0.16316 4.52441 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-statistic vs. constant model: 216, p-value = 1.44e-45
此代码创建功能critfun
.
函数dev = critfun(X,Y) model = fitglm(X,Y)“分布”,'二重子');dev = model.Deviance;结束
sequentialfs
|stepwiselm
|stepwiseglm