灰色关联度分析在Python中的实现与应用
师从江北
模型提出
模型的定义
关联分析步骤
关联分析例题
灰色关联综合评价
Python代码实现
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,这里选取第一列作为参考序列
Y = A_norm[:, 0]
# 子序列X,理论上应针对A_norm的其余列分别进行关联度计算,但现有逻辑已隐式比较所有其他列与Y
# 注意:下面的计算直接反映了所有其他列与Y列的关联度,未单独列出每个子序列的处理
# 计算各元素与母序列Y对应元素之间的绝对差值
absX0_Xi = np.abs(A_norm - np.tile(Y.reshape(-1, 1), (1, A_norm.shape[1])))
# 计算最小差a和最大差b
a = np.min(absX0_Xi)
b = np.max(absX0_Xi)
# 分辨系数,通常取值在0到1之间
rho = 0.5
# 计算灰色关联度
# 注意:这里gamma计算实际上是比较了所有列与Y列的灰色关联度,每行代表不同列与Y的关联程度
gamma = (a + rho * b) / (absX0_Xi + rho * b)
print("各列数据与母序列的平均灰色关联度分别为:")
# 打印每列(除了与自身比较的列)相对于Y的平均关联度
# 注意:由于gamma的计算方式,直接打印np.mean(gamma, axis=0)可能不是直观上期望的“每列的关联度”,而是所有比较的某种综合平均
print(np.mean(gamma, axis=0))
若有侵权,请联系作者
作者:乘~风