Python 数学建模——灰色关联度分析

文章目录

    • 介绍
    • 原理
    • 代码实例

介绍

  灰色关联度分析,可以反映两个序列 X ( k ) X(k) X(k) Y ( k ) Y(k) Y(k) 之间的联系,用 r r r 表征。然而, r r r 的绝对大小并没有过多的意义,它的意义只在不同的 r r r 进行比较时体现。比如 X ( k ) , Y ( k ) X(k),Y(k) X(k),Y(k) 之间的灰色关联度为 r x y = 0.8 r_{xy}=0.8 rxy=0.8 X ( k ) , Z ( k ) X(k),Z(k) X(k),Z(k) 之间的灰色关联度为 r x z = 0.5 r_{xz}=0.5 rxz=0.5,根据 r x y > r x z r_{xy}>r_{xz} rxy>rxz 判断 X ( k ) , Y ( k ) X(k),Y(k) X(k),Y(k) 之间的关系相比于 X ( k ) , Z ( k ) X(k),Z(k) X(k),Z(k) 更为紧密。

在分析两个序列的关联性时,灰色关联度分析用处不大,因为不存在“比较”。此时反倒是可以用 Spearman 或者 Pearson 相关系数去衡量关联性,效果更佳。相比于 Pearson/Spearman 相关系数,灰色关联度分析更像是从折线图的形状上,分析两个变量之间的关联程度。

  据此,灰色关联度分析往往规定一个母序列 Y ( k ) ( k = 1 , 2 , ⋯ , n ) Y(k)(k=1,2,\cdots,n) Y(k)(k=1,2,,n),并且设置 m m m 个子序列 X i ( k ) ( k = 1 , 2 , ⋯ , n ; i = 1 , 2 , ⋯ , m ) {{X}_{i}}(k)(k=1,2,\cdots ,n;i=1,2,\cdots ,m) Xi(k)(k=1,2,,n;i=1,2,,m),并探讨每个子序列与母序列关联的紧密程度,依据是每个子序列与母序列之间的灰色关联度。
  你可能会产生疑问,灰色关联度分析能做到的,Spearman 和 Pearson 相关系数都可以做到啊,只需将依据改为每个子序列与母序列之间的 Peason/Spearman 相关系数。然而实际情况是,Peason/Spearman 相关系数的区分性太弱了,我将以一个例子说明 Peason/Spearman 相关系数不合适的原因。


 下表为某地区国内生产总值的统计数据(以百万元计),问该地区从 2000 2000 2000 年到 2005 2005 2005 年之间哪一种产业对 GDP 总量影响最大。

年份GDP 总量第一产业第二产业第三产业
2000 2000 2000 1988 1988 1988 386 386 386 839 839 839 763 763 763
2001 2001 2001 2061 2061 2061 408 408 408 846 846 846 808 808 808
2002 2002 2002 2335 2335 2335 422 422 422 960 960 960 953 953 953
2003 2003 2003 2750 2750 2750 482 482 482 1258 1258 1258 1010 1010 1010
2004 2004 2004 3356 3356 3356 511 511 511 1577 1577 1577 1268 1268 1268
2005 2005 2005 3806 3806 3806 561 561 561 1893 1893 1893 1352 1352 1352

点击下载路径,Ctrl+S下载上表所示灰色关联度.csv表单。

  我们可以很方便地画出折线图,先观察一下趋势,发现都是逐年增加的:

  视图计算 Peason/Spearman 相关系数,结果是:

  • 国内生产总值分别对三种产业的 Pearson 相关系数是:[0.98845683 0.99738217 0.98954068]
  • 国内生产总值分别对三种产业的 Spearman 相关系数是:[1. 1. 1. ]

  显然 Peason/Spearman 相关系数分辨能力太弱,所以不适合运用。

