27-2BP_Adaboost强分类器公司财务预管建模——强分类器和弱分类器(附matlab程序)

news2024/12/26 0:05:25

1.简述

      

Adaboost算法的思想是合并多个“弱”分类器的输出以产生有效分类。其主要步骤为:首先给出弱学习算法和样本空间(x,y),从样本空间中找出m组训练数据,每组训练数据的权重都是1/m。然后用弱学习算法迭代运算T次,每次运算后都按照分裂结果更新训练数据权重分布,对于分类失败的训练个体赋予较大权重,下一次迭代运算时更加关注这些训练个体。弱分类通过反复迭代得到一个分类函数序列f1,f2,f3.....fT,每个分类函数赋予一个权重,分裂结果越好的函数,其对应权重越大。T次迭代之后,最终强分类函数F由弱分类函数加权得到。

 

本例为公司财务预警系统,通过公司的各项指标综合评价并预测公司财务状况、发展趋势和变化,为决策者科学决策提供智力支持。指标可分为表内信息指标、盈利能力指标、偿还能力指标、成长能力指标、现金流量指标和表外信息指标六大指标,每项大指标又分为若干小指标,如盈利能力指标又可分为净资产收益率、总资产报酬率、每股收益、主营业务利润率和成本费用利润率等。在用于公司财务预警如果对所有指标都进行评价后综合,模型过于复杂,并且各指标间相关性较强,,因此在模型建立前需要筛选指标。

 

指标筛选分为显著性分析和因子分析两步。显著性分析通过T检验分析ST公司和非ST公司,在财务指标中找出差别较大、能够明显区分两类公司的财务指标。因子分析在显著性分析基础上对筛选出来的指标计算主成分特征值,从中找出特征值大的指标为公司预警方法的最终评价指标。

943ce898061def5acc4ec4ba0af81818.png

 弱分类器学习分类:把BP神经网络看作弱分类器,经过训练后分类训练样本,并且根据训练样本分类结果调整训练样本权重值,最终得出一系列弱分类器权重。

强分类器分类和结果统计

由10组弱分类器BP网络组成强分类器对分析样本进行分类,并统计分类误差。

Adaboost方法不仅可以用于设计强分类器,还可以用于设计强预测器。强预测器设计思路与强分类器类似,都是先赋予测试样本权重,然后根据弱预测器预测结果调整测试样本权重并确定弱预测器权重,最后把弱预测器序列作为强预测器。不同的是在强分类器中增加预测错类别样本的群众,在强预测器增加预测误差超过阈值的样本黔中,采用BP_Adaboost强预测器预测第2章中非线性函数输出

2.代码

%% 清空环境变量
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))

 

3.运行结果

8dfceef9ff1c4defba8d11cc0a217a68.png

 503106ba3e3c43c79e2b109f7beb70d6.png

 9b3632626f084bd2ad6c7ddb89c7fa03.png

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/672013.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SIP协议学习笔记

SIP 协议(Session initialization Protocol)会话发起协议 是IETF制定的多媒体通信协议&#xff0c;是一个基于文本的应用层控制协议&#xff0c;用于建立&#xff0c;修改和终止IP网上的双方或多方的多媒体会话,支持代理、重定向、登记定位用户等功能 支持用户的移动&#xff…

Packet Tracer - 使用思科 IOS 配置 DHCP

Packet Tracer - 使用思科 IOS 配置 DHCP 地址分配表 设备 接口 IPv4 地址 子网掩码 默认网关 R1 G0/0 192.168.10.1 255.255.255.0 不适用 S0/0/0 10.1.1.1 255.255.255.252 不适用 R2 G0/0 192.168.20.1 255.255.255.0 不适用 G0/1 已分配 DHCP 已分配 …

python安装/卸载模块方法步骤详解(附详细图解)

在日常工作中会需要安装或者卸载Python模块.于是我整理了一下,下面这篇文章主要给大家介绍了关于python安装/卸载模块的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下 以pygame模块举例 1&#xff0c;通过pycharm导入 &#xff08;1&#xff09;直接点击install …

Redis 2023面试5题(三)

一、Redis集群数据hash分片算法是怎么回事&#xff1f; Redis集群数据hash分片算法是一种将数据分散存储在不同的节点上来实现的机制。具体来说&#xff0c;Redis集群将数据分成16384个槽位&#xff0c;每个槽位对应一个节点。当需要访问某个key时&#xff0c;Redis会根据key的…

nginx主配置文件及实战案例

文章目录 一.nginx主配置文件nginx.conf1.认识nginx服务的主配置文件2.全局配置3.I/O事件配置4.HTTP配置&#xff15;.检查配置文件是否正确&#xff16;.浏览器测试&#xff17;.总配置文件图示&#xff17;.1 nginx总配置文件的三个模块&#xff17;.2 HTTP文件配置的图示&am…

【Matlab】语音信号分析与处理实验报告

一、目的 使用Matlab分析与设计实验&#xff0c;理解与掌握以下知识点&#xff1a; 1、信号的采样、频谱混叠 2、信号的频谱分析 3、信号的幅度调制与解调方法 4、理想滤波器的时域和频域特性 5、数字滤波器的设计与实现 二、内容 1、录制一段个人的语音信号 2、采用合适的频…

Unity3D制作一个会移动的方块(还不会移动照相机)

学习Unity3D这么久了&#xff0c;如果你还不会制作一个按下WASD就可以移动的方块的话&#xff0c;那么你的学习将没有一点成就感&#xff0c;我学习的时候&#xff0c;我决定先学习移动&#xff0c;这样我就会对Unity更加感兴趣&#xff0c;学习起来的动力会更为充足 先创建一…

