灰色关联分析法:
对于两个系统之间的因素,其随时间或不同对象而变化的关联性大小的量度,称为关联度。在系统发展过程中,若两个因素变化的趋势具有一致性,即同步变化程度较高,即可谓二者关联程度较高;反之,则较低。因此,灰色关联分析方法,是根据因素之间发展趋势的相似或相异程度,亦即“灰色关联度”,作为衡量因素间关联程度的一种方法。

灰色关联分析,公式网上都有很多,计算也不难,这里就不写公式。

之所以称为关联,是因为他只反映哪一个指标和要对比的指标最有关系,而不反映相关性。
他和相关性系数,没有一毛钱关系,也不对等。最后得出来的系数,也只是做一个排序。
不反映相关性,不反映相关性,不反映相关性。

灰色关联分析,是根据因素之间发展趋势的相似或相异程度,即“灰色关联度”,作为衡量因素间关联程度的方法

特点:

  1. 不需要自变量,参考变量服从正态分布,对样本数据没有要求,适合小样本数据。
  2. 能够将自变量和参考变量的关联性大小排序,从而得到重要性排序的评价,本身的关联度没有实际意义,比如得出关联度为0.95,这个数字只用排序,并不能像相关性0.95一样得出他们高度正相关。
  3. 缺点在于只能排序,不能得出确切的相关性,不属于相关性分析范畴,只归入综合评价方法里。

步骤:

  1. 确定参考指标和比较指标,一般参考指标放最开始的位置。
  2. 确定归一化(其实这里说归一化不太正确,但很多地方都说归一化,其实应该是消除量纲)方法,常见的有:
初值法 增益型:每一个指标除以这个指标的第一个(初值)。成本型:第一个值除以每一个指标的每个值
均值法 增益型:每一个指标除以这个指标的均值。成本型:均值除以每一个指标的每个值
区间变换法 增益型:(指标减去最小值)除以(最大值减最小值) 。成本型:(最大值减去指标)除以(最大值减最小值)

方法有很多,常见的就是初值和均值,增益型就是这个比较指标相对于参考指标越大越好,成本型就是越小越好,所以要把他们都转变成方向一致。

  1. 这时候的矩阵已经没有了量纲的影响,再用每个要比较的指标减去参考指标,一般参考放第一行,就都减去第一行的数据。这个地方要取绝对值,不能有负数,得到的矩阵一般记做Δ(k)
  2. 求两级最大差和最小差,即上面Δ(k)矩阵中的最大值,和最小值。记Δ(max),Δ(min)
  3. 得到关联系数矩阵:式子中的Δ(k)就是上面得到的绝对值后的矩阵
  4. 最后对每一个指标的向量求均值。就是最终的结果

下面是Python代码


# 最下面写了三个函数分别为gain,cost,level_,用于无量纲化,被GRA调用def GRA(df,normaliza="initial",level=None,r=0.5):'''df : 二维数据,这里用dataframe,每一行是一个评价指标,要对比的参考指标放在第一行normaliza :["initial","mean"] 归一化方法,默认为初值,提供初值化或者均值化,其他方法自行编写level :为None默认增益型, 可取增益型"gain"(越大越好),成本型"cost"(越小越好),或者dataframe中的某一列,如level="level","level"是列名,这列中用数字1和0表示增益和成本型r : [0-1] 分辨系数  越大,分辨率越大; 越小,分辨率越小,一般取0.5'''# 判断类型if not isinstance(df,pd.DataFrame):df = pd.DataFrame(df)# 判断参数输入if (normaliza not in ["initial","mean"]) or (r<0 or r>1):raise KeyError("参数输入类型错误")# 增益型的无量纲化方法if level == "gain" or level == None:df_ = gain(df,normaliza)#成本性无量纲化方法elif level == "cost":df_ = cost(df,normaliza)else:# 有增益有成本性的无量纲化方法try:df.columns.get_loc(level) # 尝试获得这一列的列索引,判断输入的列名有没有,返回这个列的索引下标except:raise KeyError("表中没有这一列")df_ = level_(df,normaliza,level)df_.drop(level,axis=1,inplace=True)# 加的level这一列对总体没用,最后把这一列删除再做关联分析df_ = np.abs(df_ - df_.iloc[0,:]) # 每一行指标和要参考的指标做减法,取绝对值。global_max = df_.max().max()global_min = df_.min().min()df_r = (global_min + r*global_max)/(df_ + r*global_max) # 求关联矩阵return df_r.mean(axis=1)# gain增益型
def gain(df,normaliza):for i in range(df.shape[0]):if normaliza == "initial" or normaliza==None:df.iloc[i] = df.iloc[i]/df.iloc[i,0]elif normaliza == "mean":df.iloc[i] = df.iloc[i]/df.mean(axis=1)return df# cost成本型
def cost(df,normaliza):for i in range(df.shape[0]):if normaliza == "initial" or normaliza==None:df.iloc[i] = df.iloc[i,0]/df.iloc[i]elif normaliza == "mean":df.iloc[i] = df.mean(axis=1)/df.iloc[i]return df# 自定义级别0-1型
def level_(df,normaliza,level):# 把这个表中等于1和等于0的数,重新分成两个表,调用上面两个方法。在合成一张表df_gain = df[df[level]==1]df_cost = df[df[level]==0]df_1 = gain(df_gain,normaliza)df_2 = cost(df_cost,normaliza)return df_1.append(df_2)


