灰色关联分析概述
在许多问题分析当中,哪些是主要因素,哪些是次要因素,哪些因素对发展影响较大,这些都是系统分析中都是人们普遍关心的问题
灰色关联分析的优势
- 无论样本量的多少和样本有无规律都可以适用
- 计算量小
- 不会出现量化结果与定性分析结果不符的情况
灰色关联分析的基本思想是根据系列曲线几何形状的相似程度进行判断其联系是否精密,曲线越接近,相应序列之间的关联度就越大,反之越小
要选准反映系统行为特征的数据序列,称为系统行为的映射量,用映射量间接表征系统行为
例题一
通过excel画出统计图,先简单看一下
根据分析可得
- 四个变量均呈上升趋势
- 第二产业变化较大
- 第一产业变化比较平缓
确定分析序列
- 母序列:反应系统行为特征的数据序列,类似于因变量Y,记为 x 0 x_0 x0
- 子序列:影响系统行为的因素组成的数据序列,类似与X,记为 ( x 1 , x 2 , . . . , x n ) (x_1,x_2,...,x_n) (x1,x2,...,xn)
母序列在这里是国内生产总值
子序列是第一二三产业
数据预处理
去量纲,避免量纲所带来的影响
计算子序列各个指标与母序列的关联系数
找到两级最小差 a a a和两级最大差 b b b
其中 a a a和 b b b的表示方法如下:
a = min min ∣ x 0 ( k ) − x i ( k ) ∣ b = max max ∣ x 0 ( k ) − x i ( k ) ∣ a=\min \min |x_0\left( k \right) -x_i\left( k \right) | \\ b=\max \max |x_0\left( k \right) -x_i\left( k \right) | a=minmin∣x0(k)−xi(k)∣b=maxmax∣x0(k)−xi(k)∣
在这里,先简单讲一下我对灰色关联分析的简单理解,可以在灰色系统上加以理解
根据这个图我们可以知道白色,灰色,黑色系统的含义
那么在这里我们可以将找到的 两级最小差 a a a 理解为黑色系统,因为其值是 最小的,所以所蕴含的信息是最少的,
我们的两级最大差 b b b 可以理解为白色系统,因为其值是 最大的,所以所含有的信息是最多的,这是我个人对两级最小差和两级最大差的一个理解,希望可以帮到大家
通过使用excel找到 a a a和 b b b
根据下面对于灰色关联分析计算每个值的关联系数
y ( x 0 ( k ) , x i ( k ) ) = a + ρ b ∣ x 0 ( k ) − x i ( k ) ∣ + ρ b ρ 表示分辨系数 ( 一般取 0.5 ) y\left( x_0\left( k \right) ,x_i\left( k \right) \right) =\frac{a+\rho b}{|x_0\left( k \right) -x_i\left( k \right) |+\rho b}\,\, \\ \rho \text{表示分辨系数}\left( \text{一般取}0.5 \right) y(x0(k),xi(k))=∣x0(k)−xi(k)∣+ρba+ρbρ表示分辨系数(一般取0.5)
使用excel得出每一个值的关联系数
以该表格的第一行第一列为例可以得到
y ( x 0 ( 1 ) , x 1 ( 1 ) ) = 0.0006 + 0.5 ∗ 0.1862 0.1041 + 0.5 ∗ 0.1862 = 0.475152 y\left( x_0\left( 1 \right) ,x_1\left( 1 \right) \right) =\frac{0.0006+0.5*0.1862}{0.1041+0.5*0.1862}=0.475152 y(x0(1),x1(1))=0.1041+0.5∗0.18620.0006+0.5∗0.1862=0.475152
定义如下计算每一个子序列和母序列之间的关系
y ( x 0 , x i ) = 1 n ∑ i = 1 n y ( x 0 ( k ) , x i ( k ) ) y\left( x_0,x_i \right) =\frac{1}{n}\sum_{i=1}^n{y\left( x_0\left( k \right) ,x_i\left( k \right) \right)} y(x0,xi)=n1i=1∑ny(x0(k),xi(k))
得到如下结果
可以知道国内生产总值受到第三产业影响较大
使用python完成例题一
上面是通过使用excel完成的,下面我们尝试用python完成这些操作
首先进行数据的读入
import numpy as np
import pandas as pd
data=pd.read_excel(r"灰色关联分析的第一个应用.xlsx",header=0)
data.drop(["年份"],axis=1,inplace=True)
data
进行数据预处理,除去量纲的影响
Mean=np.mean(data)#计算平均值
Mean
data1=data/Mean
data1
计算每列的系数
Y=data1['gdp']
X=data1.drop('gdp',axis=1)
absX0_x1=np.fabs(X['frist']-Y)
absX0_x2=np.fabs(X['second']-Y)
absX0_x3=np.fabs(X['third']-Y)
X_sum=[[absX0_x1],[absX0_x2],[absX0_x3]]
a=np.min(X_sum)
b=np.max(X_sum)
rho=0.5#分辨系数一般取0.5
gamma1=(a+rho*b)/(absX0_x1+rho*b)
gamma2=(a+rho*b)/(absX0_x2+rho*b)
gamma3=(a+rho*b)/(absX0_x3+rho*b)
c=np.mean(gamma1)
d=np.mean(gamma2)
e=np.mean(gamma3)
代码的写法可能不是很好,但是得出的结论是没有问题的
可以看出第三个的关联度是最强的
内容小结
灰色关联分析的例题摘取自清风老师的数学建模课程,课程当中用到的是matlab,所以我就尝试使用python去实现一下
代码实现这一部分大家可以想想有没有什么方法可以优化一下,希望我对灰色关联分析的理解可以帮助到您,