NSGA2算法特征选择MATLAB实现(多目标)

利用nsga2进行进行特征选择其主要思想是:将子集的选择看作是一个搜索寻优问题(wrapper方法),生成不同的组合,对组合进行评价,再与其他的组合进行比较。这样就将子集的选择看作是一个是一个优化问题。

需要优化的两个目标为特征数和精度。

nsga2是一个多目标优化算法。

具体的nsga2通用算法请看:http://www.omegaxyz.com/2018/01/22/new_nsga2/

具体的特征选择代码在上述代码的基础上改了两个①主函数②评价函数,增加了一个数据分成训练集和测试集的函数:

MATLAB代码主函数:

评价函数(利用林志仁SVM进行训练):

选的的数据集请从UCI上下载。

结果:

①pareto面

最后粒子的数据(选出的特征数和精确度)

PSO单目标特征选择请见:http://www.omegaxyz.com/2018/01/21/psofs/

21 评论

  1. 运行主函数时出现这个情况:
    输入参数的数目不足。

    出错 evaluate_objective (line 12)
    answer(i,1)={f(1)};

    出错 initialize_variables (line 9)
    f(i,V + 1:K) = evaluate_objective(f(i,:), M, V);

    出错 nsga_2_optimization (line 18)
    chromosome = initialize_variables(pop, M, V, min_range, max_range);
    请问怎么解决,刚刚开始接触请大佬帮我解答一下!

  2. 请问添加了数据集后,运行出现这个错误:
    未定义函数或变量 ‘Parkinson_f’。
    出错 divide_datasets (line 3)
    dataMat=Parkinson_f;

    Parkinson_f没有定义,怎么修改

  3. 请问initialize_variables函数没有更改吗?如果没有更改,f会出现问题。

  4. 大神,answer=cell(M,3);为啥要设为两行三列呢,3是什么含义呢,temp_x = x(1:V);这句话代表啥意思呢,f(1) = sum(inmodel(1,:));这个是特征的目标函数吗,为啥要求和呢,希望大神给予指导,我看好久了,实在不知道这几句为啥是这样的,还有就是把svmtrain和svmpredict换为其他网络时,如BP神经网络,子文件BPtrain的第一句应该怎么写呢,怎么调用都说输入参数不足。非常感谢大神能给予指导

    • 你好,这个是多目标特征选择问题,有两个目标,其中一个是特征数,因此有一个是要求特征总和,如果要换成其他网络,请查看输入的接口,输入进分类器也就是你的BP是种群或者个体的编码也就是X值。

  5. 大佬,上面给的程序选择特征的个数是随机的,如果想要人为给定特征选择的个数范围,比如说在2到5之间,但最终得到的pareto前沿图只出现了个数为2或3的点,并不能显示出所有的点(如个数为4,5的点就缺失了),您知道为什么么?

  6. 麻烦大佬给一下这个例子的所有代码可以么?(虽说是只有主函数和评价函数做了大的修改,其他nsga通用算法也会多少有一些变化)好人一生平安!好人一生平安!好人一生平安!

  7. 请问可以给一下Parkinson.mat文件吗?用自己下载的mat文件各种出错,感激不尽

  8. 评价函数中function f = evaluate_objective(x, M, V, i)的是输入的什么啊?因为在上个NSGA2代码里面,评价函数是function f = evaluate_objective(x, M, V),这里没有i,所以我有点不明白,还望老师指导一下,谢谢!!

  9. 能麻烦大神给一下你的Parkinson.mat文件吗?用自己下载的mat文件各种出错,感激不尽

回复 Star取消回复

您的电子邮箱地址不会被公开。 必填项已用*标注