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

article/2025/8/18 19:34:14

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

作者提醒:部分读者反应在某些情况下与MATLAB自带灰色关联分析结果有较大差距,目前作者尚未对此问题进行检验,请谨慎使用

灰色关联分析法

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

简介

灰色系统理论提出了对各子系统进行灰色关联度分析的概念,意图透过一定的方法,去寻求系统中各子系统(或因素)之间的数值关系。因此,灰色关联度分析对于一个系统发展变化态势提供了量化的度量,非常适合动态历程分析。

计算步骤

  1. 确实参考数列与比较数列
  2. 对参考数列与比较数列进行无量纲化处理
  3. 计算关联系数,求关联度

此处我给出的是第三步的实现方式,无量纲化请自己处理.数据使用UCI的红酒质量数据集.

代码实现

源代码可以前往 github下载

下载数据

import pandas as p
import numpy as np
from numpy import *
import matplotlib.pyplot as plt
%matplotlib inline# 从硬盘读取数据进入内存
wine = pd.read_csv("/home/fonttian/Data/dataset/wine/wine.csv")
wine.head()

展示数据

实现灰色关联分析

灰色关联分析一共分为了三个部分,这样比较容易大家随意摘取部分内容使用,
第一个方法是无量纲化,我这里选择的是(x-mean)/(max-min),你也可以替换成其他方法(据我个人了解,一般而言标准化不行)

第二个部分是计算一个dataframe中单独某一列灰色关联分析度的方法,m代表参考列,可以任意选择。2019-3-26在windows上,个人测试wine数据集上一次运算大概0.3s性能不高不低。不过由于部分代码是numpy写的性能确实也比纯pandas快很多,我这篇文章下边长期有一个灰色关联分析Matlab与python灰色关联分析,但是其为纯pandas写的,看起来很方便,不过运算时间约为本代码的一倍,所以假如你想要单独计算一列,个人还是更推荐我的代码。但是如果你想要更快的性能,肯定还是自己写numpy更好

第三部分,是借助前两个方法实现的计算矩阵,不过因为计算次数比较多,会比较慢,适合出图。

# 无量纲化
def dimensionlessProcessing(df):newDataFrame = pd.DataFrame(index=df.index)columns = df.columns.tolist()for c in columns:d = df[c]MAX = d.max()MIN = d.min()MEAN = d.mean()newDataFrame[c] = ((d - MEAN) / (MAX - MIN)).tolist()return newDataFramedef GRA_ONE(gray, m=0):# 读取为df格式gray = dimensionlessProcessing(gray)# 标准化std = gray.iloc[:, m]  # 为标准要素gray.drop(str(m),axis=1,inplace=True)ce = gray.iloc[:, 0:]  # 为比较要素shape_n, shape_m = ce.shape[0], ce.shape[1]  # 计算行列# 与标准要素比较,相减a = zeros([shape_m, shape_n])for i in range(shape_m):for j in range(shape_n):a[i, j] = abs(ce.iloc[j, i] - std[j])# 取出矩阵中最大值与最小值c, d = amax(a), amin(a)# 计算值result = zeros([shape_m, shape_n])for i in range(shape_m):for j in range(shape_n):result[i, j] = (d + 0.5 * c) / (a[i, j] + 0.5 * c)# 求均值,得到灰色关联值,并返回result_list = [mean(result[i, :]) for i in range(shape_m)]result_list.insert(m,1)return pd.DataFrame(result_list)def GRA(DataFrame):df = DataFrame.copy()list_columns = [str(s) for s in range(len(df.columns)) if s not in [None]]df_local = pd.DataFrame(columns=list_columns)df.columns=list_columnsfor i in range(len(df.columns)):df_local.iloc[:, i] = GRA_ONE(df, m=i)[0]return df_local

在这里插入图片描述

结果可视化

该部分添加了三角形显示的功能,注意如果你出现了图形显示不全(最后一行显示一半的问题,是Matplotlib 的一个版本的问题,升级一下即可)。如果你想要显示全部注释热图方法中的mask参数即可,不过由于本矩阵为全float计算,会带有舍入误差,数据量大的时候差异可能会比较大。所以两中方法各有利弊,请自行选择。

