BP_Adaboost 模型及其分类应用
一、BP_ Adaboost模型
Adaboost 算法的思想是合并多个“弱”分类器的输出以产生有效分类。其主要步骤为 :
(1)首先给出弱学习算法和样本空间(x, y) ,从样本空间中找出 m 组训练数据,每组训练数据的权重都是 1 /m。
(2)用弱学习算法迭代运算 T 次,每次运算后都按照分类结果更新训练数据权重分布,对于分类失败的训练个体赋予较大权重,下一次迭代运算时更加关注这些训练个体。弱分类器通过反复迭代得到一个分类函数序列 f1, ,f2 , … , fT ,每个分类函数赋予一个权重,分类结果越好的函数,其对应权重越大。
(3)T 次迭代之后,最终强分类函数 F 由弱分类函数加权得 。
BP_Adaboost 模型即把 BP 神经网络作为弱分类器,反复训练 BP 神经网络预测样本输出,通过 Adaboost 算法得到多个 BP 神经网络弱分类器组成的强分类器。
二、BP_ Adaboost模型分类算法流程
基于 BP_Adaboost 模型的 分类算法流程图如下:
算法步骤如下:
step1:数据选择和网络初始化。从样本空间中随机选择 m 组训练数据,初始化测试数据的分布权值 D,(i) = l/m,根据样本输入输出维数确定神经网络结构,初始化 BP 神经网络权值和阈值 。
step2::弱分类器预测。训练第 t 个弱分类器时,用训练数据训练 BP 神经网络并且预测训练数据输出,得到预测序列 g(t)的预测误差和 et,误差和 et的计算公式为
式中, g(t )为预测分类结果,y为期望分类结果 。
step3: 计算预测序列权重 。 根据预测序列 g(t) 的预测误差 et, 计算序列的权重 αt , 权重计算公式为
step4: 测试数据权重调整 。 根据预测序列权重 αt,调整下一轮训练样本的权重,调整公式为
式中, βt是归一化因子,目的是在权重比例不变的情况下使分布权值和为 1 。
step5: :强分类函数 。 训练 T 轮后得到j T 组弱分类函数 f (gt ,at) ,由 T 组弱分类函数 f (gt ,at)组合得到了强分类函数 h(x)
三、BP_ Adaboost模型分类实例
现有某公司财务状况数据共1350组,每组数据共有11维,前10维分别代表公司的分费用利润率、资产营运能力、公司总资产、总资产增长率、流动比亘在、营业现金流量、审计意见类型、每股收益、存货周转率和资产负债率十项指标 ,最后1维代表公司的财务状况,其中1代表该公司财务状况良好,-1则代表该公司财务出现问题。
根据要求,选取其中1000组数据作为训练集,剩余的350组作为测试集,采用的BP神经网络结构为10-6-1,共训练生成10个BP神经网络弱分类器,最后用10个弱分类器组成的强分类器对公司财务进行分类。
利用matlab实现该分类问题,代码如下:
%% 清空环境变量
clc
clear %% 下载数据
load data input_train output_train input_test output_test %% 权重初始化
[mm,nn]=size(input_train);
D(1,:)=ones(1,nn)/nn; %% 弱分类器分类
K=10;
for i=1:K %训练样本归一化
[inputn,inputps]=mapminmax(input_train);
[outputn,outputps]=mapminmax(output_train);
error(i)=0; %BP神经网络构建
net=newff(inputn,outputn,6);
net.trainParam.epochs=5;
net.trainParam.lr=0.1;
net.trainParam.goal=0.00004; %BP神经网络训练
net=train(net,inputn,outputn); %训练数据预测
an1=sim(net,inputn);
test_simu1(i,:)=mapminmax('reverse',an1,outputps); %测试数据预测
inputn_test =mapminmax('apply',input_test,inputps);
an=sim(net,inputn_test);
test_simu(i,:)=mapminmax('reverse',an,outputps); %统计输出效果
kk1=find(test_simu1(i,:)>0);
kk2=find(test_simu1(i,:)<0); aa(kk1)=1;
aa(kk2)=-1; %统计错误样本数
for j=1:nn
if aa(j)~=output_train(j);
error(i)=error(i)+D(i,j);
end
end %弱分类器i权重
at(i)=0.5*log((1-error(i))/error(i)); %更新D值
for j=1:nn
D(i+1,j)=D(i,j)*exp(-at(i)*aa(j)*test_simu1(i,j));
end %D值归一化
Dsum=sum(D(i+1,:));
D(i+1,:)=D(i+1,:)/Dsum; end %% 强分类器分类结果
output=sign(at*test_simu); %% 分类结果统计
%统计强分类器每类分类错误个数
kkk1=0;
kkk2=0;
for j=1:350
if output(j)==1
if output(j)~=output_test(j)
kkk1=kkk1+1;
end
end
if output(j)==-1
if output(j)~=output_test(j)
kkk2=kkk2+1;
end
end
end kkk1
kkk2
disp('第一类分类错误 第二类分类错误 总错误');
% 窗口显示
disp([kkk1 kkk2 kkk1+kkk2]); plot(output)
hold on
plot(output_test,'g') %统计弱分离器效果
for i=1:K
error1(i)=0;
kk1=find(test_simu(i,:)>0);
kk2=find(test_simu(i,:)<0); aa(kk1)=1;
aa(kk2)=-1; for j=1:350
if aa(j)~=output_test(j);
error1(i)=error1(i)+1;
end
end
end
disp('统计弱分类器分类效果');
error1 disp('强分类器分类误差率')
(kkk1+kkk2)/350 disp('弱分类器分类误差率')
(sum(error1)/(K*350))
结果如下:
分析结果可以看出,强分类器分类误差率低于弱分类器分类误差率,表明BP_Adaboos分类算法效果还是比较好的。对于案例中的数据,可以再加强训练一下第二类分类的数据,最后使得分类效果更加优良。
BP_Adaboost 模型及其分类应用的更多相关文章
- MATLAB神经网络(5) 基于BP_Adaboost的强分类器设计——公司财务预警建模
5.1 案例背景 5.1.1 BP_Adaboost模型 Adaboost算法的思想是合并多个“弱”分类器的输出以产生有效分类.其主要步骤为:首先给出弱学习算法和样本空间($X$,$Y$),从样本空间 ...
- R︱Softmax Regression建模 (MNIST 手写体识别和文档多分类应用)
本文转载自经管之家论坛, R语言中的Softmax Regression建模 (MNIST 手写体识别和文档多分类应用) R中的softmaxreg包,发自2016-09-09,链接:https:// ...
- 一步步教你轻松学朴素贝叶斯模型算法Sklearn深度篇3
一步步教你轻松学朴素贝叶斯深度篇3(白宁超 2018年9月4日14:18:14) 导读:朴素贝叶斯模型是机器学习常用的模型算法之一,其在文本分类方面简单易行,且取得不错的分类效果.所以很受欢迎,对 ...
- 一步步教你轻松学KNN模型算法
一步步教你轻松学KNN模型算法( 白宁超 2018年7月24日08:52:16 ) 导读:机器学习算法中KNN属于比较简单的典型算法,既可以做聚类又可以做分类使用.本文通过一个模拟的实际案例进行讲解. ...
- 基于tensorflow使用全连接层函数实现多层神经网络并保存和读取模型
使用之前那个格式写法到后面层数多的话会很乱,所以编写了一个函数创建层,这样看起来可读性高点也更方便整理后期修改维护 #全连接层函数 def fcn_layer( inputs, #输入数据 input ...
- NLP学习(2)----文本分类模型
实战:https://github.com/jiangxinyang227/NLP-Project 一.简介: 1.传统的文本分类方法:[人工特征工程+浅层分类模型] (1)文本预处理: ①(中文) ...
- Apple的Core ML3简介——为iPhone构建深度学习模型(附代码)
概述 Apple的Core ML 3是一个为开发人员和程序员设计的工具,帮助程序员进入人工智能生态 你可以使用Core ML 3为iPhone构建机器学习和深度学习模型 在本文中,我们将为iPhone ...
- ResNet-50模型图像分类示例
ResNet-50模型图像分类示例 概述 计算机视觉是当前深度学习研究最广泛.落地最成熟的技术领域,在手机拍照.智能安防.自动驾驶等场景有广泛应用.从2012年AlexNet在ImageNet比赛夺冠 ...
- 带你从0到1开发AI图像分类应用
摘要:通过一个垃圾分类应用的开发示例,介绍AI Gallery在AI应用开发流程中的作用. 本文分享自华为云社区<AI Gallery:从0到1开发AI图像分类应用>,作者: yd_269 ...
随机推荐
- HttpClientFactory 日志不好用,自己扩展一个?
前言 .NetCore2.1新推出HttpClientFactory工厂类, 替代了早期的HttpClient, 并新增了弹性Http调用机制 (集成Policy组件). 替换的初衷还是简单说下: ① ...
- spring+cxf 开发webService(主要是记录遇到spring bean注入不进来的解决方法)
这里不介绍原理,只是记录自己spring+cxf的开发过程和遇到的问题 场景:第三方公司需要调用我们的业务系统,以xml报文的形式传递数据,之后我们解析报文存储到我们数据库生成业务单据: WebSer ...
- ajax请求成功,状态却是200
AJAX状态为200,这类状态代码表明服务器成功地接受了客户端请求.简单的来说成功发送一个AJAX请求,但是就是不进入success事件,进入error事件. $.ajax({ type:'POST' ...
- Date、Calendar和GregorianCalendar的使用
java.util 包提供了 Date 类来封装当前的日期和时间. Date 类提供两个构造函数来实例化 Date 对象. 第一个构造函数使用当前日期和时间来初始化对象. Date public st ...
- 漫谈LiteOS之开发板-串口(基于GD32450i-EVAL)
[摘要] 主要讲解物联网的技术积累,本期我们先带领大家学习漫谈LiteOS之漫谈开发板第一集-串口,本文基于GD32450i-EVAL对串口以及其通信做了一个简要的分析,以及开发过程中遇到的一些技术 ...
- Flink入门(三)——环境与部署
flink是一款开源的大数据流式处理框架,他可以同时批处理和流处理,具有容错性.高吞吐.低延迟等优势,本文简述flink在windows和linux中安装步骤,和示例程序的运行,包括本地调试环境,集群 ...
- 第七章 jQuery中的事件与动画
事件的分类 基础事件: 鼠标事件 键盘事件 window事件 表单事件 复合事件: 鼠标光标悬停 鼠标连续点击 基础事件: 实例: mouseenter()和mouseover()用法的区别: mou ...
- 摄像头CMOS和CCD的比较
转载自网络,在此做一下总结,仅供参考: 1.CCD每曝光一次,在快门关闭后进行像素转移处理,将每一行中每一个像素(pixel)的电荷信号依序传入“缓冲器”中,由底端的线路引导输出至 CCD 旁的放大器 ...
- 记录我的 python 学习历程-Day06 is id == / 代码块 / 集合 / 深浅拷贝
一.is == id 用法 在Python中,id是内存地址, 你只要创建一个数据(对象)那么就会在内存中开辟一个空间,将这个数据临时加载到内存中,这个空间有一个唯一标识,就好比是身份证号,标识这个空 ...
- DENEBOLA (See3CAM_CX3RDK) - CX3 Reference Design
Denebola (See3CAM_CX3RDK) is a USB3.0 USB video class (UVC) reference design kit (RDK) developed by ...