基于灰色关联度分析法_灰色关联度分析法的优缺点

基于灰色关联度分析法_灰色关联度分析法的优缺点本文介绍了利用灰色关联度分析方法分析了数据之间的关联度。

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

灰色关联分析介绍

对于两个系统之间的因素,其随时间或不同对象而变化的关联性大小的量度,称为关联度。在系统发展过程中,若两个因素变化的趋势具有一致性,即同步变化程度较高,即可谓二者关联程度较高;反之,则较低。因此,灰色关联分析方法,是根据因素之间发展趋势的相似或相异程度,亦即“灰色关联度”,作为衡量因素间关联程度的一种方法。
通常可以运用此方法来分析各个因素对于结果的影响程度,也可以运用此方法解决随时间变化的综合评价类问题。

灰色关联分析的步骤

灰色系统关联分析的具体计算步骤如下:

  1. 确定反映系统行为特征的参考数列和影响系统行为的比较数列。
    反映系统行为特征的数据序列,称为参考数列(可以理解为因变量)。影响系统行为的因素组成的数据序列,称比较数列(可以理解为自变量)。
  2. 对参考数列和比较数列进行无量纲化处理。
    由于系统中各因素的物理意义不同,导致数据的量纲也不一定相同,不便于比较,或在比较时难以得到正确的结论。因此在进行灰色关联度分析时,一般都要进行无量纲化的数据处理。
  3. 求参考数列与比较数列的灰色关联系数ξ(Xi)
    所谓关联程度,实质上是曲线间几何形状的差别程度。因此曲线间差值大小,可作为关联程度的衡量尺度。对于一个参考数列X0有若干个比较数列X1, X2,…, Xn,各比较数列与参考数列在各个时刻(即曲线中的各点)的关联系数ξ(Xi)可由下列公式算出:

在这里插入图片描述
其中 ρ为分辨系数,ρ>0,ρ越小,分辨力越大,一般ρ的取值区间为(0,1),具体取值可视情况而定。通常取0.5。
minmin是第二级最小差,记为Δmin。 maxmax是两级最大差,记为Δmax。
在这里插入图片描述
为各比较数列Xi曲线上的每一个点与参考数列X0曲线上的每一个点的绝对差值,记为Δoi(k)。
所以关联系数ξ(Xi)也可简化如下列公式:
在这里插入图片描述

  1. 求关联度ri
    因为关联系数是比较数列与参考数列在各个时刻(即曲线中的各点)的关联程度值,所以它的数不止一个,而信息过于分散不便于进行整体性比较。因此有必要将各个时刻(即曲线中的各点)的关联系数集中为一个值,即求其平均值,作为比较数列与参考数列间关联程度的数量表示,关联度ri公式如下:
    在这里插入图片描述

  2. 关联度排序
    因素间的关联程度,主要是用关联度的大小次序描述,而不仅是关联度的大小。将m个子序列对同一母序列的关联度按大小顺序排列起来,便组成了关联序,记为{x},它反映了对于母序列来说各子序列的“优劣”关系。若r0i>r0j,则称{xi}对于同一母序列{x0}优于{xj},记为{xi}>{xj} ;若r0i表1 代表旗县参考数列、比较数列特征值。

实例

#灰色关联度分析
import pandas as p
import numpy as np
from numpy import *
import matplotlib.pyplot as plt
%matplotlib inline

# 从硬盘读取数据进入内存
wine = pd.read_csv("...\\是.csv",encoding="ANSI")
wine.head()
wine=wine.dropna()
wine.dropna()
# 无量纲化()
newDataFrame=pd.DataFrame(index=wine.index)
columns=wine.columns.tolist()
for c in columns:
        d = wine[c]
        MAX = d.max()
        MIN = d.min()
        MEAN = d.mean()
        newDataFrame[c] = ((d - MEAN) / (MAX - MIN)).tolist()
print(newDataFrame)
# 提取参考队列和比较队列
newDataFrame=newDataFrame.iloc[:,1:].T
ck=newDataFrame.iloc[0,:]
cp=newDataFrame.iloc[1:,:]#比较
#比较队列与参考列相减
t=pd.DataFrame()
for j in range(cp.index.size):
    temp=pd.Series(cp.iloc[j,:]-ck)
    t=t.append(temp,ignore_index=True)
