MATLAB神经网络(5) 基于BP_Adaboost的强分类器设计——公司财务预警建模
5.1 案例背景
5.1.1 BP_Adaboost模型
Adaboost算法的思想是合并多个“弱”分类器的输出以产生有效分类。其主要步骤为:首先给出弱学习算法和样本空间($X$,$Y$),从样本空间中找出$m$组训练数据,每组训练数据的权重都是$\frac{1}{m}$。然后用弱学习算法迭代运算$T$次,每次运算后都按照分类结果更新训练数据权重分布,对于分类失败的训练个体赋予较大权重,下次迭代运算时更加关注这些训练个体。弱分类器通过反复迭代得到一个分类函数序列${f_1},{f_2},...,{f_T}$,每个分类函数赋予一个权重,分类结果越好的函数,其对应权重越大。$T$次迭代之后,最终强分类函数$F$由弱分类函数加权得到。BP_Adaboost模型即BP神经网络作为弱分类器,反复训练BP神经网络预测样本输出,通过Adaboost算法得到多个BP神经网络弱分类器组成的强分类器。
5.1.2 公司财务预警系统介绍
公司财务预警系统是为了防止公司财务系统运行偏离预期目标而建立的报警系统,具有针对性和预测性等特点。它通过公司的各项指标综合评价并预测公司财务状况、发展趋势和变化,为决策者科学决策提供智力支持。
评价指标:成分费用利润率、资产营运能力、公司总资产、总资产增长率、流动比率、营业现金流量、审计意见类型、每股收益、存货周转率和资产负债率
5.2 模型建立

算法步骤如下:
- 数据初始化和网络初始化。从样本空间中随机选择$m$组训练数据,初始化测试数据的分布权值${D_t}(i) = \frac{1}{m}$,根据样本输入输出维数确定神经网络结构,初始化BP神经网络权值和阈值。
- 若分类器预测。训练第$t$个弱分类器时,用训练数据训练BP神经网络并且预测训练数据输出,得到预测序列$g(t)$的预测误差$e_{t}$,误差和$e_{t}$的计算公式为\[{e_t} = \sum\limits_i {{D_t}(i)} \;\;\;i = 1,2, \ldots ,m(g(t) \ne y)\]
- 计算预测序列权重。根据预测序列$g(t)$的预测误差$e_{t}$计算序列的权重$a_{t}$,权重计算公式为\[{a_t} = \frac{1}{2}\ln \left( {\frac{{1 - {e_t}}}{{{e_t}}}} \right)\]
- 测试数据权重调整。根据预测序列权重$a_{t}$挑中下一轮训练样本的权重,调整公式为\[{D_{t + 1}}(i) = \frac{{{D_t}(i)}}{{{B_t}}} \cdot {e^{ - {a_t}{y_i}{g_t}({x_i})}}\;\;\;i = 1,2, \ldots ,m\]式中,$B_{t}$为归一化因子,目的是在权重比例不变的情况下使分布权值和为1。
- 强分类函数。训练$T$轮后得到$T$组弱分类函数$f(g_{t},a_{t})$,由$T$组弱分类函数组合得到了强分类函数\[h(x) = {\rm{sign}}[\sum\limits_{t = 1}^T {{a_t} \cdot f({g_t},{a_t})} ]\]
5.3 编程实现
5.3.1 载入数据(初始化)
%% 基于BP-Adaboost的强分类器分类 %% 清空环境变量
clc
clear %% 加载数据
load('data.mat') %% 权重初始化
[mm,nn]=size(input_train);
D(1,:)=ones(1,nn)/nn;
5.3.2 弱分类器训练
%% 弱分类器分类
K=30;
for i=1:K
%训练样本归一化
[inputn,inputps]=mapminmax(input_train);
[outputn,outputps]=mapminmax(output_train);
error(i)=0; %BP神经网络构建
net=newff(inputn,outputn,[15,8]);
net.trainParam.epochs=20;
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
5.3.3 统计结果
%% 强分类器分类结果
output=sign(at*test_simu); %% 分类结果统计
[tbl,chi2,p]=crosstab(output,output_test)

subplot(2,1,1)
plot(output_test,'r',"LineWidth",1.3)
subplot(2,1,2)
plot(output,'b',"LineWidth",1.3)

%统计强分类器分类效果
error_q=(tbl(1,2)+tbl(2,1))/sum(sum(tbl));
error_q

%统计弱分离器效果
for i=1:K
kk1=find(test_simu(i,:)>0);
kk2=find(test_simu(i,:)<0); bb(kk1)=1;
bb(kk2)=-1; [tbl1,~,~]=crosstab(bb,output_test);
error_r(i)=(tbl1(1,2)+tbl1(2,1))/sum(sum(tbl));
end
%统计弱分类器分类效果
error_r

mean(error_r)

