关联度分析、灰色预测GM(1,1)、GM(1,1)残差模型——基于Python实现

关联度分析

import numpy as np
import pandas as pd
#关联度分析
#参考序列
Y_0=[170,174,197,216.4,235.8]
#被比较序列
Y_1=[195.4,189.9,187.2,205,222.7]
Y_2=[308,310,295,346,367]#初始化序列
X_0=np.array(Y_0)/Y_0[0]
X_1=np.array(Y_1)/Y_1[0]
X_2=np.array(Y_2)/Y_2[0]#计算绝对差序列
deta1=np.abs(X_0-X_1)
deta2=np.abs(X_0-X_2)#计算deta1,deta2最小值
min1=np.min([np.min(deta1),np.min(deta2)])
max1=np.max([np.max(deta1),np.max(deta2)])#计算关联系数yita
rio=0.5
yita1 = [(min1 + rio * max1) / (deta1[i] + rio * max1) for i in range(len(deta1))]#计算关联系数yita1
yita2 = [(min1 + rio * max1) / (deta2[i] + rio * max1) for i in range(len(deta2))]#计算关联系数yita2
# #计算关联度
r1=np.mean(yita1)
r2=np.mean(yita2)
# 创建DataFrame
df = pd.DataFrame({'yita1': yita1,'yita2': yita2
})
#更改索引
df.index = ['1','2','3','4','5']print('关联度分析:')
print(df)
#输出关联度
print('关联度:',r1,r2)
关联度分析:yita1     yita2
1  1.000000  1.000000
2  0.705293  0.878928
3  0.381163  0.380878
4  0.355909  0.452620
5  0.333333  0.387478
关联度: 0.5551396262321364 0.6199809489771715

灰色预测GM(1,1)模型

from math import exp
#原始序列
X_0=(6,20,40,25,45,35,21,14,18,15.5,17,15)
#累加生成序列
X_1 = np.cumsum(X_0)
#print('累加生成序列:', X_1)
#构造矩阵B和数据向量Y
B = np.zeros((len(X_1)-1,2))
Y = X_0[1:]
for i in range(len(X_1)-1):B[i][0] = -0.5*(X_1[i]+X_1[i+1])B[i][1] = 1#print('矩阵B:', B)
#print('数据向量Y:', Y)
#计算参数a,b
A = np.dot(np.dot(np.linalg.inv(np.dot(B.T,B)),B.T),Y)
a = A[0]
miu = A[1]
#计算预测模型
X_1_predict = np.zeros(len(X_0))
X_1_predict[0] = X_0[0]
for i in range(1, len(X_0)):X_1_predict[i] = ((X_0[0] - miu / a) * exp(-a * i) + miu / a)
#预测方程式
print('预测方程式:', 'X_1_(k+1) = ', X_0[0]- miu/ a, '*exp(-', a, '*i) +', miu/ a)
预测方程式: X_1_(k+1) =  -476.05668934240276 *exp(- 0.0746651965600655 *i) + 482.05668934240276

模型检验

