sequentialfs
连续的特征选择使用自定义标准
语法
描述
例子
提出了特征选择
找到重要的功能通过执行顺序向前特征选择使用包装器类型。
加载fisheriris
数据集。
负载fisheriris
显示变量数据集。
谁
类属性名称大小字节量150种x4 4800双150 x1 18100细胞
矩阵量
包含四个测量三种虹膜花150种不同的花。的变量物种
列出了每个花物种。
指定的预测数据X
y。定义和响应数据X
包括四个测量和六个随机变量。测量变量在列1,3,5,7。
rng (“默认”)%的再现性10 X = randn (150);X(:[1 3 5 7]) =量;y =物种;
定义的函数处理myfun
一个匿名函数,四个输入:训练数据(XTrain
和yTrain
)和测试数据(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
函数接受四个输入:训练数据(XTrain
和yTrain
)和测试数据(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)、[]“所有”);结束结束
选择功能表
转换为一个表,其中包含数字和分类变量使用数组onehotencode
和table2array
功能。然后,选择数组中的重要功能使用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
一个匿名函数,四个输入:训练数据(XTrain
和yTrain
)和测试数据(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
计算旨在通过不断调用标准价值有趣的
函数如下:
对于每一个褶皱(一组训练和测试数据集)定义的
简历
名称-值参数,sequentialfs
调用有趣的
函数的准则值。sequentialfs
划分标准的总和值的总数测试观察。
标准=乐趣(XTrain、yTrain XTest、欧美)
的
有趣的
函数接受的训练数据(XTrain
和yTrain
)和测试数据(XTest
和欧美
)。XTrain
和XTest
包含的列的一个子集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
)。X1Train
和X1Test
包含的列的一个子集X1
对应于当前候选特征集。的
有趣的
函数返回标量值标准
。
数据类型:function_handle
名称-值参数
指定可选的双参数作为Name1 = Value1,…,以=家
,在那里的名字
参数名称和吗价值
相应的价值。名称-值参数必须出现在其他参数,但对的顺序无关紧要。
例子:KeepIn =[1 0 0 0],禁入= [0 0 0 1)
总是包括第一个特性和不包括最后一个特性。
R2021a之前,用逗号来分隔每一个名称和值,并附上的名字
在报价。
例子:“KeepIn”,[1 0 0 0],“禁入”,[0 0 0 1)
简历
- - - - - -交叉验证选择
10(默认)|正整数|cvpartition
对象|“resubstitution”
|“没有”
交叉验证选择计算每个候选人的标准特征子集,指定为一个正整数,cvpartition
对象,“resubstitution”
,或“没有”
。
对于每一个候选特征子集,sequentialfs
使用这个参数所指定的分区旨在则返回的值有趣的
函数。
正整数
k
- - - - - -sequentialfs
使用一个随机nonstratified分区k
倍交叉验证。cvpartition
对象-sequentialfs
使用一个分区中指定cvpartition
对象。您可以指定一个分层分区,分区用于抵抗验证或分区分析交叉验证。有关详细信息,请参见cvpartition
。“resubstitution”
- - - - - -sequentialfs
输入数据不分区。训练集和测试集包含所有的原始观测数据。例如,如果您指定X
和y
,然后sequentialfs
调用有趣的
作为标准=乐趣(X, y, X, y)
。“没有”
- - - - - -sequentialfs
不验证准则值并调用吗有趣的
作为标准=乐趣(X, y)
训练集和测试集,没有分离。
例子:“简历”、“没有”
MCReps
- - - - - -数量的蒙特卡洛交叉验证的重复
1
(默认)|正整数
蒙特卡罗重复交叉验证的数量,指定为一个正整数。
如果你指定一个正整数比1
,sequentialfs
指定数量的重复重复交叉验证计算每个候选特征子集。
如果简历
是“没有”
,“resubstitution”
,或者一个cvpartition
类型的对象“resubstitution”
,然后MCReps
必须1
。
例子:“MCReps”, 10
数据类型:单
|双
方向
- - - - - -顺序搜索方向
“转发”
(默认)|“落后”
的方向顺序搜索,指定为“转发”
或“落后”
。
“转发”
——最初的特性集不包含功能,以及sequentialfs
功能按顺序将特性添加到集合。“落后”
最初的特性集包括所有功能,sequentialfs
功能按顺序从设置中删除功能。也就是说,sequentialfs
函数执行递归特性消除(RFE)。
例子:“方向”、“落后”的
数据类型:字符
|字符串
KeepIn
- - - - - -功能包括
[]
(默认)|逻辑向量|向量的正整数
功能包括,指定为[]
、逻辑向量或一个向量的正整数。
默认情况下,sequentialfs
检查所有功能的特征选择过程。如果指定的特性,包括使用这个参数,sequentialfs
总是包括候选人的功能特性集。一个真正的
进入一个逻辑向量或一个索引值向量的正整数表示输出参数特遣部队
必须包含相应的功能。
例子:“KeepIn”, [1 0 0 0]
数据类型:逻辑
禁入
- - - - - -功能排除
[]
(默认)|逻辑向量|向量的正整数
排除特性,指定为[]
、逻辑向量或一个向量的正整数。
默认情况下,sequentialfs
检查所有功能的特征选择过程。如果指定特性排除使用这个参数,sequentialfs
不包括从候选特征集的特性。一个真正的
进入一个逻辑向量或一个索引值向量的正整数表示输出参数特遣部队
必须排除相应的功能。
例子:“禁入”,[0 0 0 1)
数据类型:逻辑
NFeatures
- - - - - -特征选择的数量
[]
(默认)|正整数
特征选择,指定为[]
或者一个正整数。
默认情况下,sequentialfs
时停止迭代函数满足停止条件之一(麦克斯特
或TolFun
指定的)选项
名称-值参数。如果你指定NFeatures
名称-值参数作为一个正整数,sequentialfs
停止迭代后选择指定数量的特性。这个参数将覆盖其他迭代选择。
例子:“NFeatures”2
数据类型:单
|双
选项
- - - - - -选择迭代和并行计算
statset (“sequentialfs”)
(默认)|返回的结构statset
迭代和并行计算选项,指定为返回的结构statset
。
此表列出了选项字段及其值。
字段名 | 字段值 | 默认值 |
---|---|---|
显示 |
显示,指定为
|
“关闭” |
麦克斯特 |
最大允许的迭代次数,指定为一个正整数 | 正 |
TolFun |
终止在标准公差值,指定为一个积极的标量 | 1 e-6 如果方向 是“转发” ;0 如果方向 是“落后” |
TolTypeFun |
类型的终止对准则的值,指定为“abs” (绝对宽容)或“rel” (相对公差) |
“rel” |
UseParallel |
国旗并行运行,指定为逻辑1 (真正的 )或0 (假 ) |
假 |
UseSubstreams |
国旗并行计算可再生的方式运行,指定为逻辑 计算重复性良好 |
假 |
流 |
随机数流,指定为一个 |
MATLAB®默认的随机数流 |
你需要并行计算,并行计算工具箱™。
例子:“选项”,statset(“显示”、“iter”)
数据类型:结构体
输出参数
特遣部队
——选择功能
逻辑向量
选择的功能,作为一个逻辑向量返回。一个真正的
(逻辑1
)条目表明,选择相应的功能。
历史
——历史特征选择的过程
结构
特征选择的历史过程,作为一个结构数组包括返回在
和暴击
字段。
在
是一个逻辑矩阵的行吗我
显示选择迭代的特性我
。暴击
是一个向量包含在每步迭代计算的准则值。
更多关于
特征选择
特征选择可以降低数据的维数,选择只有一个子集的测量功能(预测变量)来创建一个模型。特征选择算法搜索的一个子集预测优化模型测量响应,受到约束等要求或排除特性和子集的大小。
你可以分类特征选择算法分为三种类型:
滤波器类型——滤波器类型特征选择算法措施功能基于重要性的特征特性,如方差特性和特性与响应之间的关系。您选择重要特性作为数据预处理步骤的一部分,然后火车模型使用选定的功能。因此,过滤类型特征选择算法是不相关的培训。
包装器类型,包装器类型特征选择算法开始训练使用功能的一个子集,然后添加或删除功能使用选择标准。选择标准直接措施模型性能的变化,结果从添加或删除功能。算法重复培训和提高模型直到其停止标准得到满足。
学习嵌入式,嵌入式特征选择算法特性重要性作为模型的学习过程的一部分。一旦你训练模型,获得特征训练模型的重要性。这种类型的算法选择特性,工作与一个特定的学习过程。
更多细节,请参阅介绍了特征选择。
算法
sequentialfs
按顺序选择功能X
通过执行以下步骤:
定义一个随机nonstratified分区10倍交叉验证
n
的观察,n
观察的数量吗X
。初始化选择的特性集
年代
作为一个空集。为每一个功能x我在
X
,计算旨在使用标准的价值有趣的
函数。添加特性值与最小的标准
年代
。为每一个功能x我在
X \ S
特性集,定义一个候选人C
我作为年代
∪{x我}。计算旨在使用标准的价值有趣的
为C
我。在候选集(
C
我s),选择设置减少准则值最值与标准年代
。添加相对应的功能设置为选中的候选人年代
。重复步骤5和6,直到添加一个功能不降低标准价值大于终止公差值。
自定义特征选择过程中,使用的名称参数sequentialfs
。
扩展功能
自动并行支持万博1manbetx
加速代码通过自动运行并行计算使用并行计算工具箱™。
并行运行,指定选项
名称-值参数在调用这个函数,设置UseParallel
选择结构领域真正的
使用statset
:
“选项”,statset (“UseParallel”,真的)
关于并行计算的更多信息,请参阅MATLAB函数自动并行支持运行万博1manbetx(并行计算工具箱)。
版本历史
介绍了R2008a
MATLAB命令
你点击一个链接对应MATLAB命令:
运行该命令通过输入MATLAB命令窗口。Web浏览器不支持MATLAB命令。万博1manbetx
你也可以从下面的列表中选择一个网站:
表现最好的网站怎么走吗
选择中国网站(中文或英文)最佳站点的性能。其他MathWorks国家网站不优化的访问你的位置。