我使用matlab sequentialfs函数进行前向特征选择,代码如下。我反复多次运行相同的代码,我注意到结果是完全不同的。虽然每次运行的交叉验证不同(折叠数相同),但我认为所选特征应大致相同。有人可以帮忙解释一下吗?感谢。
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);
答案 0 :(得分:2)
如果您的数据包含一些具有高度预测性的变量,而其他变量根本不具有预测性,那么您可能希望通过特征子集选择方法(如sequentialfs
)选择的变量集合相当稳定。通过随机交叉验证运行几次。
但是如果数据包含的变量在预测能力上都非常相等(特别是如果根本没有预测能力),那么当使用随机交叉验证运行时,您期望选择的变量集变化更大
因此,如果您选择了非常不同的变量,只需更改交叉验证折叠,就可以证明您的数据不包含任何特定的变量子集,而这些变量比其他变量更具预测性。
您可能会得出结论(尽管这是您的数据,因此您会比我更了解,这将取决于上下文),特征子集选择不是最佳的继续方式,并且某些其他形式的降维可能是更好(例如,如果您的数据是数字,PCA)。