# 灰色关联结果矩阵可视化
# 灰色关联结果矩阵可视化
import seaborn as snsdef ShowGRAHeatMap(DataFrame):colormap = plt.cm.RdBuylabels = DataFrame.columns.values.tolist()f, ax = plt.subplots(figsize=(14, 14))ax.set_title('GRA HeatMap')# 设置展示一半,如果不需要注释掉mask即可mask = np.zeros_like(DataFrame)mask[np.triu_indices_from(mask)] = Truewith sns.axes_style("white"):sns.heatmap(DataFrame,cmap="YlGnBu",annot=True,mask=mask,)plt.show()data_wine_gra = GRA(wine)
ShowGRAHeatMap(data_wine_gra)

新图效果

在这里插入图片描述
全图效果
wine 的灰色关联分析热度图

一些资料

  1. 原文链接:Python实现 灰色关联分析 与结果可视化
  2. 参考文章:百度百科 灰色关联分析法
  3. 参考文章:简书 Python实现灰色关联
  4. 建议学习:Maximal Information Coefficient (MIC)最大互信息系数详解与实现

额外说明

本博客一开始也是我紧急写的,而第二部分是为了出图,因此整体代码采用了pandas为主,混了部分numpy,但是由于pandas本身有问题,很多情况下,直接用pandas的dataframe代替numpy矩阵进行矩阵性能会比循环低(测试版本ubuntu16.04,ubuntu18.04,测试数据0.5k-200k),而我当时也没什么时间写全numpy矢量运算,所以最后就成为了现在这种代码情况。而且该代码已经适合我个人目前的工作(大数据工程师)需要了,更大规模的数据我是用的spark或者pyspark,因此我短时间内没有更新numpy版本的需要,不过如果我更新了,也会第一时间发出来,并给出链接,这点请放心。

除此之外,感谢博友piaoyang_的指正


http://chatgpt.dhexx.cn/article/b2fTVAnZ.shtml

相关文章

灰色关联分析法步骤

https://wenku.baidu.com/view/dc356290af1ffc4fff47ac0d.html?rec_flagdefault&sxts1538121950212 利用灰色关联分析的步骤是: 1.根据分析目的确定分析指标体系,收集分析数据。 设n个数据序列形成如下矩阵: 其中m为指标的…

评价类问题_灰色关联分析

适用范围:计算影响结果的因素的重要程度,确定权重,也适用于评价类问题 基本思想:根据曲线集合形状的相似程度,判断联系是否紧密,曲线越接近,相应序列之间的关联度越大,反之越小 灰色…

灰色关联度分析算法(包含matlab源码及实例)

本文为整理后写出,不保证不会出现问题,若发现问题,请在评论区或私信指正!!! 目录 前言 1.确定母序列和子序列 2.数据归一化 1)初值化 2)均值化 3.计算绝对值差 4.计算灰色关联系…

熵值法、灰色关联分析与层次分析法

熵值法 在信息论中,熵值能够很好的反映信息无序化程度,其值越小,系统无序度越低,信息的效用值越大,其权重也相应越大;反之,其值越大,系统无序度越高,信息的效用值越小&a…

灰色关联分析(系统分析+综合评价)

