Hello Mat

 找回密码
 立即注册
查看: 8140|回复: 5

AdaBoost分类识别

[复制链接]

1294

主题

1520

帖子

110

金钱

管理员

Rank: 9Rank: 9Rank: 9

积分
22633
发表于 2017-6-10 17:12:58 | 显示全部楼层 |阅读模式
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
  1. function [ada_train, ada_test]= adaboost(Xtrain, Ytrain, Xtest)
  2. % AdaBoost function
  3. % (X_train-> input: training set)
  4. % (Y_train-> target)
  5. % (Xtest-> input: testing set)
  6. % (ada_train-> label: training set)
  7. % (ada_test-> label: testing set)

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

  11. N=size(Xtrain,1);   % 训练样本个数
  12. a=[Xtrain Ytrain];  % 【训练样本输入+输出】

  13. % 初始化
  14. D=(1/N)*ones(N,1);
  15. Dt=[];
  16. h_=[];

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

  19. for T=1:Classifiers
  20.     p_min=min(D);
  21.     p_max=max(D);
  22.     k=1;
  23.     for i=1:length(D)
  24.         p = (p_max-p_min)*rand(1) + p_min;  % 在[p_min,p_max]内随机产生
  25.         if D(i)>=p   % 权值大于p值
  26.             d(k,:)=a(i,:);
  27.             k=k+1;
  28.         end
  29.         t=randi(size(d,1));
  30.         Dt=[Dt; d(t,:)];
  31.     end
  32.    
  33.     X=Dt(:,1:end-1);
  34.     Y=Dt(:,end);
  35.    
  36.     if T==1
  37.         % gda
  38.         gda_in=fitcdiscr(X, Y);
  39.         gda_out=predict(gda_in, X);
  40.         h=gda_out;
  41.         Dt=[];  % 置空
  42.     end
  43.    
  44.     if T==2
  45.         % knn with (30 Nearest Neighbour)
  46.         knn_in=fitcknn(X,Y,'NumNeighbors',30);
  47.         knn_out=predict(knn_in, X);
  48.         h = knn_out;
  49.         Dt=[];  % 置空
  50.     end
  51.    
  52.     h_=[h_ h];  % 存储不同弱分类器的结果
  53.    
  54.     % weighted error --- 不同分类器预测错误的样本权值和
  55.     for i=1:length(Y)
  56.         if (h_(i, T)~=Y(i))
  57.             eps(T)=eps(T)+D(i,:);
  58.         end  
  59.     end
  60.    
  61.     % Hypothesis weight --- 不同分类器的权值
  62.     alpha(T)=0.5*log((1-eps(T))/eps(T));
  63.    
  64.     % Update weights --- 不同样本的权值
  65.     D=D.*exp((-1).*Y.*alpha(T).*h);
  66.     D=D./sum(D);  % 归一化
  67.    
  68. end

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

  73. % for test set
  74. Htest(:,1)=predict(gda_in, Xtest);
  75. Htest(:,2)=predict(knn_in, Xtest);
  76. ada_test(:,1)=sign(Htest*alpha');
复制代码
主程序如下:
  1. % Adaboost(GDA, KNN)
  2. Xtrain = X;
  3. Ytrain = Y;
  4. iter = 1;
  5. fm_=[];
  6. for iter = 1:50
  7.     [~, ada_test(:,iter)] = adaboost(X, Y, Xtest);
  8.     fm_ = [fm_; confusion_mat(Ytest, ada_test(:,iter))];
  9. end
  10. [fm, iter] = max(fm_);
  11. ada_out = ada_test(:,iter);
  12. [Fmeasure(3), Accuracy(3)] = confusion_mat(Ytest,ada_out);
  13. Fmeasure_Adaboost = Fmeasure(3)
  14. 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





算法QQ  3283892722
群智能算法链接http://halcom.cn/forum.php?mod=forumdisplay&fid=73
回复

使用道具 举报

0

主题

3

帖子

9

金钱

新手上路

Rank: 1

积分
12
发表于 2017-9-30 17:09:03 | 显示全部楼层
楼主,要是多分类,怎么改这个程序啊
回复 支持 反对

使用道具 举报

1294

主题

1520

帖子

110

金钱

管理员

Rank: 9Rank: 9Rank: 9

积分
22633
 楼主| 发表于 2017-9-30 22:43:14 | 显示全部楼层
pengsky 发表于 2017-9-30 17:09
楼主,要是多分类,怎么改这个程序啊

那就直接改分类数啊
算法QQ  3283892722
群智能算法链接http://halcom.cn/forum.php?mod=forumdisplay&fid=73
回复 支持 反对

使用道具 举报

0

主题

3

帖子

9

金钱

新手上路

Rank: 1

积分
12
发表于 2017-10-1 21:35:37 | 显示全部楼层
那个confusion_mat程序,只对分两类得进行预测,那么对于多分类,confusion_mat那个预测分类怎么改进?
回复 支持 反对

使用道具 举报

0

主题

3

帖子

9

金钱

新手上路

Rank: 1

积分
12
发表于 2017-10-2 11:17:03 | 显示全部楼层
多分类,改了分类数,那么主程序的confusion_mat的怎么改呀
回复 支持 反对

使用道具 举报

1294

主题

1520

帖子

110

金钱

管理员

Rank: 9Rank: 9Rank: 9

积分
22633
 楼主| 发表于 2017-10-8 14:06:39 | 显示全部楼层
pengsky 发表于 2017-10-1 21:35
那个confusion_mat程序,只对分两类得进行预测,那么对于多分类,confusion_mat那个预测分类怎么改进?

你仔细看看输入是什么吧!
算法QQ  3283892722
群智能算法链接http://halcom.cn/forum.php?mod=forumdisplay&fid=73
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Python|Opencv|MATLAB|Halcom.cn ( 蜀ICP备16027072号 )

GMT+8, 2024-4-23 23:15 , Processed in 0.225346 second(s), 24 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表