本文主要是介绍基于麻雀搜索算法的同步优化特征选择 - 附代码,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
基于麻雀搜索算法的同步优化特征选择 - 附代码
文章目录
- 基于麻雀搜索算法的同步优化特征选择 - 附代码
- 1.数据集
- 2.SVM模型建立
- 3.麻雀搜索算法同步优化特征选择
- 4.测试结果
- 5.参考文献:
- 6.Matlab代码
摘要:针对传统支持向量机在封装式特征选择中分类效果差、子集选取冗余、计算性能易受核函数参数影响的不足, 利用麻雀优化算法对其进行同步优化。
1.数据集
wine 数据的来源是 UCI 数据库 , 记录的是在意大利同一区域里三种不同品种的葡萄酒的化学成分分析,数据里含有 178 个样本,每个样本含有 13 个特征分量(化学成分〉,每个样本 的类别标签已给。将这 178 个样本的 50%作为训练集,另 50%作为测试集 ,用训练集对 SVM 进行训练可以得到分类模型,再用得到的模型对测试集进行类别标签预测。
整体数据存储在 chapter_WineClass. mat ,解释如下: classnumber = 3 ,记录类别数目;
wine, 178 × 13 的 一个 double 型的矩阵,记录 178 个样本的 13 个属性;
wine_ labels, 178 × 1的 一个 double 型的列向盘,记录 178 个样本各自的类别标签 。
2.SVM模型建立
首先需要从原始数据里把训练集和测试集提取出来,然后进行一定的预处理(必要的时候 还需要进行特征提取),之后用训练集对 SVM 进行训练,最后用得到的模型来预测测试集的分类标签。
其中数据预处理采用归一化处理:对训练集和测试集进行归一化预处理,采用的归一化映射如下 。
y = x − x m i n x m a x − x m i n (1) y = \frac{x-x_{min}}{x_{max} - x{min}} \tag{1} y=xmax−xminx−xmin(1)
3.麻雀搜索算法同步优化特征选择
在元启发式群智能算法优化计算时, 对于不同的优化问题, 种群个体代表不同含义. 针对特征选择问题而言, 其实质是二元优化问题, 优化后的选择特征结果表示仅限于“0”与“1”, 值“0”表示未选择该特征, 值“1”表示选择该特征. 优化选择特征时, 种群的个体解可视为一维向量, 每个维度的原始数据值与 0.5 比较, 大于等于 0.5 则选择该特征, 否则剔除该特征.特征选择可视为多个目标优化问题, 当分类结果中分类准确率较高, 选择特征子集个数较少时说明所得分类效果优秀. 在算法迭代过程中, 一般采用适应度函数来评估每个解的质量. 为了平衡分类准确率和特征子集个数这两个指标.因此,根据SVM分类器所得到的解的分类准确率与特征选择的所选特征子集个数, 设计适应度函数 如下所示:
f i t e n e s s = a r g m a x ( a c c u r a c y [ p r e d i c t ( t r a i n ) ] + a c c u r a c y [ p r e d i c t ( t e s t ) ] + 1 − r / N ) fiteness = argmax(accuracy[predict(train)]+accuracy[predict(test)] + 1 - r/N) fiteness=argmax(accuracy[predict(train)]+accuracy[predict(test)]+1−r/N)
其中accuracy[predict(train)],accuracy[predict(test)]分别为训练集和测试集(验证集)准确率,根据自身需要看是只用训练集准确率还是综合考虑验证集准确率,r为选择的特征个数,N为总特征个数。
由于麻雀是求极小值,将目标求最大值转换为求极小值
f i t n e s s = − f i t n e s s fitness = -fitness fitness=−fitness
4.测试结果
麻雀算法参数设置如下:
%% 麻雀参数设置
% 定义优化参数的个数,在该场景中,优化参数的个数为数据集特征总数 。
%目标函数
fobj = @(x) fun(x,train_wine_labels,train_wine,test_wine_labels,test_wine);
% 优化参数的个数 特征维度
dim = size(train_wine,2); %特征维度
% 优化参数的取值下限,[0,1],大于0.5为选择该特征,小于0.5为不选择该特征
lb = 0;
ub = 1;
%% 参数设置
pop =10; %麻雀数量
Max_iteration=50;%最大迭代次数
%% 优化
[Best_pos,Best_score,curve]=SSA(pop,Max_iteration,lb,ub,dim,fobj);
基础SVM训练集最终预测准确率:100
基础SVM测试集最终预测准确率:98.8764
SSA特征选择后SVM训练集最终预测准确率:100
SSA特征选择后SVM测试集最终预测准确率:100
总特征数:13
麻雀算法选择的特征总数:9
麻雀算法选择的特征(0为不选择,1为选择):1 0 0 1 1 1 1 0 0 1 1 1 1
从结果来看,经过特征选择后,特征数明显减少,由13维变为9维,而且训练集和测试集精度均能达到比较好的结果。
5.参考文献:
[1]贾鹤鸣,姜子超,李瑶.基于改进秃鹰搜索算法的同步优化特征选择[J/OL].控制与决策:1-9[2021-11-02].https://doi.org/10.13195/j.kzyjc.2020.1025.
6.Matlab代码
这篇关于基于麻雀搜索算法的同步优化特征选择 - 附代码的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!