Nseeus安装及使用教程

Nessus是一款目前使用较多的系统漏洞扫描与分析软件 文章目录 Nessus下载安装使用启动:https://localhost:8834/ Nessus Nessus是一款目前使用较多的系统漏洞扫描与分析软件 下载 下载链接&#xff1a;https://www.tenable.com/downloads/nessus 安装 傻瓜式安装 使用 最…

Baumer工业相机堡盟工业相机如何使用新版本NEOAPI SDK控制相机数据流的开启和关闭(C++)

Baumer工业相机堡盟工业相机如何使用新版本NEOAPI SDK控制相机数据流的开启和关闭&#xff08;C&#xff09; Baumer工业相机Baumer工业相机NEOAPI SDK的技术背景Baumer工业相机使用NEOAPISDK控制相机数据流的方式1.引用合适的类文件2.使用NEOAPISDK控制相机数据流的方式2.使用…

Xshell 连接虚拟机Ubuntu系统失败解决方案

背景知识&#xff1a; Xshell 是一个强大的安全终端模拟软件&#xff0c;可以进行远程登录&#xff0c;它支持 SSH1, SSH2, 以及 Microsoft Windows 平台的 TELNET 协议。 xshell通过ip连接&#xff0c;所以需要知道虚拟机的IP地址 使用XShell的主要目的是在Windows环境下登…

leetcode111. 二叉树的最小深度(java)

二叉树的最小深度 leetcode111. 二叉树的最小深度题目描述 DFS 深度优先遍历解题思路代码演示 BFS 广度优先遍历解题思路代码演示 往期经典 leetcode111. 二叉树的最小深度 来源&#xff1a;力扣&#xff08;LeetCode&#xff09; 链接&#xff1a;https://leetcode.cn/problem…

基于立创EDA的原理图设计

目录 学习目标 一、开发中原理图的作用 1.1 原理图 1.2 产品开发原理图设计阶段 1.3 原理图中的具体工作内容 二、 立创EDA软件使用基础 2.1 立创EDA电路设计软件 2.2 新建工程 2.3 设计元件原理图封装 三、项目实战&#xff08;单片机最小系统&#xff09; 学习目标…

Kaggle 比赛总结:BirdCLEF 2023

赛题名称&#xff1a;BirdCLEF 2023赛题任务&#xff1a;识别音景中的鸟叫声赛题类型&#xff1a;语音识别 https://www.kaggle.com/competitions/birdclef-2023文章目录 一、比赛背景二、比赛任务三、评价方法四、优胜方案4.1 第一名4.2 第二名4.3 第三名4.4 第四名4.5 第五名…

SpringCloud Alibaba入门2之用户子模块开发

在上一章的基础上进行子模块的开发SpringCloud Alibaba入门之创建多模块工程_qinxun2008081的博客-CSDN博客 一、引入SpringBoot 我们在父项目统一管理引入的jar包的版本。我们采用父项目中以depencyMangement方式引入spring-boot&#xff0c;子项目依赖parent父配置即可。 &…

CTFshow-pwn入门-前置基础pwn29-pwn31

什么是PIE 由于ASLR是一种操作系统层面的技术&#xff0c;而二进制程序本身是不支持随机化加载的&#xff0c;便出现了一些绕过方法&#xff0c;例如ret2plt、GOT劫持、地址爆破等。于是&#xff0c;人们于2003年引入了位置无关可执行文件&#xff08;Position-Independent Ex…

24. Vue防抖,禁止double click

Vue 防抖 如果按钮不做防抖限制&#xff0c;用户手滑或者其他场景大概率会出现重复调用接口的情况&#xff0c;比如编辑角色时&#xff0c;多次点击submit&#xff0c;会出现非预期请求。 为避免重复点击问题&#xff0c;可以加一个自定义组件将按钮禁用一段时间。 监听click时…

详解Java锁对象

1、Synchronized 1.1、synchronized特性 1、互斥 synchronized会起到互斥效果&#xff0c;某个线程执行到某个对象的synchronized中时&#xff0c;其他线程如果也执行到同一个对象synchronized就会阻塞等待。 *进入synchronized修饰的代码块&#xff0c;就相当于加锁。 *退…

10.安装dashboard

有了之前我们部署的 keystone 、 glance 、 nova 、 neutron 服务之后&#xff0c;我们就可以启动云主机了&#xff0c;但是如果只是使用命令来操作OpenStack 的话非常不方便&#xff0c;我们使用OpenStack 搭建云平台就是为了把底层所有资源整合在一起&#xff0c;然后以一种方…

html5前端学习2

一篇思维题题解&#xff1a; 第五周任务 [Cloned] - Virtual Judge (vjudge.net) http://t.csdn.cn/SIHdM 快捷键&#xff1a; CtrlAltDown 向下选取 CtrlAltUp 向上选取&#xff08;会出现多个光标&#xff0c;可以同时输入&#xff09; CtrlEnter …

linux 内核资源配置--cgroups详解以及在docker中的应用

一、Cgroup 概述 1.1、cgroups 是什么 Linux cgroup &#xff08;Control Groups&#xff09;是 Linux 内核提供的一种机制&#xff0c;用于限制进程组使用的资源&#xff08;如 CPU、内存、磁盘 I/O 等&#xff09;。通过将进程组划分为层次结构&#xff0c;并将资源限制应用…