现在有这样一组数据,通过对某健将级女子铅球运动员的跟踪调查,获得其 1982 年至 1986 年每年最好成绩及16 项专项素质和身体素质的时间序列资料,见表,试对此铅球运动员的专项成绩进行因素分析。
这是其他文章中的例子,那篇文章用matlab代码写的。传送门

# 数据如下
x = np.array([[13.6,14.01,14.54,15.64,15.69],[11.50,13.00,15.15,15.30,15.02],[13.76,16.36,16.90,16.56,17.30],[12.41,12.70,13.96,14.04,13.46],[2.48,2.49,2.56,2.64,2.59],[85,85,90,100,105],[55,65,75,80,80],[65,70,75,85,90],[12.80,15.30,16.24,16.40,17.05],[15.30,18.40,18.75,17.95,19.30],[12.71,14.50,14.66,15.88,15.70],[14.78,15.54,16.03,16.87,17.82],[7.64,7.56,7.76,7.54,7.70],[120,125,130,140,140],[80,85,90,90,95],[4.2,4.25,4.1,4.06,3.99],[13.1,13.42,12.85,12.72,12.56]
])

因为最后两个指标是成本型,前面的都是增益型,所以我们另外加一列表示他的类型

df1 = pd.DataFrame(x)
df1["level"] = np.array([1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0])


将这个数据传入方法中,即可得到最终的关联系数
0 1.000000
1 0.588106
2 0.662749
3 0.853618
4 0.776254
5 0.854873
6 0.502235
7 0.659223
8 0.582007
9 0.683125
10 0.695782
11 0.895453
12 0.704684
13 0.933405
14 0.846704
15 0.745373
16 0.726079
第一行是铅球专项成绩x0,本身和自己最关联,这个不用看,剩下关联最强的就是x13全蹲,这样可以做针对性训练。最后还可以排个序。


再讨论一下这个关联系数矩阵,步骤中第五步求出的。
针对上面的,关联矩阵如下,

画一个图,从里面挑几行出来画,要不太多了,看不清楚。

挑的数据为[0,1,2,3,4,13,16]这几行,其中0就是参考的指标。
可以看得出来,x13是关系最强的,所以和0的那条直线挨的最近,1,2,3中3是最强的,所以红色的线也在上面。(调节系数r的大小,画出图的紧凑程度也不一样。这里就不试了。)

这就是一开始说的,若两个因素变化的趋势具有一致性,即同步变化程度较高,即可谓二者关联程度较高;反之,则较低。