原理

  在使用灰色关联度重新解决上面这个问题之前,先介绍一下灰色关联度的计算方法。在确定母序列 Y ( k ) ( k = 1 , 2 , ⋯ , n ) Y(k)(k=1,2,\cdots,n) Y(k)(k=1,2,,n) 和子序列 X i ( k ) ( k = 1 , 2 , ⋯ , n ; i = 1 , 2 , ⋯ , m ) {{X}_{i}}(k)(k=1,2,\cdots ,n;i=1,2,\cdots ,m) Xi(k)(k=1,2,,n;i=1,2,,m) 后,还需要进行以下几步:

  1. 无量纲化处理。从下面两种不同的方式中选择一种即可:
    • 初值化处理: x i ( k ) = x i ( k ) x i ( 1 ) ( k = 1 , 2 , ⋯ , n ; i = 1 , 2 , ⋯ , m ) {{x}_{i}}(k)=\cfrac{{{x}_{i}}(k)}{{{x}_{i}}(1)}\quad(k=1,2,\cdots ,n;i=1,2,\cdots ,m) xi(k)=xi(1)xi(k)(k=1,2,,n;i=1,2,,m)
    • 均值化处理: x i ( k ) = x i ( k ) x ‾ i ( k = 1 , 2 , ⋯ , n ; i = 1 , 2 , ⋯ , m ) {{x}_{i}}(k)=\cfrac{{{x}_{i}}(k)}{\overline{x}_i}\quad(k=1,2,\cdots ,n;i=1,2,\cdots ,m) xi(k)=xixi(k)(k=1,2,,n;i=1,2,,m)
  2. 计算关联系数
    ξ i ( k ) = min ⁡ i min ⁡ k ∣ y ( k ) − x i ( k ) ∣ + ρ max ⁡ i max ⁡ k ∣ y ( k ) − x i ( k ) ∣ ∣ y ( k ) − x i ( k ) ∣ + ρ max ⁡ i max ⁡ k ∣ y ( k ) − x i ( k ) ∣ {{ξ}_{i}}(k)=\frac{{\min_{i}{\min_{k}|}}y(k)-{{x}_{i}}(k)|+\rho {\max_{i}{\max_{k}|}}y(k)-{{x}_{i}}(k)|}{|y(k)-{{x}_{i}}(k)|+\rho {\max_{i}{\max_{k}|}}y(k)-{{x}_{i}}(k)|} ξi(k)=y(k)xi(k)+ρmaximaxky(k)xi(k)miniminky(k)xi(k)+ρmaximaxky(k)xi(k)其中分辨系数 ρ ∈ ( 0 , + ∞ ) \rho\in(0,+\infty) ρ(0,+),值越小分辨能力越大,一般在 ( 0 , 1 ) (0,1) (0,1) 内取值。当 ρ < 0.5463 \rho<0.5463 ρ<0.5463 时,分辨能力最好。一般取 ρ = 0.5 \rho=0.5 ρ=0.5
  3. 计算关联度。因为关联系数是比较数列与参考数列在各个时刻(即曲线中的各点)的关联程度值,所以它的数不止一个,而信息过于分散不便于进行整体性比较。因此有必要将各个时刻的关联系数集中为一个值,即求其平均值,作为比较数列与参考数列间关联程度的数量表示: r i = 1 n ∑ k = 1 n ξ i ( k ) i = 1 , 2 , ⋯ , m {{r}_{i}}=\frac{1}{n}\sum_{k=1}^{n}{{{ξ}_{i}}}(k)\quad i=1,2,\cdots ,m ri=n1k=1nξi(k)i=1,2,,m
  4. 关联度排序。根据 r i r_i ri 进行排序,就可以得到母序列和各个子序列的关联程度大小。

代码实例

  介绍完灰色关联度 r r r 的计算方法后,我们就用灰色关联度重新解决上面的例子,数据存储在灰色关联度.csv文件中。这里取 ρ = 0.5 \rho=0.5 ρ=0.5,并且无量纲化处理时使用均值化处理

import pandas as pdx = pd.read_csv('灰色关联度.csv')
x = x.iloc[:, 1:].T# 1、数据均值化处理
x_mean = x.mean(axis=1)
for i in range(x.index.size):x.iloc[i, :] = x.iloc[i, :] / x_mean[i]# 2、提取参考队列和比较队列
ck = x.iloc[0, :]
cp = x.iloc[1:, :]# 比较队列与参考队列相减
t = pd.DataFrame()
for j in range(cp.index.size):temp = pd.Series(cp.iloc[j, :] - ck)t = t.append(temp, ignore_index=True)# 求最大差和最小差
mmax = t.abs().max().max()
mmin = t.abs().min().min()
rho = 0.5
# 3、求关联系数
ksi = ((mmin + rho * mmax) / (abs(t) + rho * mmax))# 4、求关联度
r = ksi.sum(axis=1) / ksi.columns.size# 5、关联度排序,得到结果r3>r2>r1
result = r.sort_values(ascending=False)print(result)
"""
关联度
r3 = 0.757300 (第三季度)
r2 = 0.624296 (第二季度)
r1 = 0.508432 (第一季度)
"""

  尝试了 ρ ∈ ( 0 , 2 ) \rho\in(0,2) ρ(0,2) 的一些情况,结果都是第三季度的关联度最大,如左图。右图是无量纲化处理改为初值化处理的结果。

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

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

