主要内容

sequentialfs

连续的特征选择使用自定义标准

    描述

    例子

    特遣部队= sequentialfs (有趣的,X,y)选择功能的一个子集X这对预测是很重要的y。函数定义了一个随机nonstratified分区10倍交叉验证Xy,然后按顺序选择特性的基础上,旨在预测准则计算的值有趣的函数。最初的特性集不包含的特性。sequentialfs增加一个功能设置在每一次迭代,直到添加一个功能不降低标准价值大于终止公差值。输出特遣部队是一个逻辑向量表示选择的特性。更多细节,请参阅算法

    例子

    特遣部队= sequentialfs (有趣的,X1,…, XN)选择功能的一个子集X1通过交叉验证图谱标准价值定义的分区X1,…, XN

    例子

    特遣部队= sequentialfs (___,名称,值)指定选项使用一个或多个名称参数除了任何输入参数组合在前面的语法。例如,指定“方向”、“落后”的执行递归特性消除(RFE)。最初的特性集包括所有功能。sequentialfs从组中删除一个特征在每个迭代,直到删除功能不降低预测判据。

    例子

    (特遣部队,历史)= sequentialfs (___)还返回的信息特征选择过程。

    例子

    全部折叠

    找到重要的功能通过执行顺序向前特征选择使用包装器类型。

    加载fisheriris数据集。

    负载fisheriris

    显示变量数据集。

    类属性名称大小字节量150种x4 4800双150 x1 18100细胞

    矩阵包含四个测量三种虹膜花150种不同的花。的变量物种列出了每个花物种。

    指定的预测数据Xy。定义和响应数据X包括四个测量和六个随机变量。测量变量在列1,3,5,7。

    rng (“默认”)%的再现性10 X = randn (150);X(:[1 3 5 7]) =量;y =物种;

    定义的函数处理myfun一个匿名函数,四个输入:训练数据(XTrainyTrain)和测试数据(XTest欧美)。匿名函数训练分类模型通过使用训练数据,并返回一个损失值的测试数据训练模型。

    myfun = @ (XTrain、yTrain XTest、欧美)大小(XTest 1) *损失(fitcecoc (XTrain yTrain) XTest,欧美);

    损失函数的分类模型对象返回平均损失值,但是sequentialfs也将返回的准则值的总和myfun总数量的测试观察。因此,匿名函数必须返回损失价值乘以数量的测试观察。

    创建一个随机的分区分层10倍交叉验证。

    简历= cvpartition (y,“KFold”10);

    使用sequentialfs功能按顺序选择重要的特性X基于标准的返回值myfun。指定使用分层分区简历,并设置迭代选择显示的信息特征选择在每一个迭代过程。

    选择= statset (“显示”,“通路”);tf = sequentialfs (myfun, X, y,“简历”的简历,“选项”、选择);
    开始向前连续特征选择:初始列包括:没有列不能包括:步骤1,添加列7,则价值0.04步骤2,添加列5、准则值0.0333333步骤3,添加列1,标准价值0.0266667步骤4,添加列3、准则值0.0133333最后一列包含:1 3 5 7

    sequentialfs正确发现的重要预测因子列1,3,5,7。

    找到重要的功能通过执行逆向顺序特征选择,或消除递归特性(RFE),使用包装器类型。

    加载哈尔德数据集的措施在其硬化水泥成分热的影响。

    负载哈尔德

    这个数据集包含的变量成分。矩阵成分包含四个化学物质的百分比组成的水泥。向量包含的值为每个水泥样品加热硬化后180天。

    使用sequentialfs函数执行逆向顺序特征选择基于标准的返回值myfun。辅助函数的代码myfun出现最后这个例子。指定方向名称-值参数为“落后”包括所有功能在最初的特性集,然后按顺序排除一个特征在每个迭代。设置迭代选择显示的信息特征选择在每一个迭代过程。

    rng (“默认”)%的再现性选择= statset (“显示”,“通路”);tf = sequentialfs (@myfun成分、热、“方向”,“落后”,“选项”、选择);
    开始向后顺序特征选择:最初的列包括:所有列,必须包括:步骤1,初始列,使用标准价值13.9777步骤2,第三列,则值6.76384最后一列包括:1 2 4

    sequentialfs在排除了第三个变量的特性成分

    Helper函数

    myfun函数接受四个输入:训练数据(XTrainyTrain)和测试数据(XTest欧美)。函数列车使用训练数据的回归模型,并返回错误的平方和的测试数据训练模型。

    函数标准= myfun (XTrain、yTrain XTest、欧美)mdl = fitrlinear (XTrain yTrain);XTest predictedYTest =预测(mdl);e =次- predictedYTest;标准= e ' * e;结束

    执行过滤器类型特征选择基于相关系数的特性。

    加载carsmall数据集。

    负载carsmall

    创建特征矩阵X包含六个变量。

    X =[加速度气缸位移马力Model_Year重量);

    计算两两之间的线性相关系数矩阵的每一对的特性X通过使用相关系数函数。指定名称-值参数为“成对”含有省略任何行在成对的基础上为每个两列相关系数计算。

    相关系数(X,“行”,“成对”)
    ans =6×61.0000 -0.6473 -0.6947 -0.6968 0.4843 -0.4879 -0.6473 1.0000 0.9512 0.8622 -0.6053 0.8844 -0.6947 0.9512 1.0000 0.9134 -0.5779 0.8895 -0.6968 0.8622 0.9134 1.0000 -0.6082 0.8733 0.4843 -0.6053 -0.5779 -0.6082 1.0000 -0.4964 -0.4879 0.8844 0.8895 0.8733 -0.4964 1.0000

    X包含高度相关的特性。例如,第二个和第三个特性之间的相关性(气缸位移)是0.9512。

    使用sequentialfs功能等级的功能X基于相关的值。当你调用指定这些选项sequentialfs功能:

    • 使用辅助函数mycorr,它返回的最大绝对值矩阵的对角元素相关系数。这个helper函数的代码出现最后这个例子

    • 指定“方向”、“落后”的“NullModel”,真的sequentialfs从最初的特性集包含所有功能,然后排除所有功能的集合,一个特性。

    • 指定“简历”、“没有”没有交叉验证进行特征选择。

    • 设置迭代选择显示的信息特征选择在每一个迭代过程。

    选择= statset (“显示”,“通路”);(~,历史)= sequentialfs (@mycorr X,“方向”,“落后”,“NullModel”,真的,“简历”,“没有”,“选项”、选择);
    开始向后顺序特征选择:最初的列包括:所有列,必须包括:步骤1,初始列,使用标准价值0.951167步骤2,第三列,则值0.884401步骤3,删除列6,则价值0.862164步骤4,删除列4,标准价值0.647346步骤5,删除列2,标准价值0.484253步骤6,第1列,则值0步骤7,删除列5、准则值0最终列包括:没有

    sequentialfs返回的结构数组历史有两个字段(暴击)包含的信息特征选择过程。的字段包含一个逻辑矩阵,行显示选择迭代的特性。一个真正的(逻辑1)进入一行显示对应的特性是迭代后的特性集。

    伦理观
    ans =7 x6逻辑阵列1 1 1 1 1 1 1 1 0 1 1 1 1 1 0 1 1 0 1 1 0 0 1 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0

    暴击字段包含在每步迭代计算的准则值。

    history.Crit
    ans =1×70.9512 0.8844 0.8622 0.6473 0.4843 0 0

    值是零,因为最后两个标准mycorr函数返回0,如果输入包含少于两个特性。

    从矩阵中提取排除功能的指标字段。

    p =大小(X, 2);idx =南(1、p);i = 1: p idx (i) =找到(伦理观(我,:)~ =伦理观(我+ 1,);结束idx
    idx =1×63 6 4 2 1 5

    找到的一组特征值小于0.8的标准。

    阈值= 0.8;iter_last_exclude =找到(history.Crit(2:结束)<阈值,1);idx_selected = idx (iter_last_exclude + 1:结束)
    idx_selected =1×32 1 5

    计算相关系数矩阵为选定的功能。

    相关系数(X (:, idx_selected),“行”,“成对”)
    ans =3×31.0000 -0.6473 -0.6053 -0.6473 1.0000 0.4843 -0.6053 0.4843 1.0000

    非对角元素的绝对值小于阈值0.8。

    Helper函数

    mycorr函数接受一个包含特征列的矩阵,并返回的最大绝对值矩阵的对角元素相关系数。非对角元素是两个截然不同的特征输入数据之间的相关性。因此,mycorr返回0,如果输入数据没有至少两个不同的特性。

    函数标准= mycorr (X)如果大小(X, 2) < 2标准= 0;其他的p =大小(X, 2);R = corr (X,“行”,“成对”);R(逻辑(眼(p))) =南;标准= max (abs (R)、[]“所有”);结束结束

    转换为一个表,其中包含数字和分类变量使用数组onehotencodetable2array功能。然后,选择数组中的重要功能使用sequentialfs函数。

    加载carbig数据集。

    负载carbig

    这些数据集包含变量描述汽车的几个方面,如英里每加仑(英里/加仑)、原产国(起源),气缸数(气缸)。您可以创建一个回归模型英里/加仑使用另一个变量。

    指定的预测数据tblX在一个表,并指定响应数据y

    tblX =表(加速、气缸、位移,马力,Model_Year、重量、产地);y = MPG;

    所有变量在tblX是数字,除了起源变量。

    在一个炎热的编码起源变量使用onehotencode函数。

    tblOrigin =表(分类(string(起源)));tblOrigin = onehotencode (tblOrigin);

    删除起源变量的tblX,并添加编码值tblX

    tblX。起源= [];tblX = [tblX tblOrigin];

    转换表tblX一个数组。

    X = table2array (tblX);

    定义的函数处理myfun一个匿名函数,四个输入:训练数据(XTrainyTrain)和测试数据(XTest欧美)。匿名函数列车使用训练数据的回归模型,并返回一个损失值的测试数据训练模型。

    myfun = @ (XTrain、yTrain XTest、欧美)大小(XTest 1) *损失(fitrtree (XTrain yTrain) XTest,欧美);

    损失函数回归模型对象返回的均方误差(MSE),但是sequentialfs也将返回的准则值的总和myfun总数量的测试观察。因此,匿名函数必须返回损失价值乘以数量的测试观察。

    使用sequentialfs功能按顺序选择重要的特性X基于标准的返回值myfun

    rng (“默认”)%的再现性tf = sequentialfs (myfun, X, y);

    显示所选特征的变量名。

    tblX.Properties.VariableNames (tf) '
    ans =6 x1细胞{“气缸”}{“位移”}{‘Model_Year}{“重量”}{“德国”}{“意大利”}

    输入参数

    全部折叠

    函数来计算特征选择标准,指定为一个函数处理。

    对于每个候选人的特性集,sequentialfs计算旨在通过不断调用标准价值有趣的函数如下:

    1. 对于每一个褶皱(一组训练和测试数据集)定义的简历名称-值参数,sequentialfs调用有趣的函数的准则值。

    2. sequentialfs划分标准的总和值的总数测试观察。

    如果您指定Xy,那么有趣的函数必须有这种形式:

    标准=乐趣(XTrain、yTrain XTest、欧美)

    • 有趣的函数接受的训练数据(XTrainyTrain)和测试数据(XTest欧美)。

    • XTrainXTest包含的列的一个子集X对应于当前候选特征集。

    • 有趣的函数返回标量值标准

    • 通常情况下,有趣的火车模型通过使用训练数据(XTrain,yTrain),预测响应值XTest,并返回一个损失预测的值相比欧美。常见的措施包括损失的平方误差的总和回归模型和观测分类错误的数量分类模型。

      例如,您可以定义myFun函数,如下所示,然后指定有趣的作为@myFun

      函数标准= myFun (XTrain、yTrain XTest、欧美)mdl = fitcsvm (XTrain yTrain);XTest predictedYTest =预测(mdl);标准=总和(~ strcmp(欧美,predictedYTest));结束

      或者,您可以定义函数处理myFunHandle对于一个匿名函数,如下所示,然后指定有趣的作为myFunHandle

      myFunHandle = @ (XTrain、yTrain XTest、欧美)损失(fitcsvm (XTrain yTrain) XTest,欧美)*大小(XTest, 1);

      sequentialfs将返回的准则值的总和有趣的总数量的测试观察。所以,有趣的不能损失值除以数量的测试观察。的损失函数的分类或回归对象返回一个平均损失的价值。因此,有趣的必须返回损失价值乘以数量的测试观察。如果你定义有趣的的平方和函数返回错误或更进一步的观察,然后旨在规范值的均方误差或错误分类率,分别。

    如果您指定X1,…, XN,sequentialfs选择功能从X1,否则不解释X1,…, XN。这个函数有趣的还必须有这种形式:

    标准=乐趣(X1Train⋯, XNTrain X1Test,⋯, XNTest)

    • 有趣的函数接受的训练数据(X1Train、…XNTrain)和测试数据(X1Test、…XNTest)。

    • X1TrainX1Test包含的列的一个子集X1对应于当前候选特征集。

    • 有趣的函数返回标量值标准

    数据类型:function_handle

    特性数据,指定为一个数字矩阵。的行X对应于观测的列X对应的特性。Xy必须有相同数量的行。

    定义的自定义函数有趣的参数必须接受一组训练和测试数据集定义的分裂X。详情,请参阅有趣的参数,简历名称-值参数。

    数据类型:|

    反应(标签),指定为一个列向量。Xy必须有相同数量的行。

    定义的自定义函数有趣的参数必须接受一组训练和测试数据集定义的分裂y。详情,请参阅有趣的参数,简历名称-值参数。

    数据类型:||逻辑|字符|字符串|细胞|分类

    输入数据,指定为矩阵。矩阵必须有相同数量的行。

    sequentialfs选择功能从X1,否则不解释X1,…, XN

    定义的自定义函数有趣的参数必须接受一组训练和测试数据集定义的分裂X1,…, XN。详情,请参阅有趣的参数,简历名称-值参数。

    数据类型:||逻辑|字符|字符串|细胞|分类

    名称-值参数

    指定可选的双参数作为Name1 = Value1,…,以=家,在那里的名字参数名称和吗价值相应的价值。名称-值参数必须出现在其他参数,但对的顺序无关紧要。

    例子:KeepIn =[1 0 0 0],禁入= [0 0 0 1)总是包括第一个特性和不包括最后一个特性。

    R2021a之前,用逗号来分隔每一个名称和值,并附上的名字在报价。

    例子:“KeepIn”,[1 0 0 0],“禁入”,[0 0 0 1)

    交叉验证选择计算每个候选人的标准特征子集,指定为一个正整数,cvpartition对象,“resubstitution”,或“没有”

    对于每一个候选特征子集,sequentialfs使用这个参数所指定的分区旨在则返回的值有趣的函数。

    • 正整数k- - - - - -sequentialfs使用一个随机nonstratified分区k倍交叉验证。

    • cvpartition对象-sequentialfs使用一个分区中指定cvpartition对象。您可以指定一个分层分区,分区用于抵抗验证或分区分析交叉验证。有关详细信息,请参见cvpartition

    • “resubstitution”- - - - - -sequentialfs输入数据不分区。训练集和测试集包含所有的原始观测数据。例如,如果您指定Xy,然后sequentialfs调用有趣的作为标准=乐趣(X, y, X, y)

    • “没有”- - - - - -sequentialfs不验证准则值并调用吗有趣的作为标准=乐趣(X, y)训练集和测试集,没有分离。

    例子:“简历”、“没有”

    蒙特卡罗重复交叉验证的数量,指定为一个正整数。

    如果你指定一个正整数比1,sequentialfs指定数量的重复重复交叉验证计算每个候选特征子集。

    如果简历“没有”,“resubstitution”,或者一个cvpartition类型的对象“resubstitution”,然后MCReps必须1

    例子:“MCReps”, 10

    数据类型:|

    的方向顺序搜索,指定为“转发”“落后”

    • “转发”——最初的特性集不包含功能,以及sequentialfs功能按顺序将特性添加到集合。

    • “落后”最初的特性集包括所有功能,sequentialfs功能按顺序从设置中删除功能。也就是说,sequentialfs函数执行递归特性消除(RFE)。

    例子:“方向”、“落后”的

    数据类型:字符|字符串

    功能包括,指定为[]、逻辑向量或一个向量的正整数。

    默认情况下,sequentialfs检查所有功能的特征选择过程。如果指定的特性,包括使用这个参数,sequentialfs总是包括候选人的功能特性集。一个真正的进入一个逻辑向量或一个索引值向量的正整数表示输出参数特遣部队必须包含相应的功能。

    例子:“KeepIn”, [1 0 0 0]

    数据类型:逻辑

    排除特性,指定为[]、逻辑向量或一个向量的正整数。

    默认情况下,sequentialfs检查所有功能的特征选择过程。如果指定特性排除使用这个参数,sequentialfs不包括从候选特征集的特性。一个真正的进入一个逻辑向量或一个索引值向量的正整数表示输出参数特遣部队必须排除相应的功能。

    例子:“禁入”,[0 0 0 1)

    数据类型:逻辑

    特征选择,指定为[]或者一个正整数。

    默认情况下,sequentialfs时停止迭代函数满足停止条件之一(麦克斯特TolFun指定的)选项名称-值参数。如果你指定NFeatures名称-值参数作为一个正整数,sequentialfs停止迭代后选择指定数量的特性。这个参数将覆盖其他迭代选择。

    例子:“NFeatures”2

    数据类型:|

    标志包括零模型(模型不含功能),指定为一个逻辑1(真正的)或0()。

    如果您指定真正的,sequentialfs功能包括零输出模型作为一个有效的选择特遣部队并计算准则值为空输入数据。因此,有趣的函数必须能够接受空矩阵作为输入参数值。

    例子:“NullModel”,真的

    数据类型:逻辑

    迭代和并行计算选项,指定为返回的结构statset

    此表列出了选项字段及其值。

    字段名 字段值 默认值
    显示

    显示,指定为“关闭”,“最终”,或“通路”

    • “关闭”——显示任何信息。

    • “最终”——显示最后的信息。

    • “通路”在每一次迭代时,显示信息。

    “关闭”
    麦克斯特 最大允许的迭代次数,指定为一个正整数
    TolFun 终止在标准公差值,指定为一个积极的标量 1 e-6如果方向“转发”;0如果方向“落后”
    TolTypeFun 类型的终止对准则的值,指定为“abs”(绝对宽容)或“rel”(相对公差) “rel”
    UseParallel 国旗并行运行,指定为逻辑1(真正的)或0()
    UseSubstreams

    国旗并行计算可再生的方式运行,指定为逻辑1(真正的)或0()。

    计算重复性良好一个类型,允许substreams:“mlfg6331_64”“mrg32k3a”

    随机数流,指定为一个RandStream这样的对象的对象或单元阵列。除非使用一个对象UseParallel值是真正的UseSubstreams值是。在这种情况下,使用相同的单元阵列大小平行池。

    MATLAB®默认的随机数流

    你需要并行计算,并行计算工具箱™。

    例子:“选项”,statset(“显示”、“iter”)

    数据类型:结构体

    输出参数

    全部折叠

    选择的功能,作为一个逻辑向量返回。一个真正的(逻辑1)条目表明,选择相应的功能。

    特征选择的历史过程,作为一个结构数组包括返回暴击字段。

    • 是一个逻辑矩阵的行吗显示选择迭代的特性

    • 暴击是一个向量包含在每步迭代计算的准则值。

    更多关于

    全部折叠

    特征选择

    特征选择可以降低数据的维数,选择只有一个子集的测量功能(预测变量)来创建一个模型。特征选择算法搜索的一个子集预测优化模型测量响应,受到约束等要求或排除特性和子集的大小。

    你可以分类特征选择算法分为三种类型:

    • 滤波器类型——滤波器类型特征选择算法措施功能基于重要性的特征特性,如方差特性和特性与响应之间的关系。您选择重要特性作为数据预处理步骤的一部分,然后火车模型使用选定的功能。因此,过滤类型特征选择算法是不相关的培训。

    • 包装器类型,包装器类型特征选择算法开始训练使用功能的一个子集,然后添加或删除功能使用选择标准。选择标准直接措施模型性能的变化,结果从添加或删除功能。算法重复培训和提高模型直到其停止标准得到满足。

    • 学习嵌入式,嵌入式特征选择算法特性重要性作为模型的学习过程的一部分。一旦你训练模型,获得特征训练模型的重要性。这种类型的算法选择特性,工作与一个特定的学习过程。

    更多细节,请参阅介绍了特征选择

    算法

    sequentialfs按顺序选择功能X通过执行以下步骤:

    1. 定义一个随机nonstratified分区10倍交叉验证n的观察,n观察的数量吗X

    2. 初始化选择的特性集年代作为一个空集。

    3. 为每一个功能xX,计算旨在使用标准的价值有趣的函数。

    4. 添加特性值与最小的标准年代

    5. 为每一个功能xX \ S特性集,定义一个候选人C作为年代∪{x}。计算旨在使用标准的价值有趣的C

    6. 在候选集(Cs),选择设置减少准则值最值与标准年代。添加相对应的功能设置为选中的候选人年代

    7. 重复步骤5和6,直到添加一个功能不降低标准价值大于终止公差值。

    自定义特征选择过程中,使用的名称参数sequentialfs

    • 您可以指定使用交叉验证选项简历MCReps名称-值参数。

      • 包装器类型特征选择,指定参数旨在准则值为每个候选人的特性集,您可以定义有趣的功能训练模式训练模型的值并返回一个标准。例如,看到的提出了特征选择

      • 过滤器类型特征选择,不涉及交叉验证,指定简历作为“没有”并使用有趣的函数输入数据的测量特点,如相关性。例如,看到的过滤器类型特征选择

    • 执行反向特征选择,或者递归特性消除(RFE),指定方向名称-值参数为“落后”sequentialfs初始化选择的特性集年代作为一组特性,然后从组中删除一个特性。

    • 您可以指定哪些特性总是包括或排除,特征的数量在最后选择的特性集,以及是否考虑没有特性的模型作为一个有效的选择。详情,请参阅KeepIn,禁入,NFeatures,NullModel名称-值参数。

    • 使用选项名称-值迭代参数来指定选项和并行计算。例如,选项,statset(依照“TolFun”, 1)设置迭代终止在标准公差值1)依照

    扩展功能

    版本历史

    介绍了R2008a