【数学建模方法及python实现】灰色关联

灰色关联分析是什么?

灰色关联分析,首先被称为”灰色“,给人一种模糊分析,浑水摸鱼的感觉,实际上并不如此。灰色的定义来自于控制论中的灰色系统,别被这个定义吓到,在控制论中,我们用“黑”表示信息未知,系统间的元素间关系未知,用“白”表示信息完全明确,系统间的元素间关系确定,用“灰”表示部分信息明确、部分信息不明确。 而这种这种既有规律可循,又有不可预见性的东西,就是灰色系统。 一个很简单的例子,郭子说的如来,就是一个很高级的灰色系统。

开个玩笑,接下来举个正常的例子。 比如说明明你舍友每天晚上都和你一起打游戏,但是他的学习成绩总是很好,他的成绩怎么考来的就是一个灰色系统。可能你通过偷窥发现他并没有打游戏,而是请代练在和你虚空开黑,实际上偷偷学习;而且他每天趁你睡觉的时候精神抖擞学习,这个时候,你以为你对他的学习成绩的认知变成了白色系统,但是阻止他行为后,他仍然成绩很好。实际上你对他的了解还是一个灰色系统,因为你不知道他高中的时候就学完了大学的课程,现在根本不用学习......

讲到这里我们发现,实际上人类对世界上大多数的东西都是一知半解的,人类的感官是有限制的,所以看到听到闻到摸到的东西都只是它们信息的一部分,还不包括很多学科没有对它们进行研究,也有很多的未知规律我们没有关注,世界上大多数东西都是灰色系统,没想到吧,这里还有郭子。

灰色关联分析可以做什么?

  1. 灰色系统理论提出了对各子系统进行灰色关联度分析的概念。因此,灰色关联度分析对于一个系统发展变化态势提供了量化的度量,非常适合动态历程分析。

  2. 灰色关联分析研究的是系统的众多的影响因素中,哪些是主要因素,哪些是次要因素;哪些因素影响大,哪些因素影响小;哪些具有促进作用,哪些具有抑制作用等等。

  3. 无视数据量大小,数据分布,灰色关联分析对样本量的多少和样本有无规律都同样适用,而且计算量小,十分方便,更不会出现量化结果与定性分析结果不符的情况。

怎么做灰色关联分析?

灰色关联分析的基本思想是根据序列曲线几何形状的相似程度来判断其连系是否紧密。曲线越接近,相应序列之间的关联度就越大,反之就越小。

比如一下这个矩阵,想要计算这6位对象的工作状况进行综合分析

出自:https://www.cnblogs.com/aabbcc/p/9747715.html

首先上全代码,先保证跑出来的成就感

import numpy as np
data =  np.array([[1, 8, 9 ,8, 7, 5, 2, 9],
                   [2, 7, 8 ,7 , 5, 7, 3, 8],
                   [3, 9, 7, 9, 6, 6, 4, 7],
                   [4, 6, 8, 8, 8, 4, 3, 6],
                   [5, 8, 6, 6, 9, 8, 3, 8],
                   [6, 8, 9, 5, 7, 6, 4, 8]])
# 效益型指标标准化
for index in [i for i in range(0, 6)]:
    data[index] = (data[index] - np.min(data[index])) / (np.max(data[index]) - np.min(data[index]))
# 成本型指标标准化
for index in [i for i in range(1, 4)]:
    data[index] = (np.max(data[index]) - data[index]) / (np.max(data[index]) - np.min(data[index]))

best = np.array([np.max(data[index]) for index in range(data.shape[0])])
# 由于做了scale上句和下句等效
# best = np.ones(data.shape[0])

mmax = np.max(data.max(axis=1))
mmin = np.min(data.min(axis=1))
rho = 0.5
GRC = np.divide((mmin + rho * mmax), ((np.array([best]).T - data) + rho * mmax))
print('灰色关联系数矩阵:', GRC, sep='\n')

# 计算灰色加权关联度, 取等权重
w = np.ones(GRC.shape[0])/GRC.shape[0]
R = np.matmul(w, GRC)
print('灰色加权关联度: ', R)