#求最大差和最小差
mmax=t.abs().max().max()
mmin=t.abs().min().min()
rho=0.5
#求关联系数
ksi=((mmin+rho*mmax)/(abs(t)+rho*mmax))
pd.DataFrame(ksi)
# 灰色关联结果矩阵可视化
import seaborn as sns
def ShowGRAHeatMap(DataFrame):
    colormap = plt.cm.RdBu
    ylabels = 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)] = True
    
    with sns.axes_style("white"):
        sns.heatmap(DataFrame,
                    cmap="rainbow",
                    annot=True,
                    #mask=mask,
                   )
   
    plt.rcParams['font.sans-serif']='SimHei'
    plt.show()
data=pd.DataFrame(ksi)
ShowGRAHeatMap(data)

#求关联度
r=ksi.sum(axis=1)/ksi.columns.size
print("关联度为:\n",r)
#关联度排序,
result=r.sort_values(ascending=False)
print("关联度排序结果为:\n",result)

Jetbrains全家桶1年46,售后保障稳定

关联系数矩阵:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/206688.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 无线充电原理与QI协议详解[通俗易懂]

    一、无线充电基本原理无线充电的基本原理就是我们平时常用的开关电源原理,区别在于没有磁介质耦合,那么我们需要利用磁共振的方式提高耦合效率,具体方法是在发送端和接收端线圈串并联电容,是发送线圈处理谐振状态,接收端线圈也是如此下图就是实际电路应用无线充电工作基本原理图发射板主要有控制ic,驱动ic,发射线圈,谐振电容组成这个是接收线圈,扎数比发射线圈多所以谐振电容可以小一些,方便安装…

    2022年4月4日
    2.6K
  • Android短信验证码控件,Android中实现短信验证码自动填入

    Android短信验证码控件,Android中实现短信验证码自动填入Android中实现短信验证码自动填入由于目前的好多应用都有短信验证,短信验证码收到后,用户手动输入已经显得有麻烦,于是我写了这篇博文,希望能对大家有所帮助。实现步骤:1.写一个SmsBroadcastReceiver,在AndroidMainifirst.xml文件中注册:/***配置广播接收者:**表示:*设置此广播接收者的级别为最高*/类代码:publiccl…

    2022年7月25日
    10
  • java Map遍历的5种方法和一些基本使用

    java Map遍历的5种方法和一些基本使用一:基本使用Map<String,Integer>map=newHashMap<>();map.put("a",1);map.put("b",2);booleanb=map.containsKey("3");//map中是否包含key为3的键值。System.out.pr.

    2022年9月21日
    2
  • 什么是互质_数组转集合list

    什么是互质_数组转集合list给定 n 个正整数,将它们分组,使得每组中任意两个数互质。至少要分成多少个组?输入格式第一行是一个正整数 n。第二行是 n 个不大于10000的正整数。输出格式一个正整数,即最少需要的组数。数据范围1≤n≤10输入样例:614 20 33 117 143 175输出样例:3#include<bits/stdc++.h>using namespace std;const int N = 1e2 + 10;int a[N],g[N][N];int n;int

    2022年8月9日
    7
  • 反转每对括号间的子串java_栈和队列具有相同的逻辑结构

    反转每对括号间的子串java_栈和队列具有相同的逻辑结构给出一个字符串 s(仅含有小写英文字母和括号)。请你按照从括号内到外的顺序,逐层反转每对匹配括号中的字符串,并返回最终的结果。注意,您的结果中 不应 包含任何括号。示例 1:输入:s = “(abcd)”输出:“dcba”示例 2:输入:s = “(u(love)i)”输出:“iloveu”示例 3:输入:s = “(ed(et(oc))el)”输出:“leetcode”示例 4:输入:s = “a(bcdefghijkl(mno)p)q”输出:“apmnolkjihgfedcb

    2022年8月11日
    3
  • yarn的安装和使用

    yarn的简介:Yarn是facebook发布的一款取代npm的包管理工具。yarn的特点:速度超快。Yarn缓存了每个下载过的包,所以再次使用时无需重复下载。同时利用并行下载以最大化资源利用率,因此安装速度更快。超级安全。在执行代码之前,Yarn会通过算法校验每个安装包的完整性。超级可靠。使用详细、简洁的锁文件格式和明确的安装算法,Yarn能够保证在不同…

    2022年4月3日
    73

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号