#残差检验
X_1_predict = np.zeros(len(X_0))
X_1_predict[0] = X_0[0]
for i in range(1,len(X_0)):X_1_predict[i] = ((X_0[0]-miu/a)*exp(-a*i)+miu/a)print('预测值:', X_1_predict)
#累减生成序列X_0_predict
X_0_predict = np.zeros(len(X_0))
X_0_predict[0] = X_0[0]
for i in range(1,len(X_0)):X_0_predict[i] = X_1_predict[i] - X_1_predict[i-1]#累减生成序列
print('累减生成序列:', X_0_predict)
预测值: [  6.          40.25030314  72.03643912 101.53569452 128.91260092154.31985252 177.8991578  199.78202993 220.09052023 238.93789892256.42928694 272.66224218]
累减生成序列: [ 6.         34.25030314 31.78613597 29.4992554  27.3769064  25.407251623.57930529 21.88287213 20.30849029 18.8473787  17.49138802 16.23295524]
# X_0_predict
#计算绝对误差
error = np.abs(X_0_predict-X_0)
print('绝对误差:', error)
绝对误差: [ 0.         14.25030314  8.21386403  4.4992554  17.6230936   9.59274842.57930529  7.88287213  2.30849029  3.3473787   0.49138802  1.23295524]
#计算相对误差
error_rate = error/X_0
#输出相对误差,保留四位小数,输出百分比
print('相对误差:', np.round(error_rate,4)*100,'%')
相对误差: [ 0.   71.25 20.53 18.   39.16 27.41 12.28 56.31 12.82 21.6   2.89  8.22] %
#输出检验表,包括原始序列,预测序列,残差序列,绝对误差,相对误差
df = pd.DataFrame({'原始序列': X_0,'预测序列': X_1_predict,'残差序列': X_0_predict,'绝对误差': error,'相对误差': error_rate
})
df.index = ['1','2','3','4','5','6','7','8','9','10','11','12']
print('检验表:')
print(df)
检验表:原始序列        预测序列       残差序列       绝对误差      相对误差
1    6.0    6.000000   6.000000   0.000000  0.000000
2   20.0   40.250303  34.250303  14.250303  0.712515
3   40.0   72.036439  31.786136   8.213864  0.205347
4   25.0  101.535695  29.499255   4.499255  0.179970
5   45.0  128.912601  27.376906  17.623094  0.391624
6   35.0  154.319853  25.407252   9.592748  0.274079
7   21.0  177.899158  23.579305   2.579305  0.122824
8   14.0  199.782030  21.882872   7.882872  0.563062
9   18.0  220.090520  20.308490   2.308490  0.128249
10  15.5  238.937899  18.847379   3.347379  0.215960
11  17.0  256.429287  17.491388   0.491388  0.028905
12  15.0  272.662242  16.232955   1.232955  0.082197
相对误差大于于0.5%,模型检验不通过

GM(1,1)残差模型

