问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

谁能帮忙帮下面这个Adaboost算法的matlab代码加个详细注释

发布网友 发布时间:2023-06-14 19:15

我来回答

1个回答

热心网友 时间:2024-05-30 16:40

clear all
clc
tr_n=200; %the population of the train set
te_n=200; %the population of the test set
weak_learner_n=20; %the population of the weak_learner
tr_set=[1,5;2,3;3,2;4,6;4,7;5,9;6,5;6,7;8,5;8,8];
te_se=[1,5;2,3;3,2;4,6;4,7;5,9;6,5;6,7;8,5;8,8];
tr_labels=[2,2,1,1,2,2,1,2,1,1];
te_labels=[2,2,1,1,2,2,1,2,1,1];
figure;
subplot(2,2,1);
hold on;axis square;
indices=tr_labels==1;
plot(tr_set(indices,1),tr_set(indices,2),'b*');
indices=~indices;
plot(tr_set(indices,1),tr_set(indices,2),'r*');
title('Training set');
subplot(2,2,2);
hold on;axis square;
indices=te_labels==1;
plot(te_set(indices,1),te_set(indices,2),'b*')3
;
indices=~indices;
plot(te_set(indices,1),te_set(indices,2),'r*');
title('Training set');
% Training and testing error rates
tr_error=zeros(1,weak_learner_n);
te_error=zeros(1,weak_learner_n);
for i=1:weak_learner_n
adaboost_model=adaboost_tr(@threshold_tr,@threshold_te,tr_set,tr_labels,i);
第 1 页
无标题
[L_tr,hits_tr]=adaboost_te(adaboost_model,@threshold_te,te_set,te_labels);
tr_error(i)=(tr_n-hits_tr)/tr_n;
[L_te,hits_te]=adaboost_te(adaboost_model,@threshold_te,te_set,te_labels);
te_error(i)=(te_n-hits_te)/te_n;
end
subplot(2,2,3);
plot(1:weak_learner_n,tr_error);
axis([1,weak_learner_n,0,1]);
title('Training Error');
xlabel('weak classifier number');
ylabel('error rate');
grid on;
subplot(2,2,4);axis square;
plot(1:weak_learner_n,te_error);
axis([1,weak_learner_n,0,1]);
title('Testing Error');
xlabel('weak classifier number');
ylabel('error rate');
grid on;
这里需要另外分别撰写两个函数,其中一个为生成adaboost模型的训练函数,另外为测试测
试样本的测试函数。代码如下:
function
adaboost_model=adaboost_tr(tr_func_handle,te_func_handle,train_set,labels,no_of_
hypothesis)
% 训练函数
adaboost_model = struct('weights',zeros(1,no_of_hypothesis),...
'parameters',[]); %cell(1,no_of_hypothesis));
sample_n = size(train_set,1);
samples_weight = ones(sample_n,1)/sample_n;
for turn=1:no_of_hypothesis
adaboost_model.parameters{turn} =
tr_func_handle(train_set,samples_weight,labels);
[L,hits,error_rate] = te_func_handle(adaboost_model.parameters{turn},...
train_set,samples_weight,labels);
if(error_rate==1)
error_rate=1-eps;
elseif(error_rate==0)
error_rate=eps;
end
% The weight of the turn-th weak classifier
adaboost_model.weights(turn) = log10((1-error_rate)/error_rate);
C=likelihood2class(L);
t_labeled=(C==labels); % true labeled samples
% Importance of the true classified samples is decreased for the next weak
classifier
samples_weight(t_labeled) = samples_weight(t_labeled)*...
((error_rate)/(1-error_rate));
% Normalization
第 2 页
无标题
samples_weight = samples_weight/sum(samples_weight);
end
% Normalization
adaboost_model.weights=adaboost_model.weights/sum(adaboost_model.weights);
-------------
function [L,hits]=adaboost_te(adaboost_model,te_func_handle,test_set,...
true_labels)
%测试函数
hypothesis_n=length(adaboost_model.weights);
sample_n=size(test_set,1);
class_n=length(unique(true_labels));
temp_L=zeros(sample_n,class_n,hypothesis_n);
for i=1:hypothesis_n
[temp_L(:,:,i),hits,error_rate]=te_func_handle(adaboost_model.parameters{i},...
test_set,ones(sample_n,1),true_labels);
temp_L(:,:,i)=temp_L(:,:,i)*adaboost_model.weights(i);
end
L=sum(temp_L,3);
hits=sum(likelihood2class(L)==true_labels);
-------
其中上面函数由于体积太大,另外还需要分别撰写两个阈值函数和一个隶属分配函数。
function model=threshold_tr(train_set,sample_weights,labels)
% 训练阈值函数
model=struct('min_error',[],'min_error_thr',[],'pos_neg',[],'dim',[]);
sample_n=size(train_set,1);
min_error=sum(sample_weights);
min_error_thr=0;
pos_neg='pos';
% for each dimension
for dim=1:size(train_set,2)
sorted=sort(train_set(:,dim),1,'ascend');
% for each interval in the specified dimension
for i=1:(sample_n+1)
if(i==1)
thr=sorted(1)-0.5;
elseif(i==sample_n+1)
thr=sorted(sample_n)+0.5;
else
thr=(sorted(i-1)+sorted(i))/2;
end
ind1=train_set(:,dim)<thr;
ind2=~ind1;
tmp_err=sum(sample_weights((labels.*ind1)==2))+sum(sample_weights((labels.*ind2)
==1));
if(tmp_err<min_error)
第 3 页
无标题
min_error=tmp_err;
min_error_thr=thr;
pos_neg='pos';
model.dim=dim;
end
ind1=train_set(:,dim)<thr;
ind2=~ind1;
tmp_err=sum(sample_weights((labels.*ind1)==1))+sum(sample_weights((labels.*ind2)
==2));
if(tmp_err<min_error)
min_error=tmp_err;
min_error_thr=thr;
pos_neg='neg';
model.dim=dim;
end
end
end
model.min_error=min_error;
model.min_error_thr=min_error_thr;
model.pos_neg=pos_neg;
function
[L,hits,error_rate]=threshold_te(model,test_set,sample_weights,true_labels)
% 测试阈值函数
feat=test_set(:,model.dim);
if(strcmp(model.pos_neg,'pos'))
ind=(feat>model.min_error_thr)+1;
else
ind=(feat<model.min_error_thr)+1;
end
hits=sum(ind==true_labels);
error_rate=sum(sample_weights(ind~=true_labels));
L=zeros(length(feat),2);
L(ind==1,1)=1;
L(ind==2,2)=1;
function classes=likelihood2class(likelihoods)
% 隶属分配函数
[sample_n,class_n] = size(likelihoods);
maxs = (likelihoods==repmat(max(likelihoods,[],2),[1,class_n]));
classes=zeros(sample_n,1);
for i=1:sample_n
classes(i) = find(maxs(i,:),1);
end
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
医生你好 我脸上跟额头上面长了很多小粉刺 请问这是什么原因引起的 要... 世界上到底是先有的鸡还是先有的蛋 请问是先有蛋,还是先有鸡? Excel怎么设置行高并且垂直 晚上梦见一条又长又小的青蛇追着咬我最后被我爸爸打死了代表什么... 专业技能怎么填我来教你 QQ空间曾经有一个左右接东西 小游戏叫什么名字 帽子先生接东西游戏介绍 趣味卡车接东西游戏介绍 怀孕50天B超的表现 以奉先帝之遗意也的意思以奉先帝之遗意也的意思是什么 茄秧育苗腐烂是什么原因 有机硅防水剂的介绍 OFDM基带调制系统的实现。。求C语言程序... 重装系统时出现获取硬盘分区失败,可能缺少硬盘驱动,咋回事? 暮光之城4贝拉是不是真的又胖变瘦再变胖? 暮光之城女主怀孕时,瘦了多少斤 暮光之城4贝拉那么瘦 暮光之城破晓上里面贝拉是怎么瘦成那个样的??? 为什么暮光之城4 贝拉暴瘦呢? 暮光之城中,贝拉怀孕时那么瘦是什么原因? 2023投资小利润高的小生意有哪些 2023年做点什么小生意比较赚钱 不敢苟同是不是贬义词 苟同是贬义还是褒义 阳台壁挂太阳能优点是什么阳台壁挂太阳能选购注意什么 阳台壁挂式太阳能热水器怎么用阳台壁挂式太阳能热水器工作原理_百度知 ... 600418是什么股票? All rivers run into the sea .英语翻译? ...the fish wound its way slowly into the sea energycell中底是什么材料 长城筑起民族魂什么意思 冰心杯民族魂的意思 ...岳飞魂,是中华民族的精神代表,也就是民族魂。 怎么理解 在技术文中把文件的结局或最精彩的部分放在开头的写法叫做什么 当代书法家兰寿云字,有没有收藏价值 梦见黑兰寿的预兆 各花入各眼何必问来人的佳句赏析 农商行整存整取两年利息是多少? 二建挂靠先结工资吗 求翻译下面的 求翻译下面的锯子 PHP如何模拟安卓设备,请求API接口的数据? 广东话&quot;佃九&quot;是什么意思 颠狗是哪个? 正牌颠狗是什么意思 正牌颠狗乱吠一通是什么意思 狗颠*** 是什么意思? 佛山碧桂园总部几点上班 如果得到去碧桂园集团上班的机会,要去嘛?