1

我使用matlabsequentialfs函数进行前向特征选择,代码如下。我多次重复运行相同的代码,我注意到结果大不相同。虽然每次运行的交叉验证不同(折叠数相同),但我认为选择的特征应该大致相同。有人可以帮忙解释一下吗?谢谢。

cp = cvpartition(label,'k',cvNum); % Stratified cross-validation

opts = statset('display','iter');
fun = @(XT,yT,Xt,yt)...
    (sum(yt ~= SVCpredict(Xt,yt,XT,yT)));

[fs,history] = sequentialfs(fun,data,label,'cv',cp,'options',opts);
4

1 回答 1

2

如果您的数据包含一些具有高度预测性的变量,而另一些则根本不是很有预测性,那么您会期望通过特征子集选择方法选择的变量集sequentialfs在使用随机交叉运行多次时相当稳定验证。

但是,如果数据包含的变量的预测能力完全相等(尤其是如果没有一个预测能力很强),那么您会期望选择的变量集在使用随机交叉验证运行时变化更大。

因此,如果您选择了非常不同的变量,仅通过更改交叉验证折叠,这将证明您的数据不包含任何比其他变量更具预测性的特定变量子集。

您可能会得出结论(尽管这是您的数据,所以您会比我更清楚,这取决于上下文)特征子集选择不是最好的方法,并且其他形式的降维可能会更好(例如如,如果您的数据是数字,PCA)。

于 2014-01-02T14:47:08.597 回答