#残差模型进行修正
#对erroe序列进行GM(1,1)模型预测
#原始序列
X_0 = error
#累加生成序列
X_1 = np.cumsum(X_0)
#构造矩阵B和数据向量Y
B = np.zeros((len(X_1)-1,2))
Y = X_0[1:]
for i in range(len(X_1)-1):B[i][0] = -0.5*(X_1[i]+X_1[i+1])B[i][1] = 1
#计算参数a,b
A = np.dot(np.dot(np.linalg.inv(np.dot(B.T,B)),B.T),Y)
a = A[0]
miu = A[1]
#计算预测模型
X_1_predict = np.zeros(len(X_0))
X_1_predict[0] = X_0[0]
for i in range(1, len(X_0)):X_1_predict[i] = ((X_0[0] - miu / a) * exp(-a * i) + miu / a)
# #预测方程式
print('预测方程式:', 'X_1_(k+1) = ', X_0[0]- miu/ a, '*exp(-', a, '*k) +', miu/ a)
预测方程式: X_1_(k+1) =  -47.4894117559714 *exp(- 0.21716818506240565 *k) + 47.4894117559714
#修正后的模型为原始模型加上求导后的方程式
# Differentiate the prediction equation with respect to k
X_1_predict_derivative = np.zeros(len(X_0))for i in range(1, len(X_0)):deta3= 1 if (i + 1) >= 2  else 0X_1_predict_derivative[i] = -a * (X_0[0] - miu / a) * exp(-a * (i-1)) * deta3# Corrected model by adding the differentiated equation to the original model
X_1_corrected = X_1_predict + X_1_predict_derivativeprint('修正后的模型:', X_1_corrected)
#输出修正后的模型方程式
print('修正后的模型方程式:', 'X_1_(k+1) = ', X_0[0]- miu/ a, '*exp(-', a, '*k) +', miu/ a, ' - ', -a*(X_0[0] - miu/a), 'deta(k-1)*exp(-',a, '*k) ')
#输出修正后的模型方程式,分开为k>=2,k<2
print('修正后的模型方程式:', 'X_1_(k+1) = ', X_0[0]- miu/ a, '*exp(-', a, '*k) +', miu/ a, ' - ', -a*(X_0[0] - miu/a), 'deta(k-1)*exp(-',a, '*(k-1)) ', 'k>=2')
print('修正后的模型方程式:', 'X_1_(k+1) = ', X_0[0]- miu/ a, '*exp(-', a, '*k) +', miu/ a, 'k<2')
修正后的模型: [ 0.         19.58337881 25.03078704 29.41483178 32.94308733 35.7826083638.06783956 39.90698129 41.38711264 42.57831436 43.53698707 44.3085217 ]
修正后的模型方程式: X_1_(k+1) =  -47.4894117559714 *exp(- 0.21716818506240565 *k) + 47.4894117559714  -  10.31318936072558 deta(k-1)*exp(- 0.21716818506240565 *k) 
修正后的模型方程式: X_1_(k+1) =  -47.4894117559714 *exp(- 0.21716818506240565 *k) + 47.4894117559714  -  10.31318936072558 deta(k-1)*exp(- 0.21716818506240565 *(k-1))  k>=2
修正后的模型方程式: X_1_(k+1) =  -47.4894117559714 *exp(- 0.21716818506240565 *k) + 47.4894117559714 k<2
#残差检验
X_1_corrected
#累减生成序列
X_0_corrected = np.zeros(len(X_1_corrected))
X_0_corrected[0] = X_1_corrected[0]
for i in range(1, len(X_1_corrected)):X_0_corrected[i] = X_1_corrected[i] - X_1_corrected[i-1]print('累减生成序列:', X_0_corrected)
累减生成序列: [ 0.         19.58337881  5.44740823  4.38404474  3.52825555  2.839521032.2852312   1.83914174  1.48013134  1.19120172  0.95867271  0.77153463]
# X_0_predict
#计算绝对误差
error = np.abs(X_0_corrected-X_0)
print('绝对误差:', error)
绝对误差: [0.         6.11131907 4.55574461 1.15568474 7.53661955 1.187444440.14100682 2.03499833 0.386519   0.73109566 1.00028958 0.07505627]
#计算相对误差
X_0=(6,20,40,25,45,35,21,14,18,15.5,17,15)
error_rate = error/X_0
#输出相对误差,保留四位小数,输出百分比
print('相对误差:', np.round(error_rate,4)*100,'%')
相对误差: [ 0.   30.56 11.39  4.62 16.75  3.39  0.67 14.54  2.15  4.72  5.88  0.5 ] %
#输出检验表,包括原始序列,预测序列,残差序列,绝对误差,相对误差
df = pd.DataFrame({'原始序列': X_0,'预测序列': X_1_corrected,'残差序列': X_0_corrected,'绝对误差': error,'相对误差': error_rate
})
df.index = ['1','2','3','4','5','6','7','8','9','10','11','12']
print('检验表:')
print(df)
检验表:原始序列       预测序列       残差序列      绝对误差      相对误差
1    6.0   0.000000   0.000000  0.000000  0.000000
2   20.0  19.583379  19.583379  6.111319  0.305566
3   40.0  25.030787   5.447408  4.555745  0.113894
4   25.0  29.414832   4.384045  1.155685  0.046227
5   45.0  32.943087   3.528256  7.536620  0.167480
6   35.0  35.782608   2.839521  1.187444  0.033927
7   21.0  38.067840   2.285231  0.141007  0.006715
8   14.0  39.906981   1.839142  2.034998  0.145357
9   18.0  41.387113   1.480131  0.386519  0.021473
10  15.5  42.578314   1.191202  0.731096  0.047167
11  17.0  43.536987   0.958673  1.000290  0.058841
12  15.0  44.308522   0.771535  0.075056  0.005004

修正后的模型检验通过,模型预测准确

预测

#预测13月份的数据
X_13_predict = ((X_0[0]-miu/a)*exp(-a*12)+miu/a)
print('13月份的预测值:', X_13_predict)

13月份的预测值: 76.46124387795606

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

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

相关文章

Java基础知识(五)