系统分析:探究系统中哪个自变量对系统的影响最大 灰色关联分析的基本思想是根据序列曲线几何形状的相似程度来判断其联系是否紧密。曲线越接近,相应序列之间的关联度就越大,反之就越小 应用一、进行系统分析(国内比赛合适&#xf…

Statistical Analysis:关联度分析之灰色关联分析软件

Statistical Analysis:关联度分析之灰色关联分析软件 导读:灰色关联分析,从其思想方法上来看,属于几何处理的范畴,其实质是对反映各因素变化特征的数据序列所进行的几何比较。用于度量因素之间关联程度的灰色关联度&am…

R语言灰色关联分析法

R语言灰色关联分析法 输入数据数据的标准化/归一化求灰色系数求差序列和最大值最小值求关联系数 计算关联度并排序所有代码 灰色关联度分析(Grey Relation Analysis,GRA),是一种多因素统计分析的方法。简单来讲,就是在…

如何用spss做灰色关联度分析?手把手教学快速掌握

1、作用 对于两个系统之间的因素,其随时间或不同对象而变化的关联性大小的量度,称为关联度。在系统发展过程中,若两个因素变化的趋势具有一致性,即同步变化程度较高,即可谓二者关联程度较高;反之&#xff…

(三)灰色关联分析

灰色关联分析法: 对于两个系统之间的因素,其随时间或不同对象而变化的关联性大小的量度,称为关联度。在系统发展过程中,若两个因素变化的趋势具有一致性,即同步变化程度较高,即可谓二者关联程度较高&#x…

灰色关联度

利用灰色关联度对 10 个学生进行评价排序。 灰色关联度分析具体步骤如下: 1. 确定比较对象(评价对象)和参考数列(评价标准) 这里评价对象的个数为 m 10 , 评价指标变量有 8 个 比较数列为 这里 是第 i 个评价对…

灰色关联分析法详细步骤解释

灰色关联分析(Grey Relation Analysis,GRA) 灰色系统 这个概念的提出是相对于白色系统和黑色系统而言的。在控制理论中,颜色一般代表的是对于一个系统我们已知的信息的多少,白色系统就代表信息完全明确,比…

灰色关联度分析法(GRA)_python

灰色系统理论及其应用系列博文: 一、灰色关联度分析法(GRA)_python 二、灰色预测模型GM(1,1) 三、灰色预测模型GM(1,n) 四、灰色预测算法改进1—背景值Z 五、灰色预测改进2—三角残差拟合 文章目录 定义算法标准结论例子参考博客:

灰色关联分析法

与灰色预测模型一样,比赛不能优先使用,灰色关联往往可以与层次分析结合使用。层次分析用在确定权重上面【1】确定比较对象(评价对象)(就是数据,并且需要进行规范化处理,就是标准化处理,见下面例…

灰色关联分析中关联系数、关联度如何计算?

一、应用 灰色关联分析法通过研究数据关联性大小(母序列与特征序列之间的关联程度),通过关联度(即关联性大小)进行度量数据之间的关联程度,从而辅助决策的一种研究方法。 二、操作 SPSSAU操作 &#xf…

灰色关联度分析

灰色关联度分析 在我看来,灰色关联度分析即是一种对影响目标序列的相关因素进行定量分析的模型,他的基本原理就是将已知的目标序列数据和比较序列(即影响目标序列的因素所构成的序列)数据进行无量纲化处理之后,通过对…

灰色关联度分析(Grey Relation Analysis,GRA)原理详解

释名 灰色关联度分析(Grey Relation Analysis,GRA),是一种多因素统计分析的方法。简单来讲,就是在一个灰色系统中,我们想要了解其中某个我们所关注的某个项目受其他的因素影响的相对强弱,再直白…

灰色关联分析

文章目录 前言一、灰色关联分析是什么?二、使用步骤1.画出统计图2.确定分析序列3.对变量进行预处理4.计算子序列各个指标的关联系数5.定义灰色关联度 总结 前言 系统分析时,常使用数理统计:回归分析(标准化回归)、方差…

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

目录 前言 一、灰色关联分析 1.什么是灰色关联分析? 2.流程介绍 二、综合评价 1.数据无量纲化处理 2.确定参考序列 3.确定权重 4.计算灰色关联系数 5.计算灰色加权关联度 6.代码 总结 前言 继续学习数学建模涉及的评价性模型,这篇会介绍如何使…

unity 赛车race(手游)

就业班是面向工作,企业应用级别的学习。在这里我们将在游戏项目开发的深度和任务上有所提高。通过分析和开发大型的游戏项目,让大家熟练使用Unity,并分析大型游戏开发思路,为自己专业开发游戏和就业提供保障。 unity 赛车race(手游…

ranchar

添加主机报错