写在前面:
笔记为自行整理,内容出自课程《数学建模学习交流》,主讲人:清风
灰色关联分析概述
一般的抽象系统,如社会系统、经济系统、农业系统、生态系统、教育系统等都包含有许多种因素,多种因素共同作用的结果决定了该系统的发展态势。人们常希望知道在众多的因素中,哪些是主要因素,哪些是次要因素;哪些因素对系统发展影响大,哪些因素对系统发展影响小;哪些因素对系统发展起推动作用需强化发展,哪些因素对系统起阻碍作用需加以抑制;…这些都是系统分析中人们普遍关心的问题。例如,粮食生产系统,人们希望提高粮食总产量,二影响粮食总产量的因素是多方面的,有播种面积以及水利、化肥、土壤、种子、劳力、气候、耕作技术二号政策环境等。
为了实现少投入多产出,并取得良好的经济效益、社会效益和生态效益,就必须进行系统分析。
数理统计中的回归分析、方差分析、主成分分析等都是用来进行系统分析的方法。这些方法存在以下问题:
- 要求有大量数据,在数据量少、不满足大样本要求时上诉方法均失效。
- 要求样本服从某个典型的概率分布,要求各因素数据与系统特征数据之间呈线性关系且各因素之间彼此无关。这种要求往往难以满足。
- 计算量大,一般要考计算机帮助。
- 可能出现量化结果与定性分析结果不一致的现象,导致系统的关系和规律遭到歪曲和颠倒。
灰色关联分析的基本思想是根据序列曲线几何形状的相似程度来判断其联系是否紧密。曲线越接近,相应序列之间的关联度就越大,反之就越小。
参考:刘思峰.灰色系统理论及其应用(第五版)[M].北京:科学出版社,2010:62.
应用一:进行系统分析
①. 画统计图
进行简单的分析:
- 四个变量均呈现上升的趋势。
- 第二产业的增幅较为明显。
- 第二产业和第三产业的差距在后三年更大。
②. 确定分析序列
- 母序列(又称参考序列、母指标):能够反映系统行为特征的数据序列。
- 子序列(又称比较序列、子指标):影响系统行为的因素组成的数据序列。
本例中,国内生产总值就是母序列,第一、二、三产业是子序列。
③. 对变量进行预处理(消去量纲,缩小变量范围简化计算)
方法:对每个指标中的元素,用该元素除以所在指标的均值
④. 计算子序列中各个指标与母序列的关联系数
x0=(x0(1),x0(2),...,x0(n))T
x1=(x1(1),x1(2),...,x1(n))T
x2=(x2(1),x2(2),...,x2(n))T
x3=(x3(1),x3(2),...,x3(n))T
记
a=min∣x0(k)−xi(k)∣(每个子序列中的每个元素减去对应的母序列中的元素,找到最小的那个),
b=min∣x0(k)−xi(k)∣
a为两级最小差,
b为两级最大差。
定义:
γ(x0(k),xi(k))=∣x0(k)−xi(k)∣+ρba+ρb ρ:分辨系数(一般取0.5)
⑤. 定义
γ(x0,xi)=n1∑k=1nγ(x0(k),xi(k)) 为
x0和
xi的灰色关联度
γ(x0,x1)=0.5084,γ(x0,x2)=0.6243,γ(x0,x3)=0.7573
⑥. 通过比较三个子序列和母序列的关联度可以得到结论:该地区在2000年至2005年间的国内生产总值受到第三产业的影响最大。
代码(python实现)
import numpy as np
x_mat = np.loadtxt('gdp.csv', encoding='utf-8-sig', delimiter=',')
def gray_analysis(x):
x_mean = x.mean(axis=0)
x = x/x_mean
Y = x[:,0]
X = x[:,1:]
abs_x0_xi = np.abs(X-np.tile(Y.reshape(Y.shape[0],1),(1,np.shape(X)[1])))
a = np.min(abs_x0_xi)
b = np.max(abs_x0_xi)
rho = 0.5
gamma_mat = (a+rho*b)/(abs_x0_xi+rho*b)
corre_degree = np.mean(gamma_mat,axis=0)
print("子序列中各个指标的灰色关联度分别为:",corre_degree)
应用二:综合评价问题
评价下表中20条河流的水质情况(数据不具有真实性)
①. 对指标进行正向化
②. 对正向化后的矩阵进行预处理,得到矩阵
Zn×m
③. 取出
Zn×m中每一行的最大值,构成母序列
④. 计算各个指标与母序列的灰色关联度:
r1,r2,...rm
⑤. 计算各个指标的权重:
w1=r1/(r1+r2+...+rm);w2=r2/(r1+r2+...+rm);...;wm=rm/(r1+r2+...+rm)
⑥. 第
k个评价对象的得分:
Sk=∑i=1mZik⋅ri(k=1,2,...,n)
⑦. 对得分进行归一化:
S1′=S1/(S1+S2+...+Sn);S2′=S2/(S1+S2+...+Sn);...;Sn′=Sn/(S1+S2+...+Sn)