文章目录 ObjectObject 类的常见方法有哪些&#xff1f; 和 equals() 的区别hashCode() 有什么用&#xff1f;为什么要有 hashCode&#xff1f;为什么重写 equals() 时必须重写 hashCode() 方法&#xff1f; 参考链接 Object Object 类的常见方法有哪些&#xff1f; Object 类…

【大模型】LLaMA: Open and Efficient Foundation Language Models

链接&#xff1a;https://arxiv.org/pdf/2302.13971 论文&#xff1a;LLaMA: Open and Efficient Foundation Language Models Introduction 规模和效果 7B to 65B&#xff0c;LLaMA-13B 超过 GPT-3 (175B)Motivation 如何最好地缩放特定训练计算预算的数据集和模型大小&…

解决 Gradle 报错:`Plugin with id ‘maven‘ not found` 在 SDK 开发中的问题

在 SDK 开发过程中&#xff0c;使用 Gradle 构建和发布 SDK 是常见的任务。在将 SDK 发布为 AAR 或 JAR 包时&#xff0c;你可能会使用 apply plugin: maven 来发布到本地或远程的 Maven 仓库。但是&#xff0c;随着 Gradle 版本的更新&#xff0c;特别是从 Gradle 7 版本开始&…

2024 RISC-V中国峰会 安全相关议题汇总

安全之安全(security)博客目录导读 第四届 RISC-V 中国峰会(RISC-V Summit China 2024)于8月21日至23日在杭州成功举办。此次峰会汇聚了 RISC-V 国际基金会、百余家重点企业及研究机构,约3000人线下参与,并在19日至25日间举办了超过20场同期活动,与全球开发者共同…

Pyhon基础数据结构(列表)【蓝桥杯】

a [1,2,3,4,5] a.reverse() print("a ",a) a.reverse() print("a ",a)# 列表 列表&#xff08;list&#xff09;有由一系列按照特定顺序排序的元素组成 列表是有顺序的&#xff0c;访问任何元素需要通过“下标访问” 所谓“下标”就是指元素在列表从左…

【Visual Studio系列教程】如何在 VS 上编程?

上一篇博客中&#xff0c;我们介绍了《什么是 Visual Studio&#xff1f;》。本文&#xff0c;我们来看第2篇《如何在 VS 上编程&#xff1f;》。阅读本文大约10 分钟。我们会向文件中添加代码&#xff0c;了解 Visual Studio 编写、导航和了解代码的简便方法。 本文假定&…

MySQL更换瀚高语法更换

MySQL更换瀚高语法更换 一、前言二、语句 一、前言 水一篇,mysql更换瀚高之后&#xff0c;一些需要更换的语法介绍 > 二、语句 MySQL瀚高MySQL用法瀚高用法说明ifnull(x,y)coalesce(x,y)相同相同用于检查两个表达式并返回第一个非空表达式。如果第一个表达式不是 NULL&…

[ 跨域问题 ] 前后端以及服务端 解决跨域的各种方法

这篇文章主要介绍了跨域问题&#xff0c;包括其定义、产生原因及各种解决方法。原因是浏览器安全策略限制&#xff0c;方法有 JSONP、CORS、Domain、 postMessage、Nginx配置、.NetCore配置。 前言 什么是跨域问题? 在Web应用中&#xff0c;当一个网页的脚本试图去请求另一个域…

论文阅读——Intrusion detection systems using longshort‑term memory (LSTM)

一.基本信息 论文名称&#xff1a;Intrusion detection systems using longshort‑term memory (LSTM) 中文翻译&#xff1a;基于长短期记忆(LSTM)的入侵检测系统 DOI&#xff1a;10.1186/s40537-021-00448-4 作者&#xff1a;FatimaEzzahra Laghrissi1* , Samira Douzi2*, Kha…

大数据挖掘期末复习

大数据挖掘 数据挖掘 数据挖掘定义 技术层面&#xff1a; 数据挖掘就是从大量的、不完全的、有噪声的、模糊的、随机的实际应用数据中&#xff0c;提取隐含在其中、人们事先不知道的、但又潜在有用的信息的过程。 数据准备环节 数据选择 质量分析 数据预处理 数据仓库 …

搭建es环境