5.4 强预测器
与强分类器设计方法类似,都是先赋予测试样本权重,然后根据弱预测器预测结果调整测试样本权重并确定弱预测器权重,最后把弱预测器序列加权作为强预测器。不同的是在强分类器中增加预测类别错误的样本的权重,在强预测器中增加预测误差超过阈值的样本的权重。
MATLAB神经网络(5) 基于BP_Adaboost的强分类器设计——公司财务预警建模的更多相关文章
- boost强分类器的实现
boost.cpp文件下: bool CvCascadeBoost::train( const CvFeatureEvaluator* _featureEvaluator, int _numSampl ...
- MATLAB神经网络原理与实例精解视频教程
教程内容:<MATLAB神经网络原理与实例精解>随书附带源程序.rar9.随机神经网络.rar8.反馈神经网络.rar7.自组织竞争神经网络.rar6.径向基函数网络.rar5.BP神经网 ...
- 《精通Matlab神经网络》例10-16的新写法
<精通Matlab神经网络>书中示例10-16,在创建BP网络时,原来的写法是: net = newff(minmax(alphabet),[S1 S2],{'logsig' 'logsi ...
- 【AdaBoost算法】强分类器训练过程
一.强分类器训练过程 算法原理如下(参考自VIOLA P, JONES M. Robust real time object detection[A] . 8th IEEE International ...
- 机器学习经典算法详解及Python实现--基于SMO的SVM分类器
原文:http://blog.csdn.net/suipingsp/article/details/41645779 支持向量机基本上是最好的有监督学习算法,因其英文名为support vector ...
- Matlab与.NET基于类型安全的接口混合编程入门
原文:[原创]Matlab与.NET基于类型安全的接口混合编程入门 如果这些文章对你有用,有帮助,期待更多开源组件介绍,请不要吝啬手中的鼠标. [原创分享]Matlab.NET混编调用Figure窗体 ...
- Matlab神经网络
1. <MATLAB神经网络原理与实例精解> 2. B站:https://search.bilibili.com/all?keyword=matlab&from_source=na ...
- C++从零实现简单深度神经网络(基于OpenCV)
代码地址如下:http://www.demodashi.com/demo/11138.html 一.准备工作 需要准备什么环境 需要安装有Visual Studio并且配置了OpenCV.能够使用Op ...
- 12.Matlab神经网络工具箱
概述: 1 人工神经网络介绍 2 人工神经元 3 MATLAB神经网络工具箱 4 感知器神经网络 5 感知器神经网络 5.1 设计实例分析 clear all; close all; P=[ ; ]; ...
随机推荐
- windows安装fdfs_client-py-master.zip 出现 error: Microsoft Visual C++ 14.0 is required.
背景:学习django+fdfs+nginx时碰见的问题,笔记本电脑的虚拟机ubuntu实在卡到怀疑人生,所以django装在windows,ubuntu只开启fdfs+nginx服务.于是就有在wi ...
- Array.prototype.slice.call()方法的理解
1.基础1)slice() 方法可从已有的数组中返回选定的元素. start:必需.规定从何处开始选取.如果是负数,那么它规定从数组尾部开始算起的位置.也就是说,-1 指最后一个元素,-2 指倒数第二 ...
- 3DSMAX安装失败,如何卸载修复重新安装3dmax 2017?
一些同学安装3dmax出错了,也有时候想重新安装3dmax的时候会出现这种本电脑已安装3dmax,你要是不留意直接安装,只会按装3dmax的附件,3dmax是不会按装上的.这种原因呢就是大家在之前卸载 ...
- jenkins邮件内容模板
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...
- Nginx笔记总结四:Nginx连接PHP5.4
location ~ .*\.(php)?${ expires -ls; try_file $uri=404; fastcgi_split_path_info ~(.+\.php)(/.+)$; in ...
- Apollo配置中心介绍与使用指南
转载于https://github.com/ctripcorp/apollo,by Ctrip, Inc. Apollo配置中心介绍 Apollo(阿波罗)是携程框架部门研发的分布式配置中心,能够集中 ...
- NoneBot+酷Q,打造QQ机器人
NoneBot 是一个基于 酷Q 的 Python 异步 QQ 机器人框架,它会对 QQ 机器人收到的消息进行解析和处理,并以插件化的形式,分发给消息所对应的命令处理器和自然语言处理器,来完成具体的功 ...
- 在JavaScript里的“对象字面量”是什么意思?
字面量表示如何表达这个值,一般除去表达式,给变量赋值时,等号右边都可以认为是字面量.字面量分为字符串字面量(string literal ).数组字面量(array literal)和对象字面量(ob ...
- Flask添加新命令
代码: import click from flask import Flask app = Flask(__name__) @app.cli.command() def hg(): click.ec ...
- Linux IO多路复用
监听文件描述符的状态来进行相应的读写操作,3个函数: 123 selectpollepoll 123456789 int (int nfds, fd_set *readfds, fd_set *wri ...