Java实现三次指数平滑算法进行数据预测(纯手写不易,转载留眼)

本文介绍了如何使用Java实现三次指数平滑算法进行数据预测,强调其在处理周期性、季节性和单一趋势混合数据模型时的优势。通过实例和代码展示了算法的应用,并探讨了不同平滑级别在误差和预测准确性上的差异。文章最后提到,虽然三次平滑具有高精度,但可能会在拐点预测时产生误差,且计算量较大。
摘要由CSDN通过智能技术生成

由于种种原因,此处只讨论技术实现,业务场景自己想。

二次平滑其实已经能满足我们的业务场景,但是如果不考虑拐角的误差,而追求单一趋势中的更加精确的预测值,则可以考虑下当前的三次指数平滑算法。它是基于实际值/一次预测/二次预测的基础上进行的再次平滑,具有超灵敏的调整修正,超准确的预测,但是同时也拥有超过的拐角误差。
这还不是重头戏,重头戏是三次指数平滑,它能够更好处理具有周期性和季节性,甚至周期性+单一趋势的复杂混合型的数据模型预测,它必须建立在一次和二次的基础上进行三次平滑计算,计算量会较大。
直接看公式:

在这里插入图片描述

直接上代码吧:
@PostMapping("/tripleExponentialSmoothingMethod")
    @ApiOperation("三次指数平滑法")
    public String tripleExponentialSmoothingMethod(@RequestBody TripleSmoothingEntity tripleSmoothingEntity){
   
        /** 三次指数平滑公式:
         * 注:3^2 代表3的平方,[1-a]^2 代表 1-a 的平方
         *  St3 = a * St2(二次平滑结果) + (1-a) * S3t-1
         *  At = 3 * St1 - 3 * St2 + St3
         *  Bt = a / 2*[(1-a)^2] * [(6-5a)*St1 - 2*(5-4a)*St2 + (4-3a)*St3]
         *  Ct = a^2 / 2*[(1-a)^2] * [St1 - 2St2 + St3]
         *  所以可得的预测值计算为:
         *  ^Yt+T = At + Bt*T + Ct*T^2
         **/
        // (1)获取实际观察值列表和最后一次的预测值(存在即合理原则 ---汉涛)
        List<Double> realParamList = tripleSmoothingEntity.getRealDataList();
        Double lastSinglePredictParam = tripleSmoothingEntity.getLastSinglePredictParam();
        Double lastSecondPredictParam = tripleSmoothingEntity.getLastSecondPredictParam();
        Double lastTriplePredictParam = tripleSmoothingEntity.getLastTriplePredictParam();
        // 获取总期数计算均方误差
        int totalTimes = realParamList.size();
        // 用于复位的
        Double resizeSecondPredict = tripleSmoothingEntity.getLastSecondPredictParam();
        Double resizeTriplePredict = tripleSmoothingEntity.getLastTriplePredictParam();
        int predictTime = tripleSmoothingEntity.getPredictTime();
        // 定义结果集合类
        List<Double> singleGapList = new ArrayList<>();
        List<Double> secondGapList = new ArrayList<>();
        List<Double> tripleGapList = new ArrayList<>();
        Map<Double,Double> singleGapMap = new HashMap<>();
        Map<Double,Double> secondGapMap = new HashMap<>();
        Map<Double,Double> tripleGapMap = new HashMap<>();
        // 保留一位小数
        DecimalFormat decimalFormat = new DecimalFormat("#
1、下载并安装mysql,将脚本执行至数据库中; 2、配置java环境,使用jdk8,配置环境变量,下载IntelliJ IDEA 2019.2.4,该工具为java代码编译器 3、下载Maven,配置至环境变量(百度搜索很多),将构建器为Maven,类库配置成阿里库(方法:百度搜索很多很多) 4、将工程导入后,在application-local.yml文件中配置数据库 5、在logback-prod.xml文件中配置log日志 6、配置完毕后,即可启动 访问地址:http://localhost:8082/anime/login.html 用户名:admin 密码:admin V:china1866 1、 登录 2、 首页 3、 权限管理-用户管理 4、 权限管理-添加用户数据 5、 交通数据管理-查看交通数据 6、 交通数据管理-添加交通数据 7、 交通预测-交通数据预测 脚本: CREATE TABLE `traffic_data_t` ( `id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '序列', `trafficId` VARCHAR(50) NULL DEFAULT NULL COMMENT '交通数据编号', `trafficContent` VARCHAR(50) NULL DEFAULT NULL COMMENT '交通状况', `trafficSection` VARCHAR(200) NULL DEFAULT NULL COMMENT '交通路段', `trafficMan` VARCHAR(200) NULL DEFAULT NULL COMMENT '上报人', `trafficDate` VARCHAR(200) NULL DEFAULT NULL COMMENT '上报时间', `status` VARCHAR(200) NULL DEFAULT NULL COMMENT '交通状态', PRIMARY KEY (`id`) ) COMMENT='交通数据表' COLLATE='utf8_general_ci' ENGINE=InnoDB AUTO_INCREMENT=44 ; CREATE TABLE `sys_user_t` ( `id` INT(11) NOT NULL AUTO_INCREMENT, `role_id` INT(11) NULL DEFAULT NULL COMMENT '角色ID', `user_id` VARCHAR(50) NOT NULL COMMENT '用户ID', `user_name` VARCHAR(100) NOT NULL COMMENT '用户名', `status` INT(11) NOT NULL COMMENT '是否有效0:false\\\\1:true', `create_date` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP, `create_by` VARCHAR(100) NULL DEFAULT NULL, `last_update_date` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP, `last_update_by` VARCHAR(100) NULL DEFAULT NULL, `password` VARCHAR(128) NOT NULL, `tenantcode` VARCHAR(50) NOT NULL, `diskId` VARCHAR(500) NULL DEFAULT NULL, `remarks` VARCHAR(500) NULL DEFAULT NULL, PRIMARY KEY (`id`) ) COMMENT='系统用户表' COLLATE='utf8_general_ci' ENGINE=InnoDB AUTO_INCREMENT=51 ; CREATE TABLE `sys_role_t` ( `role_id` INT(11) NOT NULL COMMENT '角色ID', `role_name` VARCHAR(200) NOT NULL COMMENT '权限名称', `status` INT(11) NOT NULL COMMENT '是否有效0:true\\\\1:false', `create_date` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP, `create_by` VARCHAR(100) NULL DEFAULT NULL, `last_update_date` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP, `last_update_by` VARCHAR(100) NULL DEFAULT NULL ) COMMENT='系统角色表' COLLATE='utf8_general_ci' ENGINE=InnoDB ; CREATE TABLE `sys_menu_t` ( `id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '序列', `parent_id` VARCHAR(50) NOT NULL COMMENT '父节点ID', `menu_id` VARCHAR(50) NOT NULL COMMENT '菜单ID', `menu_name` VARCHAR(200) NOT NULL COMMENT '菜单名称', `menu_url` VARCHAR(200) NULL DEFAULT NULL COMMENT '菜单URL', `status` INT(11) NOT NULL COMMENT '有效(0有效,1失效)', `create_date` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP, `create_by` VARCHAR(200) NULL DEFAULT NULL, `last_update_date` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP, `last_update_by` VARCHAR(200) NULL DEFAULT NULL, PRIMARY KEY (`id`) ) COMMENT='菜单表' COLLATE='utf8_general_ci' ENGINE=InnoDB AUTO_INCREMENT=33 ; CREATE TABLE `sys_menu_role_relation_t` ( `id` INT(11) NOT NULL AUTO_INCREMENT COMMENT '序列', `menu_id` VARCHAR(50) NOT NULL COMMENT '菜单ID', `role_id` VARCHAR(50) NOT NULL COMMENT '角色ID', `status` INT(11) NOT NULL COMMENT '有效(0有效,1失效)', `create_date` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP, `create_by` VARCHAR(200) NULL DEFAULT NULL, `last_update_date` TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP, `last_update_by` VARCHAR(200) NULL DEFAULT NULL, PRIMARY KEY (`id`) ) COMMENT='角色与菜单关系表' COLLATE='utf8_general_ci' ENGINE=InnoDB AUTO_INCREMENT=51 ;
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值