python数学建模_2:灰色预测模型(GM(1,1))使用文档

chatgpt/2023/9/27 17:06:04

  • 灰色预测模型(GM(1,1))使用文档
    • 简介
    • 使用时机
    • 处理数据类型
    • 函数说明
    • 使用示例
    • 注意事项

灰色预测模型(GM(1,1))使用文档

简介

灰色预测模型(GM(1,1))是灰色系统理论的重要部分,常用于对包含不确定性的系统进行建模和预测。

使用时机

当数据量较小,且数据变化趋势明显,但不易确定具体规律时,可以使用灰色预测模型进行预测。特别是在经济、社会、科技等领域,灰色预测模型被广泛应用。

处理数据类型

模型可以处理一维的时间序列数据,数据应为非负数且不能全部相同。模型预测的结果为连续的实数。

函数说明

以下是代码中各个函数的说明:

level_check(x, r=(0.1, 2.5)):级比检验函数,检查序列是否满足灰色预测模型的使用条件。

GM_11(x0):构建GM(1,1)模型的函数,输入为原始数据序列,输出为模型预测函数以及参数a和b。

check_predict(x0, f):计算模型预测值、残差、相对误差以及级比偏差的函数。

create_df(x0, predict, e, delta_k, relative_e):根据原始值、模型值、残差、级比偏差和相对误差创建pandas DataFrame的函数。

plot_data(x0, predict):根据原始值和模型值绘制图表的函数。

使用示例

首先,你需要提供一组原始数据,然后调用level_check()函数进行级比检验,如果检验通过,说明这组数据适合使用灰色预测模型进行建模和预测。然后,你可以调用GM_11()函数生成预测模型,接着用check_predict()函数计算预测值以及各种误差,最后,你可以使用create_df()函数将这些数据整理成一个表格,并用plot_data()函数将原始值和预测值绘制在图表上。

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from tabulate import tabulatedef level_check(x, r=(0.1, 2.5)):# 级比检验n = len(x)lambda_x = [x[i-1] / x[i] for i in range(1, n)]return all(r[0] <= lambda_x[i] <= r[1] for i in range(n-1))def GM_11(x0):# 建立GM(1,1)模型n = len(x0)x1 = x0.cumsum() # 一次累加z1 = (x1[:n-1] + x1[1:]) / 2.0 # 紧邻均值生成序列B = np.array([-z1, np.ones(n-1)]).TYn = x0[1:].reshape((n-1, 1))[[a], [b]] = np.linalg.inv(B.T.dot(B)).dot(B.T).dot(Yn) # 计算参数f = lambda k: (x0[0]-b/a)*np.exp(-a*(k-1))-(x0[0]-b/a)*np.exp(-a*(k-2)) # 还原值return f, a, bdef check_predict(x0, f):n = len(x0)predict = [f(i) for i in range(n)]e = x0 - np.array(predict)  # 残差relative_e = e / x0  # 相对误差lambda_k = [None] + [x0[i] / x0[i-1] for i in range(1, n)]lambda_k_hat = [None, None] + [(predict[i]-f(i-1)) / (predict[i-1]-f(i-2)) for i in range(2, n)]delta_k = [None if lk is None or lhk is None else abs(lk - lhk) for lk, lhk in zip(lambda_k, lambda_k_hat)]  # 级比偏差return predict, relative_e, delta_kdef create_df(x0, predict, e, delta_k, relative_e):# 创建一个包含原始值、模型值、残差、级比偏差和相对误差的pandas DataFramedf = pd.DataFrame({'原始值': x0,'模型值': predict,'残差': e,'级比偏差': delta_k,'相对误差': relative_e})return dfdef plot_data(x0, predict):plt.rcParams['font.sans-serif'] = ['SimHei'] plt.figure(figsize=(8, 4))plt.plot(range(len(x0)), x0, 'o-', label='原始值')plt.plot(range(len(predict)), predict, 'r--', label='模型值')plt.xlabel('时间')plt.ylabel('值')plt.title('灰色预测模型')plt.legend()plt.show()# Test with some data
x0 = np.array([71.1,72.4,72.2,72.1,71.9,71.7,71.6])
if level_check(x0):f, a, b = GM_11(x0)predict, relative_e, delta_k = check_predict(x0, f)e = x0 - predictdf = create_df(x0, predict, e, delta_k, relative_e)print(tabulate(df, headers='keys', tablefmt='psql', showindex=False))plot_data(x0, predict)
else:print("级比检验不通过,不能使用灰色预测")

