Matlab sequentialfs函数

sequentialfs函数用于从数据矩阵X中选择最佳特征子集,以最小化预测Y的损失。该方法通过依次添加或移除特征,进行交叉验证,评估如均方误差或误分类率等损失指标。用户自定义函数FUN定义了选择标准和停止条件,可以选择回归或分类模型。函数还支持多种参数调整,如搜索方向、验证方法、迭代次数和特征数量限制。输出包括选定特征的逻辑向量和选择历史记录。
摘要由CSDN通过智能技术生成

依次选择特征的函数

INMODEL = sequentialfs(FUN,X,Y)  从 X 中选择一个特征子集,通过依次选择特征直到预测没有改善为止,该子集能够最好地预测Y中的数据。

输入:

X是一个数据矩阵,X有多少行,就说明有多少数据点,列对应于特征。

Y是 一个列向量,存储 X 中每个数据点的标签。   X 和 Y 的行数必须相同。

FUN是一个函数句柄,使用 @ 创建,它定义了sequentialfs选择特征和确定何时停止的标准。

输出:

inmodel是一个逻辑向量,指示最终选择了哪些特征。

 

从一个空的特征集开始,sequentialfs通过添加每个尚未选择的特征来创建候选特征子集。对于每个候选特征子集,sequentialfs通过重复调用具有不同训练和测试子集X和Y的FUN来执行10次交叉验证,如下所示:

CRITERION = FUN(xtrain,ytrain,xtest,ytest)

XTRAIN和YTRAIN包含相同的X和Y行子集,而XTEST和YTEST包含互补的行子集。XTRAIN和XTEST包含从X的列中获取的数据,这些列对应于当前候选特征集。

通常,fun使用XTRAIN和ytrain来训练或拟合一个模型,然后使用该模型预测XTEST的值,最后根据ytest,返回这些预测值的距离或损失。

在对给定的候选特征集的交叉验证计算中,sequentialfs将fun返回的损失值求和,然后除以测试点的总数。然后,它使用该平均值来评估每个候选特征子集。

典型的损失度量包括:

      对于回归模型:误差平方和(sequentialfs在这种情况下计算均方误差)

      对于分类模型:误分类点数(sequentialfs在这种情况下计算误分类率)。

注意:

Sequentialfs将fun在所有测试集上返回的损失值之和除以测试点的总数。因此,fun的输出值不应该除以测试点的总数。

计算出所有特征子集的平均损失值之后,sequentialfs会选择具有最小平均损失值的特征子集。重复这个过程,当添加更多的特征无法降低损失的时候,停止。

inmodel = sequentialfs(fun, X, Y, Z, ...) 允许输入多个变量  X, Y, Z, ...。 但 sequentialfs 只从 X 中选择特征列。所有的输入,不论是列向量还是矩阵,他们的行数都必须一样。sequentialfs 通过以下形式训练和测试子集:

criterion = fun(Xtrain, Ytrain, Ztrain, ..., Xtest, Ytest, Ztest,...)

sequentialfs 通过从 X, Y, Z, ...  中挑选一部分行作为行子集(也就是挑选一部分观察点)来创建Xtrain, Ytrain, Ztrain, ..., Xtest, Ytest, Ztest,...。fun必须返回一个标量值criterion,但可以通过任何方式计算出这个值。逻辑向量inmodel中的元素说明了最终选择了X的哪一列特征。

[inmodel, history] = sequentialfs(fun, X, ...) 返回 每一步选择了哪一个特征的信息。history是一个带有以下字段的标量structure:

     Crit:一个向量,包含了每一步计算的损失值criterion

     In:一个逻辑矩阵,第 i 行是第 i 步选择特征的结果。

[ ] = sequentialfs(..., param1,val1, param2, val2, ...) 中可选的参数名字和参数值如下:

ParameterValue
'cv'

用于计算每个候选特征子集的损失criterion的验证方法。

1、一个正整数 k :sequentialfs 使用不分层(without stratification)的 k-fold交叉验证。

2、一个 cvpartition 类对象:可以指定其它形式的交叉验证。

3、'resubstitution' :将原始数据作为训练数据和测试数据传递给 fun 计算损失 criterion。

4、'none' :调用 criterion = fun(X, Y, Z, ...)时,不分离测试集和训练集。

 

默认值是 10 ,即,使用不分层的10-fold交叉验证。

所谓的 wraper 方法,基于学习算法的 fun 函数

所谓的 filter 方法,fun 函数 按照发散性相关性对各个特征进行评分,设定阈值或者待选择特征的个数进行筛选

'mcreps'

一个正整数,交叉验证的蒙特卡罗重复次数,默认值是1。

当 'cv' 的值是 'resubstitution' 或 'none' 时,值必须是1。

'direction'

确定了顺序搜索的方向。默认值是'forward'。

'backward':初始候选集包含所有特征,移除特征直至criterion增加。

'keepin'一个逻辑向量 或者 一个指定了哪列特征必须被包含的列号向量。默认是空。
'keepout'一个逻辑向量 或者 一个指定了哪列特征必须被排除的列号向量。默认是空。
'nfeatures'一个特征序号,sequentialfs 应该在这个特征处停止。inmodel includes exactly this many features. 默认值是空,即当找到损失criterion的局部最小值时,sequentialfs 应该停止。当它是一个非空值时,根据 'options' 的 'MaxIter' 和 'TolFun' 重写。
'nullmodel'一个逻辑值,指示是否应该将空模型(不包含X中的任何特性)包含在特征选择和 history 输出中。默认是 false。
'options'

由 statset 创建的 迭代顺序搜索算法 的options structure。

sequentialfs 采用下列 statset 参数:

    Display——算法显示输出信息。默认是 'off '

    MaxIter——允许的最大迭代次数。默认是 Inf

    TolFun——目标函数值的终止偏差。如果 'direction' 是 'forward',默认值是1e-6,如果 'direction' 是 'backward',默认值是0

    TolTypeFun——使用目标函数偏差的绝对值或相对值。默认是 'rel'

    UseParallel——是否并行计算。默认是 false

    UseSubstreams——是否以可复制的方式并行计算。默认是 false,要可重复计算,请将 Streams 设置为允许子流的类型: 'mlfg6331_64' 或 'mrg32k3a'。

    Streams——一个RandStream类 或 由RandStream类 组成的 cell 数组。如果不指定值,sequentialfs 将采用默认的Stream。

 

如果要并行计算,需要安装 Parallel Computing Toolbox™.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值