相关文章

Java设计模式【命令模式】-行为型

1. 介绍 命令模式&#xff08;Command Pattern&#xff09; 是一种行为型设计模式&#xff0c;它将一个请求封装为一个对象&#xff0c;从而使我们可以用不同的请求对客户端进行参数化&#xff0c;并且支持请求的排队、记录日志以及撤销、重做等功能。命令模式将请求的发送者与…

微信小程序路由跳转之间的区别

navigateTo&#xff1a; 功能描述&#xff1a; navigateTo用于保留当前页面&#xff0c;跳转到应用内的某个页面。但是不能跳到 tabbar 页面。 页面栈变化&#xff1a; 当使用navigateTo进行页面跳转时&#xff0c;当前页面会被推入页面栈中&#xff0c;但不会被销毁&#xff0…

掌握Go语言中的时间与日期操作

Go语言中的时间与日期操作 在编写程序时&#xff0c;处理时间和日期看似是一项无关紧要的任务&#xff0c;但在需要同步多个任务或从文本文件中读取时间时&#xff0c;它的重要性便凸显出来。Go语言中的time包为我们提供了丰富的时间与日期操作功能。本文将详细介绍如何在Go语…

C语言蓝桥杯:语言基础

竞赛常用库函数 最值查询 min_element和max_element在vector(迭代器的使用) nth_element函数的使用 例题lanqiao OJ 497成绩分析 第一种用min_element和max_element函数的写法 第二种用min和max的写法 二分查找 二分查找只能对数组操作 binary_search函数&#xff0c;用于查找…

提升效率必备,掌握这些Shell文本处理技能!

Shell脚本是Linux系统里的一项基本功&#xff0c;就算它的语法看起来有点奇怪&#xff0c;读起来也不是特别顺畅&#xff0c;但在一些情况下&#xff0c;它仍然是最能干的解决办法。学好Shell脚本&#xff0c;不仅让你对Linux系统了解更深&#xff0c;还能让你手快地做好很多日…

python的特性,以及和Java的区别

两者各有各的魅力&#xff0c;像是编程语言界的两个明星选手。咱们先看看Python的几个重要特性&#xff0c;然后来个友好对比&#xff0c;看看Java和Python在哪些方面有“性格差异”吧&#xff01; Python的主要特性 简洁易读&#xff1a; Python最出名的就是它的简洁性&#…

使用程序方式获取与处理MySQL表数据

8.1  执行多条语句获取 MySQL 表数据 8.1.1  MySQL 中的常量 8.1.2  MySQL 中的变量 1&#xff0e;用户变量 用户可以在表达式中使用自己定义的变量&#xff0c;这样的变量称为用户变量。 用户变量在使用前必须定义和初始化&#xff0c;如果使用没有初始化的变量&#x…

Python判断两张图片的相似度

在Python中&#xff0c;判断两张以numpy的ndarray格式存储的图片的相似度&#xff0c;通常可以通过多种方法来实现&#xff0c;包括但不限于直方图比较、像素差比较、结构相似性指数&#xff08;SSIM&#xff09;、特征匹配等。以下是一些常见方法的简要介绍和示例代码。 1. 像…

TypeScript系列:续篇 - 对象类型(含数组、元数组、函数)

在 TypeScript 中&#xff0c;对象类型用于定义对象的形状&#xff08;shape&#xff09;&#xff0c;即对象包含哪些属性以及这些属性的类型。 对象类型可以是具体的&#xff0c;也可以是抽象的&#xff0c;用于类型检查和类型推断。 对象类型的最基本形式&#xff1a;接口&…

数据库视图和索引

