PSO算法特征选择MATLAB实现(单目标)

本文共405个字,预计阅读时间需要2分钟。

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

简单PSO MATLAB代码及概述请见:https://www.omegaxyz.com/2018/01/17/matlab_pso/

下面是PSO进行特征选择的代码(注意:整体代码是单目标只优化错误率,注意训练使用的是林志仁SVM,数据集是Parkinson,可以到UCI上下载,训练的结果是错误率)

数据集分割为训练集和测试集:

 

主函数PSOFS:

特征选择评价函数(利用林志仁的SVM进行训练):

结果(选出的特征数和错误率):

 

22 位极客在 “PSO算法特征选择MATLAB实现(单目标)” 留下足迹

  1. 您好,出现这个问题是什么原因。
    索引超出矩阵维度。

    出错 pso>fitness (line 104)
    model = libsvmtrain(train_L,train_F(:,inmodel), ‘-s 0 -t 2 -c 1.2 -g 2.8’);

    出错 pso (line 32)
    p(i)=fitness(x(i,:),i);

  2. 您好,您这里有这篇的python代码吗,另外数据我从UCI上转化出现了问题,您能发我一份吗,邮箱是1159668795@qq.com,非常感谢!

  3. 程序:
    function divide_datasets()
    load Parkinson.mat
    dataMat = Parkinson_f;
    len=size(dataMat,1);
    运行后的结果:
    未定义函数或变量 ‘Parkinson_f’。

    出错 divide_datasets (line 5)
    dataMat = Parkinson_f;

    出错 NSGA2_FS (line 14)
    divide_datasets();

    您好,这个怎么解决呢?麻烦您啦

  4. 您好,对于您的数据集,我在UCI上找到了的是.data格式的,不明白你是怎么处理的,能方便发我一份数据集吗?感谢。我的邮箱是985197256@qq.com

  5. 你好,请问您这里定义的Parkinson_f、Parkinson_label是parkinson数据集中195*23个特征值与1*23个特征标签吗?(我做了上述猜测的处理,将Parkinson_label定义为1*23的数值矩阵,【1,2,…,23】,但在测试里与您的结果不太一样)如果方便的话,求同学您的数据集一份用来做相同的测试,我的邮箱是yaoxin903695971@vip.qq.com.

  6. 您好,我在uci上一直没找到数据集,您方便发我一份让我测试吗?如果方便,请发我邮箱:2429235999@qq.com

评论