Halcom 发表于 2017-6-10 17:12:58

AdaBoost分类识别

AdaBoost分类识别:

百度网盘视频链接:http://pan.baidu.com/s/1o8odqPk
录制的视频是算法底层原理讲解,底层代码实现,方便大家真正掌握算法实质,开发出更加出色的算法。录制视频的初衷是:避免读者朋友利用大把时间学习已有常见算法,本系列视频旨在让读者朋友快速深入了解这些常见算法原理,有更多的时间去研究更加高大上算法(价值)。

具体链接在halcom.cn论坛,联系人QQ:3283892722
该论坛是一个学习交流平台,我会逐一的和大家分享学习。
欢迎大家录制视频,并提交给我,我来设置视频,你可在论坛进行打赏分享。
视频专用播放器:http://halcom.cn/forum.php?mod=viewthread&tid=258&extra=page%3D1

使用环境:Win7-32bit-matlab2014a-CPU
function = adaboost(Xtrain, Ytrain, Xtest)
% AdaBoost function
% (X_train-> input: training set)
% (Y_train-> target)
% (Xtest-> input: testing set)
% (ada_train-> label: training set)
% (ada_test-> label: testing set)

% Choosen Weak classifiers:
% 1. GDA
% 2. knn (NumNeighbors = 30)

N=size(Xtrain,1);   % 训练样本个数
a=;% 【训练样本输入+输出】

% 初始化
D=(1/N)*ones(N,1);
Dt=[];
h_=[];

Classifiers=2;   % GDA+KNN
eps=zeros(Classifiers,1);% 每个弱分类器的误差

for T=1:Classifiers
    p_min=min(D);
    p_max=max(D);
    k=1;
    for i=1:length(D)
      p = (p_max-p_min)*rand(1) + p_min;% 在内随机产生
      if D(i)>=p   % 权值大于p值
            d(k,:)=a(i,:);
            k=k+1;
      end
      t=randi(size(d,1));
      Dt=;
    end
   
    X=Dt(:,1:end-1);
    Y=Dt(:,end);
   
    if T==1
      % gda
      gda_in=fitcdiscr(X, Y);
      gda_out=predict(gda_in, X);
      h=gda_out;
      Dt=[];% 置空
    end
   
    if T==2
      % knn with (30 Nearest Neighbour)
      knn_in=fitcknn(X,Y,'NumNeighbors',30);
      knn_out=predict(knn_in, X);
      h = knn_out;
      Dt=[];% 置空
    end
   
    h_=;% 存储不同弱分类器的结果
   
    % weighted error --- 不同分类器预测错误的样本权值和
    for i=1:length(Y)
      if (h_(i, T)~=Y(i))
            eps(T)=eps(T)+D(i,:);
      end
    end
   
    % Hypothesis weight --- 不同分类器的权值
    alpha(T)=0.5*log((1-eps(T))/eps(T));
   
    % Update weights --- 不同样本的权值
    D=D.*exp((-1).*Y.*alpha(T).*h);
    D=D./sum(D);% 归一化
   
end

% final vote
H(:,1)=predict(gda_in, Xtrain);
H(:,2)=predict(knn_in, Xtrain);
ada_train(:,1)=sign(H*alpha');

% for test set
Htest(:,1)=predict(gda_in, Xtest);
Htest(:,2)=predict(knn_in, Xtest);
ada_test(:,1)=sign(Htest*alpha');主程序如下:% Adaboost(GDA, KNN)
Xtrain = X;
Ytrain = Y;
iter = 1;
fm_=[];
for iter = 1:50
    [~, ada_test(:,iter)] = adaboost(X, Y, Xtest);
    fm_ = ;
end
= max(fm_);
ada_out = ada_test(:,iter);
= confusion_mat(Ytest,ada_out);
Fmeasure_Adaboost = Fmeasure(3)
Accuracy_Adaboost = Accuracy(3)注:
(1)输入参数,例如:X是320x2的矩阵、Y是320x1的矩阵、Xtest是81x2的矩阵,Ytest是81x1的矩阵;
(2)混淆矩阵confusion_mat的计算方法参考:http://halcom.cn/forum.php?mod=v ... ge=1&extra=#pid3748





pengsky 发表于 2017-9-30 17:09:03

楼主,要是多分类,怎么改这个程序啊

Halcom 发表于 2017-9-30 22:43:14

pengsky 发表于 2017-9-30 17:09
楼主,要是多分类,怎么改这个程序啊

那就直接改分类数啊

pengsky 发表于 2017-10-1 21:35:37

那个confusion_mat程序,只对分两类得进行预测,那么对于多分类,confusion_mat那个预测分类怎么改进?

pengsky 发表于 2017-10-2 11:17:03

多分类,改了分类数,那么主程序的confusion_mat的怎么改呀

Halcom 发表于 2017-10-8 14:06:39

pengsky 发表于 2017-10-1 21:35
那个confusion_mat程序,只对分两类得进行预测,那么对于多分类,confusion_mat那个预测分类怎么改进?

你仔细看看输入是什么吧!
页: [1]
查看完整版本: AdaBoost分类识别