不同运行的特征选择算法给出不同的选择特征集。如何选择其中最好的一组?

数据挖掘 机器学习 特征选择 支持向量机 特征提取 matlab
2022-03-12 09:53:50

我正在使用 MATLAB 的前向特征选择算法。代码如下:

 X=combine_6_non;
 y=target;
 c = cvpartition(y,'k',10);
 opts = statset('display','iter');
 [fs,history] = sequentialfs(@fun,X,y,'cv',c,'options',opts)

fun函数如下:

function err = fun(XT,yT,Xt,yt)
  model = svmtrain(XT,yT, 'Kernel_Function', 'rbf', 'boxconstraint', 1);
  err = sum(svmclassify(model, Xt) ~= yt);
end

现在对于选择算法的不同运行,我得到了不同的特征集。我应该如何归零到最佳功能集?

2个回答

您可以为拆分过程设置 aseed或 a random state这有助于每次生成一个固定的随机数,从而帮助您在每次进行 CV 拆分时获得相同的数据。

这可以通过set_seed(...)在 R 中完成,并random_state = ...在 Python 中添加相关函数参数。所以,请为Matlab添加相关参数,你的简历会很好。

设置种子并不能完全解决获得不同最优特征集的问题。它将导致任意优化。特征选择算法为不同的 cv-fold 设置或初始化获得不同的最佳特征集,这意味着您的 ML 问题对数据和超参数很敏感。

理想情况下,您应该增加模型容量或示例数量,直到最佳特征集在两次运行之间保持稳定。如果这不是一个选项或不能改善问题,那么保守的方法是使用这些功能集的交集,或者不太保守地使用联合。