下面开始介绍灰色关联理论公式部分: 1.根据分析目的确定分析指标体系
收集分析数据。设n个数据序列形成如下矩阵:

就如我们使用np.array构造出来的这个矩阵

import numpy as np
data =  np.array([[1, 8, 9 ,8, 7, 5, 2, 9],
                   [2, 7, 8 ,7 , 5, 7, 3, 8],
                   [3, 9, 7, 9, 6, 6, 4, 7],
                   [4, 6, 8, 8, 8, 4, 3, 6],
                   [5, 8, 6, 6, 9, 8, 3, 8],
                   [6, 8, 9, 5, 7, 6, 4, 8]])

其中m为指标的个数,

2.对指标数据进行无量纲化

由于系统中各因素的物理意义不同,导致数据的量纲也不一定相同,不便于比较,或在比较时难以得到正确的结论。因此在进行灰色关联度分析时,一般都要进行无量纲化的数据处理。 常用的无量纲化方法有:

均值化法

初值化法

和最简单的变换等

随后,我们获得了无量纲化后的数据序列,得到如下矩阵:

这里我们的代码用的是均值化法

# 指标标准化
for index in range(0, data.shape[1]):  # 更改为data.shape[1]以获取列数
    data[:, index] = (data[:, index] / data[:, index].mean())  # 直接使用data[:, index]对列进行操作
print(data)

3.确定参考数据列

参考数据列应该是一个理想的比较标准,可以以各指标的最优值(或最劣值)构成参考数据列,也可根据评价目的选择其它参照值.

  1. 如果是直接从数据中选择最优的数据组,可以直接按照数值大小顺序进行排序。比如,在AI大模型当中,我们常常将ChatGPT的性能做为参考数据列。

  1. 若是解决综合评价问题时则参考序列可能需要自己生成,通常选定每个指标或时间段中所有子序列中的最佳值组成的新序列为参考序列。比如,在高考的时候,我们以各科目满分为参考数据列。

参考数列记作:

  1. 计算与参考系数差距 接下来逐个计算每个被评价对象指标序列(比较序列)与参考序列对应元素的绝对差值,

#参考数据选择,这里因为是分数,直接选择全部满分
best = np.array([data[:,index].max() for index in range(data.shape[1])])
#计算差值
data1 = best - data

这是,调整后的data1

以及矩阵中的弟中弟和哥中哥

#计算矩阵最大最小值
mmax = np.max(data1.max(axis=1))
mmin = np.min(data1.min(axis=1))

  1. 计算灰色关联系数 这里我们定义一个数值ρ,ρ为分辨系数,0<ρ<1。若ρ越小,关联系数间差异越大,区分能力越强。这里ρ取0.5

实际上就是把矩阵的每一个值加上ρ最大值的作为分母去除分子的最小值加上ρ最大值,基本是这样。

从几何角度理解,这一步可以看作是考虑了分辨率影响后,将两个序列变化趋势映射到同一空间进行比较的结果。关联度越大意味着两个序列在形态上的相似度越高,反之则越低。

#计算灰色关联矩阵
rho = 0.5
GRC = np.divide((mmin + rho * mmax), (data1 + rho * mmax))
print('灰色关联系数矩阵:', GRC, sep='\n')

随后对每行取均值,即可得到每个人相对于最佳分数的关联系数了,也就是每个人的综合表现成绩。

#对每行去均值
R = np.mean(GRC, axis=1)
print(R)
#[0.73109309 0.69874046 0.7788156  0.69708089 0.79754511 0.83107976]

如果不同的科目有不同的权重,比如比较看重专业,则可以通过不同的加权来计算GRC,这里我们使用等权来计算

# 计算灰色加权关联度, 取等权重
w = np.ones(GRC.shape[0])/GRC.shape[0]
print(w)
R = np.matmul(w, GRC)
print('灰色加权关联度: ', R)
#权重[0.16666667 0.16666667 0.16666667 0.16666667 0.16666667 0.16666667]

#灰色加权关联度:  [0.57372257 0.81921937 0.84739959 0.76401192 0.74041005 0.71332064 0.76850304 0.81921937]
  • 29
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值