在这里插入图片描述

注意事项

灰色预测模型是一种粗略的预测方法,仅适用于数据变化趋势明显、但难以找到明确规律的情况。如果数据变化规律不明显,或者已经找到了明确的数学模型,那么应该使用其他更精确的预测方法。

灰色预测模型假设数据变化趋势在一段时间内是恒定的,因此在使用模型进行长期预测时需要谨慎,因为实际情况中数据的变化趋势可能会发生改变。

此外,模型的预测精度会随着数据量的增加而提高。如果你发现预测结果与实际结果有较大偏差,你可以试着增加数据量,以提高模型的预测精度。

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

如若内容造成侵权/违法违规/事实不符,请联系郑州代理记账网进行投诉反馈,一经查实,立即删除!

相关文章

【etcd】解决 go-zero 注册 etcd 出现 “Auto sync endpoints failed.” 的问题

go: v1.20.3 go-zero: v1.5.4 etcd: v3.5.9 问题描述 在 go-zero 中用 etcd 去实现服务注册发现&#xff0c;rpc 服务可以注册到 etcd&#xff0c;同时其他服务可以发现注册的微服务&#xff0c;也可以访问。但是&#xff0c;注册的 rpc 服务的日志&#xff0c;就是一直报以…

pdf怎么压缩到1m?pdf压缩跟我这样做

在日常工作和学习中&#xff0c;我们常需要处理PDF文件&#xff0c;然而&#xff0c;有时候&#xff0c;PDF文件的大小可能会超过我们的预期&#xff0c;从而导致我们无法通过电子邮件或其他方式发送。这时候&#xff0c;我们就需要对PDF文件进行压缩&#xff0c;以降低其大小。…

Python爬虫Scrapy(二)_入门案例

入门案例 学习目标 创建一个Scrapy项目定义提取的结构化数据(Item)编写爬取网站的Spider并提取出结构化数据(Item)编写Item Pipelines来存储提取到的Item(即结构化数据) 一、新建项目(scrapy startproject) 在开始爬取之前&#xff0c;必须创建一个新的Scrapy项目。进入自定…

计算机视觉--利用HSV和YIQ颜色空间处理图像噪声

前言&#xff1a; Hello大家好&#xff0c;我是Dream。 今天我们将利用HSV和YIQ颜色空间处理图像噪声。在本次实验中&#xff0c;我们使用任意一张图片&#xff0c;通过RGB转HSV和YIQ的操作&#xff0c;加入了椒盐噪声并将其转换回RGB格式&#xff0c;最终实现对图像的噪声处理…

高忆管理:k线分析股票走势?

K线是一种经典的技术剖析工具&#xff0c;经过制作股票价格的收盘、开盘、最高和最低价&#xff0c;形成实体和影线&#xff0c;以反映股票价格的动摇和趋势。本文将从多个角度剖析K线剖析股票走势的重要性及使用。 1. 提醒价格趋势 K线图能够清晰显现股票价格走势的趋势&…

SpringBootAdmin介绍

一、SpringBootAdmin 简介 1.1 概述 SpringBootAdmin 是一个非常好用的监控和管理的开源组件&#xff0c;该组件能够将 Actuator 中的信息进行界面化的展示&#xff0c;也可以监控所有 Spring Boot 应用的健康状况&#xff0c;提供实时警报功能。 1.2 功能特性 显示应用程序…

Redis 数据库高可用

Redis 数据库的高可用 一.Redis 数据库的持久化 1.Redis 高可用概念 &#xff08;1&#xff09;在web服务器中&#xff0c;高可用是指服务器可以正常访问的时间&#xff0c;衡量的标准是在多长时间内可以提供正常服务&#xff08;99.9%、99.99%、99.999%等等&#xff09;。 …

[Linux]线程基本知识

概念 进程 一个正在执行的程序&#xff0c;它是资源分配的最小单位 进程中的事情需要按照一定的顺序逐个进行 进程出现了很多弊端: 一是由于进程是资源拥有者&#xff0c;创建、撤消与切换存在较大的时空开销&#xff0c;因此需要引入轻型进程&#xff1b; 二是由于对称多…
推荐文章