%
% Copyright (c) 2015, Yarpiz (www.yarpiz.com)
% All rights reserved. Please read the "license.txt" for license terms.
%
% Project Code: YPML122
% Project Title: Feature Selection using GA (Variable Number of Features)
% Publisher: Yarpiz (www.yarpiz.com)
%
% Developer: S. Mostapha Kalami Heris (Member of Yarpiz Team)
%
% Contact Info: sm.kalami@gmail.com, info@yarpiz.com
%
clc;
clear;
close all;
%% Problem Definition
data=LoadData();
CostFunction=@(s) FeatureSelectionCost(s,data); % Cost Function
nVar=data.nx; % Number of Decision Variables
VarSize=[1 nVar]; % Decision Variables Matrix Size
%% GA Parameters
MaxIt=10; % Maximum Number of Iterations
nPop=10; % Population Size
pc=0.7; % Crossover Percentage
nc=2*round(pc*nPop/2); % Number of Offsprings (Parnets)
pm=0.3; % Mutation Percentage
nm=round(pm*nPop); % Number of Mutants
mu=0.1; % Mutation Rate
beta=8; % Selection Pressure
%% Initialization
disp('Initialization ...');
empty_individual.Position=[];
empty_individual.Cost=[];
empty_individual.Out=[];
pop=repmat(empty_individual,nPop,1);
for i=1:nPop
% Initialize Position
pop(i).Position=randi([0 1],VarSize);
% Evaluation
[pop(i).Cost, pop(i).Out]=CostFunction(pop(i).Position);
end
% Sort Population
Costs=[pop.Cost];
[Costs, SortOrder]=sort(Costs);
pop=pop(SortOrder);
% Store Best Solution
BestSol=pop(1);
% Array to Hold Best Cost Values
BestCost=zeros(MaxIt,1);
% Store Cost
WorstCost=pop(end).Cost;
%% Main Loop
for it=1:MaxIt
disp(['Starting Iteration ' num2str(it) ' ...']);
P=exp(-beta*Costs/WorstCost);
P=P/sum(P);
% Crossover
popc=repmat(empty_individual,nc/2,2);
for k=1:nc/2
% Select Parents Indices
i1=RouletteWheelSelection(P);
i2=RouletteWheelSelection(P);
% Select Parents
p1=pop(i1);
p2=pop(i2);
% Apply Crossover
[popc(k,1).Position, popc(k,2).Position]=Crossover(p1.Position,p2.Position);
% Evaluate Offsprings
[popc(k,1).Cost, popc(k,1).Out]=CostFunction(popc(k,1).Position);
[popc(k,2).Cost, popc(k,2).Out]=CostFunction(popc(k,2).Position);
end
popc=popc(:);
% Mutation
popm=repmat(empty_individual,nm,1);
for k=1:nm
% Select Parent
i=randi([1 nPop]);
p=pop(i);
% Apply Mutation
popm(k).Position=Mutate(p.Position,mu);
% Evaluate Mutant
[popm(k).Cost, popm(k).Out]=CostFunction(popm(k).Position);
end
% Create Merged Population
pop=[pop
popc
popm]; %#ok
% Sort Population
Costs=[pop.Cost];
[Costs, SortOrder]=sort(Costs);
pop=pop(SortOrder);
% Update Worst Cost
WorstCost=max(WorstCost,pop(end).Cost);
% Truncation
pop=pop(1:nPop);
Costs=Costs(1:nPop);
% Store Best Solution Ever Found
BestSol=pop(1);
% Store Best Cost Ever Found
BestCost(it)=BestSol.Cost;
% Show Iteration Information
disp(['Iteration ' num2str(it) ': Best Cost = ' num2str(BestCost(it))]);
end
%% Results
figure;
plot(BestCost,'LineWidth',2);
ylabel('Cost');
没有合适的资源?快使用搜索试试~ 我知道了~
使用GA的二进制特征选择
共11个文件
m:10个
mat:1个
0 下载量 55 浏览量
2023-12-27
10:02:05
上传
评论
收藏 15KB RAR 举报
温馨提示
遗传算法(Genetic Algorithm,GA)是一种基于自然选择和遗传机制的优化算法,常被用于解决组合优化问题,如特征选择。在二进制特征选择中,每个候选特征子集都可以用一个二进制编码来表示,其中每一位对应一个特征是否被选中。以下是使用GA进行二进制特征选择的一般步骤: 编码:将特征选择问题转化为一个二进制编码的优化问题。假设有N个特征,可以用一个N位的二进制串来表示一个特征子集,其中每一位表示对应的特征是否被选中(1表示选中,0表示未选中)。 初始化种群:随机生成一定数量的二进制串作为初始种群。这些二进制串代表了不同的特征子集。 适应度函数:定义一个适应度函数来评估每个特征子集的好坏。这个适应度函数通常是根据某种性能指标(如分类准确率、回归误差等)来计算的,可以通过训练模型并在验证集上进行评估来得到。 选择:使用选择操作(如轮盘赌选择、竞赛选择等)根据每个特征子集的适应度值来选择父代。适应度值高的特征子集被选中的概率更大。 交叉:对选出的父代进行交叉操作,生成新的特征子集作为下一代种群的一部分。交叉操作可以使用单点交叉、多点交叉等方式。 变异:对新生成的特征子集进行变
资源推荐
资源详情
资源评论
收起资源包目录
01 Binary Feature Selection using GA.rar (11个子文件)
01 Binary Feature Selection using GA
RouletteWheelSelection.m 511B
Mutate.m 545B
FeatureSelectionCost.m 1KB
DoublePointCrossover.m 635B
CreateAndTrainANN.m 3KB
ga.m 3KB
Crossover.m 881B
LoadData.m 617B
UniformCrossover.m 554B
bodyfat_data.mat 8KB
SinglePointCrossover.m 569B
共 11 条
- 1
资源评论
嵌入式职场
- 粉丝: 4w+
- 资源: 44
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 技术面试最后反问面试官的话 校招面试非技术问题有哪些 非技术问题如何回答.png
- NB-IOT-BC26全网通模块Altium+ CADENCE +PADS三种格式(原理图SCH+PCB封装库)文件.zip
- 基于微信小程序开发的校园失物招领系统源码毕业设计(优质项目源码).zip
- 词向量是一种将自然语言中的单词转换为数值向量的技术,它能够捕捉词义和上下文信息
- nmap与masscan的简单使用
- MyBatis动态SQL.pdf
- 基于stm32单片机protues仿真的温湿度控制系统设计(仿真图、源代码)
- 词向量:自然语言处理的基石
- mybatis动态sql
- 40G微信小程序开发教程(工具插件+视频教程)
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功