centos7搭建elasticsearch环境 首先考虑使用 Docker 来安装 Elasticsearch、Kibana 和 Logstash。在安装过程中&#xff0c;可能会遇到一些问题&#xff0c;但通过适当的方法可以解决。 docker pull docker.elastic.co/elasticsearch/elasticsearch:8.14.3 首先创建一个网络&a…

k8s 学习笔记之 k8s 存储管理

文章目录 概述卷卷的常用类型emptyDir边车容器 HostPathnfsPV/PVC静态供给 PV 和 PVC创建静态 PV创建 pvc创建 pod 应用 pvc 动态供给 PV 和 PVC创建 StorageClass创建 pvc创建 pod 使用 pvc PV 的生命周期 内置存储对象ConfigMapSecret 配置文件自动重新加载方案**1. 应用内动…

等精度频率计的设计

目录 主控电路设计 频率测量与计算电路设计 顶层电路设计 功能扩展及应用 频率测量的三种方法 等精度频率计通过控制闸门信号与被测信号同步&#xff0c;消除了直接测频法中的计数误差&#xff0c;因而在被测信号频率范围内测量精度基本上是恒定的。 本节以设计能够测量信号…

Matlab使用深度网络设计器为迁移学习准备网络

迁移学习通过对预训练网络进行微调&#xff0c;使深度学习模型能在少量数据下快速适应新任务&#xff0c;类似于“举一反三”&#xff0c;而不需要从头训练。本文使用matlab自带的深度网络设计器&#xff0c;可以便捷地修改预训练网络进行迁移学习&#xff0c;通过对预训练网络…

基于yolov8、yolov5的电塔缺陷检测识别系统(含UI界面、训练好的模型、Python代码、数据集)

摘要&#xff1a;电塔缺陷检测在电力设备巡检、运行维护和故障预防中起着至关重要的作用&#xff0c;不仅能帮助相关部门实时监测电塔运行状态&#xff0c;还为智能化检测系统提供了可靠的数据支撑。本文介绍了一款基于YOLOv8、YOLOv5等深度学习框架的电塔缺陷检测模型&#xf…

蒙特卡洛模拟 详解

蒙特卡洛模拟详解 蒙特卡洛模拟&#xff08;Monte Carlo Simulation&#xff09; 是一种利用随机抽样和统计计算来模拟复杂系统或过程的方法。它尤其适用于分析不确定性、复杂数学问题以及概率分布模型。 蒙特卡洛模拟的基本原理 蒙特卡洛模拟的核心思想是通过 重复随机采样 …

代理商培训新策略:内部知识库的高效运用

在竞争激烈的市场环境中&#xff0c;代理商作为企业与终端消费者之间的关键纽带&#xff0c;其专业能力和服务质量直接影响着企业的市场表现和品牌形象。因此&#xff0c;如何对代理商进行高效、系统的培训&#xff0c;以提升其业务能力和服务水平&#xff0c;成为企业亟需解决…

C++手写PCD文件

前言 一般pcd读写只需要调pcl库接口&#xff0c;直接用pcl的结构写就好了 这里是不依赖pcl库的写入方法 主要是开头写一个header 注意字段大小&#xff0c;类型不要写错     结构定义 写入点需要与header中定义一致 这里用的RoboSense的结构写demo 加了个1字节对齐 stru…

Spring 框架中哪些接口可以创建对象

Spring 框架中哪些接口可以创建对象 在 Spring 框架中&#xff0c;向 IOC 容器中添加 Bean 主要有以下几种接口和方式。Spring 提供了不同的手段来实现对象的创建和管理&#xff0c;涵盖了不同的需求和场景。以下是几种常用的接口和方式&#xff1a; 1. BeanFactory 接口 Be…

uniapp 相关的swiper的一些注意事项

先推荐一个一个对标pc端swiper的uniapp版本 zebra-swiper 缺点是自定义分页器不是很好处理 不知道怎么弄 优点:可以进行高度自适应 &#xff08;这个uniapp原生swiper没有 只能动态修改 采用js 或者只有几种固定高度时采用变量修改&#xff09; <swiperref"lifeMiddle…