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 模型建立

算法步骤如下:

  1. 数据初始化和网络初始化。从样本空间中随机选择$m$组训练数据,初始化测试数据的分布权值${D_t}(i) = \frac{1}{m}$,根据样本输入输出维数确定神经网络结构,初始化BP神经网络权值和阈值。
  2. 若分类器预测。训练第$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)\]
  3. 计算预测序列权重。根据预测序列$g(t)$的预测误差$e_{t}$计算序列的权重$a_{t}$,权重计算公式为\[{a_t} = \frac{1}{2}\ln \left( {\frac{{1 - {e_t}}}{{{e_t}}}} \right)\]
  4. 测试数据权重调整。根据预测序列权重$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。
  5. 强分类函数。训练$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的强分类器设计——公司财务预警建模的更多相关文章

  1. boost强分类器的实现

    boost.cpp文件下: bool CvCascadeBoost::train( const CvFeatureEvaluator* _featureEvaluator, int _numSampl ...

  2. MATLAB神经网络原理与实例精解视频教程

    教程内容:<MATLAB神经网络原理与实例精解>随书附带源程序.rar9.随机神经网络.rar8.反馈神经网络.rar7.自组织竞争神经网络.rar6.径向基函数网络.rar5.BP神经网 ...

  3. 《精通Matlab神经网络》例10-16的新写法

    <精通Matlab神经网络>书中示例10-16,在创建BP网络时,原来的写法是: net = newff(minmax(alphabet),[S1 S2],{'logsig' 'logsi ...

  4. 【AdaBoost算法】强分类器训练过程

    一.强分类器训练过程 算法原理如下(参考自VIOLA P, JONES M. Robust real time object detection[A] . 8th IEEE International ...

  5. 机器学习经典算法详解及Python实现--基于SMO的SVM分类器

    原文:http://blog.csdn.net/suipingsp/article/details/41645779 支持向量机基本上是最好的有监督学习算法,因其英文名为support vector  ...

  6. Matlab与.NET基于类型安全的接口混合编程入门

    原文:[原创]Matlab与.NET基于类型安全的接口混合编程入门 如果这些文章对你有用,有帮助,期待更多开源组件介绍,请不要吝啬手中的鼠标. [原创分享]Matlab.NET混编调用Figure窗体 ...

  7. Matlab神经网络

    1. <MATLAB神经网络原理与实例精解> 2. B站:https://search.bilibili.com/all?keyword=matlab&from_source=na ...

  8. C++从零实现简单深度神经网络(基于OpenCV)

    代码地址如下:http://www.demodashi.com/demo/11138.html 一.准备工作 需要准备什么环境 需要安装有Visual Studio并且配置了OpenCV.能够使用Op ...

  9. 12.Matlab神经网络工具箱

    概述: 1 人工神经网络介绍 2 人工神经元 3 MATLAB神经网络工具箱 4 感知器神经网络 5 感知器神经网络 5.1 设计实例分析 clear all; close all; P=[ ; ]; ...

随机推荐

  1. Python||NameError: name 'reload' is not defined

    多半是运行如下代码时报错: import sysreload(sys)sys.setdefaultencoding("utf-8")123这段代码是为了解决Python中中文输出出 ...

  2. Office 365 的安装方法

    一.在线安装 进入网址 https://www.office.com/ 使用office账号登陆 1.点击右上角安装office应用,选择第二项 其他安装选项 2.选择安装语言 点击高级,选择安装版本 ...

  3. SHELL用法八(Grep语句)

    1.SHELL编程Grep语句案例实战 1)Find是Linux操作系统文件和目录的路径检索.查询工具,而Grep是Linux系统下文本文件内容检索或者匹配工具,Grep称为全局正则表达式检索工具,在 ...

  4. Android开发之《libyuv库的使用》

    转自:http://bashell.nodemedia.cn/archives/build-google-libyuv-with-ndk-for-android.html 官方网站:https://c ...

  5. 转:zabbix 更改maps图标

    更改Zabbix map图标 Zabbix的maps用来图形化显示监控设备的拓扑图,并且以不同的标记显示故障事件,通过该图表很直观的显示设备的整体情况.系统默认的图标比较简陋,如图十一所示.通过更改系 ...

  6. python基础 生成器 迭代器

    列表生成式: a=[1,2,3] print a b=[i*2 for i in range(10)] #i循环10次,每一个i的值乘2就是列表中的值.列表生成式 print b >>[1 ...

  7. 你每天跑这么多自动化用例,能发现BUG吗?

    阿里QA导读:为什么要度量测试有效性?这么多的CASE,花了大量时间和资源去运行,真能发现bug吗?CI做到90%的行覆盖率了,能发现问题吗?测试用例越来越多,删一些,会不会就发现不了问题了?怎么找出 ...

  8. 内核ioctl函数的cmd宏参数

    在驱动程序里, ioctl() 函数上传送的变量 cmd 是应用程序用于区别设备驱动程序请求处理内容的值.cmd除了可区别数字外,还包含有助于处理的几种相应信息. cmd的大小为 32位,共分 4 个 ...

  9. (转载)Eclipse中使用SVN

    为了方便个人使用,转载过来的,如需查阅,请前往原文地址:http://www.cnblogs.com/wvqusrtg/p/4993849.html 1.在Eclipse里下载Subclipse插件 ...

  10. Eclipse-project-clean

    project--->clean的原理 eclipse  --->project  ----->clean... 选项将工程中的.class文件删除,同时重新编译工程,类似于jbui ...