灰色关联分析,Python实现GRA(gray relation analysis)相关推荐

  1. python 灰色关联分析法(GRA)求权重

    我遇到的问题: 假设现在有p个指标,g个参评单位.已经告诉你这g个参评单位在p个指标上的得分分别为多少,那么如何确定这p个指标的权重应该为多少? 原理 1.构成矩阵如下: 2.首先对矩阵做行均值化处理 ...

  2. 数学建模:评价性模型学习——灰色关联分析法(GRA模型)

    目录 前言 一.灰色关联分析 1.什么是灰色关联分析? 2.流程介绍 二.综合评价 1.数据无量纲化处理 2.确定参考序列 3.确定权重 4.计算灰色关联系数 5.计算灰色加权关联度 6.代码 总结 ...

  3. 灰色关联方法matlab csdn,灰色关联分析法(GRA)实现

    GRA算法步骤 step1:确定参考序列 $x_0$ 和比较序列 $x_i$: step2:对原始数据变换,将第 i 个属性的第 k 个数据 $x_i(k)$ 转换为 $y_i(k)$ .方法有: 初 ...

  4. 灰色关联分析(GRA)的理论及应用(matlab和python)

    什么是灰色关联分析 灰色关联分析是指对一个系统发展变化态势的定量描述和比较的方法,其基本思想是通过确定参考数据列和若干个比较数据列的几何形状相似程度来判断其联系是否紧密,它反映了曲线间的关联程度. 通 ...

  5. 机器学习(MACHINE LEARNING)灰色关联分析(GRA)

    文章目录 1 什么是灰色关联分析 2 灰色关联分析的步骤 3 灰色关联分析的实例 4 灰色关联分析matlab的实现 5 灰色关联分析python的实现 1 什么是灰色关联分析 灰色关联分析是指对一个 ...

  6. 灰色关联分析(GRA)

    文章目录 灰色关联 实现过程 灰色关联 对于两个系统之间的因素,其随时间或不同对象而变化的关联性大小的量度,称为关联度.在系统发展过程中,若两个因素变化的趋势具有一致性,即同步变化程度较高,即可谓二者 ...

  7. 灰色关联分析_R语言使用灰色关联分析(Grey Relation Analysis,GRA)中国经济社会发展指标...

    原文链接: http://tecdat.cn/?p=16881​tecdat.cn 灰色关联分析包括两个重要功能. 第一项功能:灰色关联度,与correlation系数相似,如果要评估某些单位,在使用 ...

  8. python做灰色关联度分析_python实现灰色关联分析(GRA)——以红酒质量指标为例

    目录 程序简述 数据集截图 程序/数据集下载 核心代码解析 Module/BuildModel.py(接口,可以直接运行) 接口调用.运行效果 Main.py 程序简述 对红酒质量指标数据进行灰色关联 ...

  9. Python实现 灰色关联分析 与结果可视化

    之前在比赛的时候需要用Python实现灰色关联分析,从网上搜了下只有实现两个列之间的,于是我把它改写成了直接像Pandas中的计算工具直接计算person系数那样的形式,可以对整个矩阵进行运算,并给出 ...

最新文章

  1. 多线程訪问共享数据(1)
  2. 别再找了!全网最全的数据分析全流程攻略在这
  3. 这三篇论文开源了!何恺明等人的PointRend,Hinton组的SimCLR和谷歌大脑的EfficientDet...
  4. HTTP系列之:HTTP缓存
  5. c++堆栈中 top() pop()的具体作用是什么
  6. FCPX插件Yanobox Motype for mac(43种动画发生器)
  7. php远程服务器配置,php远程服务器上的配置肿么弄??
  8. LeetCode(268)——缺失数字(JavaScript)
  9. IntelliJ IDEA之Java开发常规项目配置介绍
  10. 【Mac】 自带的播放器quicktimeplayer 如何带声音2倍速播放
  11. 最基础的股市定律--支撑阻挡定律
  12. 微服务架构 VS 单体架构
  13. Cobbler自动化安装系统2
  14. 【大数据入门】Hadoop技术原理与应用之基于Hadoop的数据仓库Hive
  15. 科研 | 心理学在线科研历史,你真的了解它吗?
  16. 地图实现-网页版Google Map
  17. Ubuntu 14.04开启root账号,禁用Guest账号
  18. 微服务网关soul搭建
  19. Fourth Point !!
  20. 宏华Atsl ver 2000 Build 20020225 65 零售版

热门文章

  1. 移动5G和5GWIFI的区别
  2. Android时使用jain-sip问题记录
  3. 基于共轭梯度法的对抗攻击
  4. Excel 2010 SQL应用104 域聚合函数之DMIN,DMAX
  5. 【Qt Quick】UDP中的端口号随机设置
  6. Swop.fi治理—为矿池权重投票
  7. 高级人工智能课程笔记
  8. android 模拟apk安装广播,android模拟器安装apk的两种方法
  9. Oracle LiveLabs实验:Load and Analyze Your Data with Autonomous Database
  10. 吴恩达说人工智能永恒的春天已经到来你准备好了吗?