【特征选择】基于二进制粒子群算法的特征选择方法(GRNN广义回归神经网络分类)【Matlab代码#32】


【可更换其他算法,获取资源请见文章第6节:资源获取】


1. 特征选择问题

特征选择是指从原始数据中选择最具有代表性和有用性的特征,以用于建模和预测任务。它是机器学习和数据挖掘中的重要步骤,可以提高模型的性能和解释能力,并降低计算成本和过拟合的风险。

特征选择的方法可以分为三大类:过滤方法(Filter methods)、包装方法(Wrapper methods)和嵌入方法(Embedded methods)。

过滤方法是根据某种准则或评估指标对特征进行评估和排序,然后选择排名靠前的特征。常用的过滤方法包括相关系数、信息增益、方差选择等。这些方法独立于具体的学习算法,计算效率高,但不能考虑特征子集之间的相互关系。

包装方法是利用机器学习算法对不同的特征子集进行评估,以确定最佳的特征子集。这类方法通常以模型性能为评价指标,例如递归特征消除(Recursive Feature Elimination, RFE)和遗传算法等。包装方法的计算代价较高,但能够考虑特征之间的相互关系。本文采用的就是包装方法

嵌入方法是指在学习算法中直接嵌入特征选择过程,通过学习过程自动选择最佳的特征。常见的嵌入方法包括L1正则化(L1 Regularization)和决策树的剪枝等。

选择适合的特征选择方法需要考虑数据的特点、问题的要求以及计算资源的限制。常用的特征选择工具包括scikit-learn(Python)、Weka(Java)和caret(R)等,它们提供了多种特征选择方法的实现。

需要注意的是,特征选择是一个迭代的过程,需要根据实际情况不断尝试和调整。在特征选择之前,应该对数据进行预处理、探索性数据分析和特征工程等步骤,以保证特征选择的效果和模型的可靠性。

2. 二进制粒子群算法

在这里插入图片描述
在这里插入图片描述
二进制粒子群算法(Binary Particle Swarm Optimization,BPSO)是一种基于群体智能的优化算法,用于解决二进制编码的优化问题。它是粒子群算法(Particle Swarm Optimization,PSO)的一种变体,适用于离散型优化问题。

在二进制粒子群算法中,每个粒子表示一个解向量,而解向量中的每个维度都是二进制值,通常用0和1表示。粒子群算法通过模拟鸟群中鸟的觅食行为,来搜索最优解。每个粒子根据自身历史最优解和群体最优解的信息,更新自己的位置和速度,并通过适应度函数评估自身的解的质量。

3. 广义回归神经网络(GRNN)分类

在这里插入图片描述
在这里插入图片描述

图1 广义回归神经网络结构图

在这里插入图片描述
在这里插入图片描述
GRNN数据分类过程如下:

  • 输入训练数据集,包括特征向量和对应的类别标签。
  • 对每个训练样本,计算其与测试样本之间的距离。常用的距离度量方法包括欧氏距离、曼哈顿距离等。
  • 基于距离计算每个训练样本的权重,通常使用高斯核函数来计算权重。高斯核函数将距离转换为权重,越近的样本权重越高,越远的样本权重越低。
  • 对每个类别的样本,根据其权重进行加权平均。权重越高的样本对应的类别影响越大。
  • 将测试样本划分到具有最高加权平均值的类别中。

4. 部分代码展示

%% GRNN 广义回归神经网络 classification
all_select=ones(1,dim);
[predictResult,accuracy,objval]=GRNN(all_select,trainData ,testData,trainlabel,testlabel,labels,dim);

%% PSO optimisation for feature selection
SearchAgents_no=30; % Number of search agents
Max_iteration=30; % Maximum numbef of iterations

% 二进制粒子群算法
[Target_score,Target_pos,PSO_cg_curve]=BPSO(SearchAgents_no,Max_iteration,dim,trainData,testData,trainlabel,testlabel,labels);                                        

% final evaluation for PSO tuned selected features
[predictedLables_PSO,accuracy_PSO,~]=GRNN(Target_pos,trainData,testData,trainlabel,testlabel,labels,dim);                                                               

%%
% plot for Predicted classes
figure(1)
plot(testlabel,'ko','markersize', 8)
hold on
plot(predictResult,'b*','markersize', 8)
xlabel('测试集样本');
ylabel('类别标签');
legend('实际测试集分类','全部特征下GRNN预测分类');
title("全部特征下分类准确率:"+ num2str(100*accuracy)+"%");
axis tight

figure(2)
plot(testlabel,'ko','markersize', 8)
hold on
plot(predictedLables_PSO,'r*','markersize', 8)
xlabel('测试集样本');
ylabel('类别标签');
legend('实际测试集分类','基于PSO的特征选择后GRNN预测分类');
title("特征选择后分类准确率:"+ num2str(100*accuracy_PSO)+ "%");
axis tight

figure(3)
plot(PSO_cg_curve(2:end),'r')
xlabel('适应度值');
ylabel('迭代次数');
title('基于PSO的特征选择优化曲线');

delete_index = find(Target_pos==0);
remain_index = find(Target_pos~=0);
disp(['该数据集包含',num2str(numel(Target_pos)),'个特征维度', ]);
disp(['PSO优化后选择舍弃的特征维度序号为:', num2str(delete_index)]);
disp(['PSO优化后选择保留的特征维度序号为:', num2str(remain_index)]);

5. 仿真结果展示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

6. 资源获取

可以获取完整代码资源。

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

天`南

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值