灰色关联分析模型

灰色系统

系统是黑色:信息少;白色:信息多;灰色:介于二者之间

关联分析

分析因素与因素之间的联系

step

1.确定母序列

反应系统行为特征的数据序列,类似因变量\(Y\)​,有 \[ Y=\begin{bmatrix}y_1,y_2,\cdots,y_n\end{bmatrix}^T \]

2.确定子序列

子序列(又称比较序列、子指标) 影响系统行为的因素组成的数数据序列,类似于自变量 \(X\),记为 \[X_{nm}=\begin{bmatrix}x_{11}&x_{12}&\cdots&x_{1m}\\x_{21}&x_{22}&\cdots&x_{2m}\\\vdots&\vdots&\ddots&\vdots\\x_{n1}&x_{n2}&\cdots&x_{nm}\end{bmatrix}\]

3.数据预处理

由于不同要素具有不同量纲和数据范围,因此我们要对他们进行预处理去量纲,将他们统一到近似的范围内,先求出每个指标的均值,在用指标中的元素除以其均值 \[ \widetilde{y_k}=\frac{y_k}{\overline{y}},\overline{y}=\frac{1}{n}\sum_{k=1}^{n}y_k\qquad\widetilde{x_{ki}}=\frac{x_{ki}}{\overline{x_i}},\overline{x_i}=\frac{1}{n}\sum_{k=1}^{n}x_{ki}(i=1,2,\cdots,m) \]

4.计算灰色关联系数

计算子序列中各个指标与母序列的关联系数 \[ a=\min\limits_{i}\min\limits_{k}|x_{0}(k)-x_{i}(k)|, b=\max\limits_{i}\max\limits_{k}|x_{0}(k)-x_{i}(k)| \] 为两极最小差和最大差

构造: \[ \xi_{i}(k)=y(x_{0}(k),x_{i}(k))=\frac{a+\rho b}{|x_{0}(k)-x_{i}(k)|+\rho b} \] 其中\(\rho\)为分辨系数,一般取0.5

5.计算关联度

\[ r_i=\frac{1}{n}\sum_{k=1}^{n}\xi_i\left(k\right)=\frac{1}{n}\sum_{k=1}^{n}y\left(x_0\left(k\right),x_i\left(k\right)\right) \]

6.计算指标权重

对关联度进行归一化 \[ w_i=\frac{r_i}{\sum_{k=1}^mr_k}\big(i=1,2,\cdots,m\big) \]

py代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import numpy as np

# 请输入初始矩阵[[55, 24, 10], [65, 38, 22], [75, 40, 18], [100, 50, 20]]
A = np.array(eval(input('请输入初始矩阵='))) # 假设输入的形式是合法的Python列表形式

# 求出每一列的均值以供后续的数据预处理
Mean = np.mean(A, axis=0)

# 预处理后的矩阵
A_norm = A / Mean

print('预处理后的矩阵为:')
print(A_norm)

# 母序列
Y = A_norm[:, 0]

# 子序列
X = A_norm[:, 1:]

# 计算|X0-Xi|矩阵(在这里我们把X0定义为了Y)
absX0_Xi = np.abs(X - np.tile(Y.reshape(-1, 1), (1, X.shape[1])))

# 计算两级最小差a
a = np.min(absX0_Xi)

# 计算两级最大差b
b = np.max(absX0_Xi)

# 分辨系数取0.5
rho = 0.5

# 计算子序列中各个指标与母序列的关联系数
gamma = (a + rho * b) / (absX0_Xi + rho * b)

print('子序列中各个指标的灰色关联度分别为:')
print(np.mean(gamma, axis=0))


灰色关联分析模型
http://example.com/2025/07/28/灰色关联分析模型/
作者
Kiriao
发布于
2025年7月28日
许可协议