灰色关联分析模型
本文最后更新于 2025年7月28日 上午
25年暑假学习数模算法时做的一些笔记。
灰色系统
系统是黑色:信息少;白色:信息多;灰色:介于二者之间
关联分析
分析因素与因素之间的联系
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代码
代码
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))