参考链接&#xff1a; 数据库的视图和索引的概念和区别_索引和视图的区别-CSDN博客 MySQL 数据库--索引&#xff08;理论详解及实例演示&#xff09;_数据库索引-CSDN博客 1.视图 视图是从一个或多个表中导出来的表&#xff0c;是一种不是一种真正存在的概念。这样&#xf…

CUDA int128相乘是怎么实现的

CUDA int128相乘是怎么实现的 一.指令对应关系1.cuda C代码2.PTX代码[二个int64]3.SASS指令[多个u32] 二.复现过程 CUDA int128相乘是怎么实现的 一.指令对应关系 1.cuda C代码 clock_t t0clock64(); __prof_trigger(0); int128_t r4r2*r3; //二个int128_t相加 __prof_trig…

Android Glide:让图片加载从未如此简单

在 Android 开发中,图片加载一直是一个关键环节。无论是从网络还是本地加载图片,都需要考虑到性能、内存管理和用户体验等多个方面。而在这方面,Glide 成为了众多开发者的首选库之一。本文将带你深入了解 Glide 的强大之处,并介绍如何在项目中快速集成和使用 Glide。 为什…

外包干了三年,快要废了。。。

先简单说一下自己的情况&#xff0c;普通本科&#xff0c;在外包干了3年多的功能测试&#xff0c;这几年因为大环境不好&#xff0c;我整个人心惊胆战的&#xff0c;怕自己卷铺盖走人了&#xff0c;我感觉自己不能够在这样蹉跎下去了&#xff0c;长时间呆在一个舒适的环境真的会…

算法刷题:300. 最长递增子序列、674. 最长连续递增序列、718. 最长重复子数组

300. 最长递增子序列 1.dp定义&#xff1a;dp[i]表示i之前包括i的以nums[i]结尾的最长递增子序列的长度 2.递推公式&#xff1a;if (nums[i] > nums[j]) dp[i] max(dp[i], dp[j] 1); 注意这里不是要dp[i] 与 dp[j] 1进行比较&#xff0c;而是我们要取dp[j] 1的最大值…

JAVA 的excel数据批量导入解析 现在都用什么API工具 Apache POI 、EasyExcel 、easypoi有什么区别

&#x1f4dd;个人主页&#x1f339;&#xff1a;个人主页 ⏩收录专栏⏪&#xff1a;SpringBoot &#x1f339;&#x1f339;期待您的关注 &#x1f339;&#x1f339;&#xff0c;让我们共同进步&#xff01; 在Java中&#xff0c;处理Excel数据批量导入解析时&#xff0c;常…

高空抛物检测算法的应用场景解析

高空抛物事件频发&#xff0c;对公众安全构成严重威胁。无论是居民区还是商业中心&#xff0c;从高层建筑中丢弃物品都可能导致人员伤亡和财产损失。传统的监控手段多以事后追溯为主&#xff0c;无法在事发时及时预警和干预。为应对这一难题&#xff0c;视觉分析技术的发展为高…

全国历年高考真题2008-2024

目录 分享链接&#xff1a; ⬇️⬇️⬇️ 点击下载

单元测试之mock使用

一、简介 一般程序中A类的m1方法调用B类的m2方法&#xff0c;而B类的m2方法又调用了C类的m3方法以此类推等等&#xff0c;而其中的某个方法的一些数据又需要调用其它服务或者查询数据库&#xff0c;一般单元测试只针对某个功能进行测试&#xff0c;但是如上面的情况在做单元测试…

Day9 | Java框架 | SpringBoot

Day9 | Java框架 | SpringBoot SpringBoot简介入门程序概述起步依赖 基础配置配置文件格式&#xff1a;3种yaml语法规则yaml数据读取三种格式 多环境启动配置文件参数命令行参数多环境开发控制&#xff1a;Maven & SpringBoot 多环境兼容 配置文件分类&#xff1a;4种 整合…

蓝桥杯4. Fizz Buzz 经典问题

题目描述 给定一个整数 NN&#xff0c;从 1 到 NN 按照下面的规则返回每个数&#xff1a; 如果这个数被 3 整除&#xff0c;返回 Fizz。如果这个数被 5 整除&#xff0c;返回 Buzz如果这个数能同时被 3 和 5 整除&#xff0c;返回 FizzBuzz。如果这个数既不能被 3 也不能被 5…