%[2009]-"Text feature selection using ant colony optimization"
% (9/12/2020)
function ACO = jAntColonyOptimizationSVM(feat,label,opts)
% Parameters
tau = 1; % pheromone value
eta = 1; % heuristic desirability
alpha = 1; % control pheromone
beta = 0.1; % control heuristic
rho = 0.2; % pheromone trail decay coefficient
if isfield(opts,'N'), N = opts.N; end
if isfield(opts,'T'), max_Iter = opts.T; end
if isfield(opts,'tau'), tau = opts.tau; end
if isfield(opts,'alpha'), alpha = opts.alpha; end
if isfield(opts,'beta'), beta = opts.beta; end
if isfield(opts,'rho'), rho = opts.rho; end
if isfield(opts,'eta'), eta = opts.eta; end
% Objective function
fun = @jFitnessFunctionSVM;
% Number of dimensions
dim = size(feat,2);
% Initial Tau & Eta
tau = tau * ones(dim,dim);
eta = eta * ones(dim,dim);
% Pre
fitG = inf;
fit = zeros(1,N);
curve = inf;
t = 1;
% Iterations
while t <= max_Iter
% Reset ant
X = zeros(N,dim);
for i = 1:N
% Random number of features
num_feat = randi([1,dim]);
% Ant start with random position
X(i,1) = randi([1,dim]);
k = [];
if num_feat > 1
for d = 2:num_feat
% Start with previous tour
k = [k(1:end), X(i, d-1)];
% Edge/Probability Selection (2)
P = (tau(k(end),:) .^ alpha) .* (eta(k(end),:) .^ beta);
% Set selected position = 0 probability (2)
P(k) = 0;
% Convert probability (2)
prob = P ./ sum(P(:));
% Roulette Wheel selection
route = jRouletteWheelSelection(prob);
% Store selected position to be next tour
X(i,d) = route;
end
end
end
% Binary
X_bin = zeros(N,dim);
for i = 1:N
% Binary form
ind = X(i,:);
ind(ind == 0) = [];
X_bin(i,ind) = 1;
end
% Fitness
for i = 1:N
% Fitness
fit(i) = fun(feat,label,X_bin(i,:),opts);
% Global update
if fit(i) < fitG
Xgb = X(i,:);
fitG = fit(i);
end
end
%---// [Pheromone update rule on tauK] //
tauK = zeros(dim,dim);
for i = 1:N
% Update Phromones
tour = X(i,:);
tour(tour == 0) = [];
% Number of features
len_x = length(tour);
tour = [tour(1:end), tour(1)];
for d = 1:len_x
% Feature selected on graph
x = tour(d);
y = tour(d + 1);
% Update delta tau k on graph (3)
tauK(x,y) = tauK(x,y) + (1 / (1 + fit(i)));
end
end
%---// [Pheromone update rule on tauG] //
tauG = zeros(dim,dim);
tour = Xgb;
tour(tour == 0) = [];
% Number of features
len_g = length(tour);
tour = [tour(1:end), tour(1)];
for d = 1:len_g
% Feature selected on graph
x = tour(d);
y = tour(d + 1);
% Update delta tau G on graph
tauG(x,y) = 1 / (1 + fitG);
end
%---// Evaporate pheromone // (4)
tau = (1 - rho) * tau + tauK + tauG;
% Save
curve(t) = fitG;
fprintf('\nIteration %d Best (ACO)= %f',t,curve(t))
t = t + 1;
end
% Select features based on selected index
Sf = Xgb;
Sf(Sf == 0) = [];
sFeat = feat(:,Sf);
% Store results
ACO.sf = Sf;
ACO.ff = sFeat;
ACO.nf = length(Sf);
ACO.s = curve;
ACO.f = feat;
ACO.l = label;
end
%// Roulette Wheel Selection //
function Index = jRouletteWheelSelection(prob)
% Cummulative summation
C = cumsum(prob);
% Random one value, most probability value [0~1]
P = rand();
% Roulette wheel
for i = 1:length(C)
if C(i) > P
Index = i;
break;
end
end
end
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
智能优化特征选择-基于ACO蚁群优化的特征选择分类算法KNN和SVM分类器(matlab程序) 1.程序功能已完成调试,用户可以通过一键操作生成图形和评价指标。 2.数据输入以Excel格式保存,只需更换文件,即可运行以获得个人化的实验结果。 3.代码中包含详细注释,具有较强的可读性,特别适合初学者和新手。 4.在实际数据集上的效果可能较差,需要对模型参数进行微调。
资源推荐
资源详情
资源评论
收起资源包目录
基于蚁群优化的特征选择分类算法.zip (11个子文件)
基于蚁群优化的特征选择分类算法
jFitnessFunctionSVM.m 1KB
data.xls 215KB
jAntColonyOptimization.m 4KB
jfs.m 397B
jAntColonyOptimizationSVM.m 4KB
ACO_KNN.m 3KB
jsvc.m 1KB
jknn.m 958B
auc.m 752B
jFitnessFunction.m 1KB
ACO_SVM.m 3KB
共 11 条
- 1
资源评论
机器不会学习CL
- 粉丝: 3169
- 资源: 71
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 茶文化推广系统&java&基于spingboot茶文化推广系统设计与实现
- 144200000.xlsx
- spreadjs添加水印
- 中医药命名实体提取数据集
- 基于springboot+vue的音乐播放系统设计与实现(毕业论文+PPT)
- 基于net8的跨平台高性能IOT边缘采集网关,提供底层PLC通讯库,通讯调试软件等
- Redhat切换其他源
- 轻量级物联网开源平台,6分钟快速部署,千万级设备承载、电信级稳定性 物模型-规则引擎-数据通道-组态页面全流程低代码开发
- 基于协同过滤算法的springboot+vue的煤矿员工健康管理系统(springboot+vue+mysql+说明文档.zip
- GB2312编码,讲解,字母,数字,汉字
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功