精华内容
下载资源
问答
  • 运用R做关联度分析

    2014-09-29 11:27:20
    运用R做关联度分析
  • 关联度分析

    2018-05-12 20:32:29
    基于matlab灰色系统中,关于数列间关联度的大小求解。
  • 灰色关联度分析

    千次阅读 2018-03-30 18:51:10
    7.2.2 灰色关联度分析需求:按照灰色关联度的分析方法,对数据指标进行分析解决方法:通过Python的pandas以及内置的函数完成该需求。import numpy as np import pandas as pd import os def readData(filename): ...

    7.2.2 灰色关联度分析

    需求:按照灰色关联度的分析方法,对数据指标进行分析

    解决方法:通过Python的pandas以及内置的函数完成该需求。

    import numpy as np
    import pandas as pd
    import os
    
    def readData(filename):
        if(os.path.isfile(filename)):
            if(not os.access(filename,os.R_OK)):
                raise Exception('文件不可读')
            else:
                return pd.read_excel(filename)
        else:
            raise Exception('文件不存在')
    
    def overall(filename):
        try:
            dframe = readData(filename)
        except Exception as err:
            print(err)
    
        if(dframe.columns.size>0):
            totaltarget = dframe.columns.size -1
            rowsize=dframe.iloc[:,0].size
    
    
            ## 1 读取原始数据,该数据通过ETL加工而来
            ## 2 异常数据检测
            ## 3 按照指标的情况,计算参考序列:即每个指标的最大/小值,注意这里避开了首列SKUID
            dframe1 =dframe.iloc[:,1:dframe.columns.size]
            a = dframe1.apply(lambda x: (x-x.min())/(x.max() - x.min())*(1-0)+0)
            ## 4 参考序列差额绝对值, ABS(V1-RefV).
            a= a.apply(lambda x: abs(x - x.max()))
            ## 5 指定全局最小、最大值、分辨率 这里默认取的是0、1(计算而来)、0.5(经验值)
            globalMax=a.values.max()
            globalMin=a.values.min()
            resolution=0.5
            ## 6 计算关联系数:(全局最小值+全局最大值*分辨率)/(V1+全局最大值*分辨率)
            a= a.apply(lambda x:(globalMin + globalMax *resolution)/(x+globalMax *resolution) )
            ## 7 计算权重系数和关联度(新增一行一列,其中关联度的每个V是该行的AVG,权重系数是每列的AVG)
            a.loc['Row_avg']=a.apply(lambda x: x.mean())
            ## 8 加权关联度: 通过SUMPRODUCT,每个SKU的指标和权重系数一维数组的对应索引元素相乘在求和,除以总指标数得到关联系数
            d= a.iloc[:,0:totaltarget]
            reftab=pd.DataFrame((d.dot(np.array(d.loc['Row_avg'].values[0:]))/totaltarget),columns=['refid'])
            skuidtab=pd.DataFrame(dframe.iloc[0:rowsize,0:1].values[0:],columns=['skuid'])
            fintab=pd.concat([skuidtab.astype('str'),reftab.astype('float')],axis=1)
            #fintab.reindex(columns=cols)
            ## 9 对关联系数进行正排序得到上架数N,逆排序得到
            print(fintab.iloc[0:-1, 0:totaltarget].sort_values(by='refid', ascending=False)) 
        else:
            print('DataFrame初始化失败')
    
    if __name__ == '__main__':
        overall("G:\Works\BIPreJ\ModelData.xlsx")
        
    
    

    原始文件:

    执行结果:

    待补充

     

    展开全文
  • 灰色关联度分析excel实现,使用excel实现灰色关联度分析
  • 关联度分析法-灰色关联分析

    千次阅读 2020-09-14 16:50:14
    本文介绍了利用灰色关联度分析方法分析了数据之间的关联度。

    灰色关联分析介绍

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

    灰色关联分析的步骤

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

    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)
    

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

    展开全文
  • 灰色关联度分析(Grey Relation Analysis,GRA)原理详解

    万次阅读 多人点赞 2018-12-29 02:22:18
    灰色关联度分析(Grey Relation Analysis,GRA),是一种多因素统计分析的方法。简单来讲,就是在一个灰色系统中,我们想要了解其中某个我们所关注的某个项目受其他的因素影响的相对强弱,再直白一点,就是说:我们...

    释名

    灰色关联度分析(Grey Relation Analysis,GRA),是一种多因素统计分析的方法。简单来讲,就是在一个灰色系统中,我们想要了解其中某个我们所关注的某个项目受其他的因素影响的相对强弱,再直白一点,就是说:我们假设以及知道某一个指标可能是与其他的某几个因素相关的,那么我们想知道这个指标与其他哪个因素相对来说更有关系,而哪个因素相对关系弱一点,依次类推,把这些因素排个,得到一个分析结果,我们就可以知道我们关注的这个指标,与因素中的哪些更相关。

    ( note : 灰色系统这个概念的提出是相对于白色系统黑色系统而言的。这个概念最初是由控制科学与工程(hhh熟悉的一级学科)的教授邓聚龙提出的。按照控制论的惯例,颜色一般代表的是对于一个系统我们已知的信息的多少,白色就代表信息充足,比如一个力学系统,元素之间的关系都是能够确定的,这就是一个白色系统;而黑色系统代表我们对于其中的结构并不清楚的系统,通常叫做黑箱或黑盒的就是这类系统。灰色介于两者之间,表示我们只对该系统有部分了解。)

    举例

    为了说明灰色关联度分析的应用场景,我们利用下图进行说明:

    在这里插入图片描述

    该图来源于参考文献1。这篇文献研究的内容是旅游业发展的影响因子,看该表格,第一行为五年的旅游总收入,代表着旅游业发展的程度,而下面的这些要素就是我们需要分析的因子,比如在校大学生数,旅行社数,星级饭店数,A级景区数等等。最终目的是要得到一个排序,从而说明这些因子对旅游总收入的关联性的程度。

    操作步骤与原理详解

    (1) 确立母序列

    (参考序列,在上面栗子中就是1998~2002年的旅游总收入序列)和子序列(比较序列,也就是需要确立顺序的因素序列,上栗中的除了第一行以外的所有因素都可以作为参考序列)

    为了后面的表述方便,这里统一一下notation:

    我们用x_i(k)表示第i个因素的第k个数值
    用上面的栗子来说
    比如第一个因素是在校大学生人数,那么x_1(1)就表示在校大学生人数在1998年的取值,也就是341,x_1(2)就是1999年的取值,
    而x_2(1)就是表示旅游从业人数在1998年的数值。以此类推。
    我们用x_0(k)表示母序列,i≥1的表示子序列,也就是要分析的要素的序列。
    如果不写括号,比如x_i ,就代表这个元素的整个序列,也就是向量 x_i = [x_i(1), x_i(2), ... , x_i(n)] 
    n为每个向量的维度,也就是每个元素的特征的数量,在上栗中,n就是5,因为有五年的数据,代表五维向量。
    以下所有表述都用该notation表示。
    

    详解: 这个就是我们任务的目的(找到子序列和参考序列的关联程度),所以不需要再解释了吧~

    (2)归一化,或者叫 无量纲化

    详解: 因为我们的这些要素是不同质的东西的指标,因此可能会有的数字很大有的数字很小,但是这并不是由于它们内禀的性质决定的,而只是由于量纲不同导致的,因此我们需要对它们进行无量纲化。这个操作一般在数据处理领域叫做归一化(normalization),也就是减少数据的绝对数值的差异,将它们统一到近似的范围内,然后重点关注其变化和趋势。
    如下图所示,这是上面表格中前3个元素随年的变化曲线,以及作为母序列的旅游总收入:
    在这里插入图片描述

    可以看到,有两个曲线绝对数值很大,而另外两个很小,如果不做处理必然导致大的数值的影响会”淹没“掉小数值的变量的影响。

    所以我们要对数据进行归一化处理,主要方法有如下几个:

    (1) 初值化: 顾名思义,就是把这一个序列的数据统一除以最开始的值,由于同一个因素的序列的量级差别不大,所以通过除以初值就能将这些值都整理到1这个量级附近。

    公式: x_i(k)' = x_i(k) / x_i(1)   i = 1,...,m, k = 1,...,n 
    (m为因素个数,n为每个因素的数据维度,仍如上栗,n=5,m=3(我们只看前三个因素,就是曲线图里画的这三种,和旅游总收入的关联,数据维度为5,即五年))
    

    (2) 均值化: 顾名思义,就是把这个序列的数据除以均值,由于数量级大的序列均值比较大,所以除掉以后就能归一化到1的量级附近。

    公式: x_i(k)' = x_i(k) / ( mean(x_i) )        (除以均值)
    其中 : mean(x_i) = (1/n) sum_k=1^n (x_i(k))     (求第i个因素序列的均值)
    

    其余还有如区间化,即把序列的值规范到一个区间,比如[0, 1],之间。这个方法实际上在数据处理中应用比较多,但是在GRA中似乎常用均值化或者初值化,所以在此不介绍。

    这里我们按照参考文献中的采用的方法,用初值化进行归一化,得到的结果如下图:

    在这里插入图片描述

    可以看到,归一化以后的数据,量级差别变小了,这是为了后面提供铺垫,因为我们关注的实际上是曲线的形状的差异,而不希望绝对数值对后面的计算有影响。

    (3)计算灰色关联系数

    先放上公式:
    在这里插入图片描述

    详解:
    首先,我们把i看做固定值,也就是说对于某一个因素,其中的每个维度进行计算,得到一个新的序列,这个序列中的每个点就代表着该子序列与母序列对应维度上的关联性(数字越大,代表关联性越强)。
    仔细观察这个公式,rho是一个可调节的系数,取值为(0,1),大于零小于一,这一项的目的是为了调节输出结果的差距大小,我们放在后面讲。我们先假设把rho取成0,那么,这个式子就变成了

    pseudo_zeta_i(k) = min min |x_0(k) - x_i(k)| / |x_0(k) - x_i(k)| = constant / |x_0(k) - x_i(k)|
    

    我们看上面这个式子,可以发现,分子上这个数值,对于所有子序列来说都是一样的(,分子上这个数实际上就是所有因素的所有维度中,与母序列(参考序列,即我们要比较的序列)距离最近的维度上的距离。为什么要这样做呢?这样来想,假如我们没有进行归一化,或者不是用的初值化,而是用的均值化或者其他方法,可能会导致曲线之间,也就是母序列和各个子序列之间仍然有一段距离,那么这个距离最小值与下面的每个维度的距离相除,实际上也可以看成是一种取消量纲的手段。对于所有子序列,这个分子是相同的,所以实际上,这个系数pseudo_zeta是与第k个维度上,子序列与母序列的距离(差的绝对值,通常叫做l1范数(l1-norm))成反比,也就是说,这两个数距离越远,我们认为越不相关,这是符合直觉的。

    当然,如果用了初值化归一化数据,如上面的图2所示,min min |x_0(k) - x_i(k)| 对每个i都会变成0,这样就不好了,因为这样一来,所有的zeta_i(k)都成了0,是无意义的。所以这时候我们就看到后面的 rho max max这一项的作用了。这一项对于每个i来说也是一个不变的常数constant,所以可以理解为给上面那个式子的分子分母同时加上某个数值,如下所示:

    zeta_i(k) = (aconstant + bconstant) / (|x_0(k) - x_i(k)| + bconstant)
    

    这样做的目的是什么呢? 我们举个栗子: 对于两个分数: 1/5 和 1/4 ,它们的分子一样,分母相差为1,这时候他们的值相差1/20,也就是0.05,这就是没有+rho max max那一项的情况,分子相同,分母的差代表着与参考序列的距离。 如果我们给他们分子分母同时加上20,那么就是21/25和21/24,它们相差为0.035,可以看到,加入这一项会导致同样的距离的点的系数差,会因为计算而变小。很显然地,rho取得越大,不同zeta系数的差距就越小。

    另外,由于分子上是min min,也就是距离的全局最小值,这就导致下面的分母必然大于分子(不考虑 rho max max 项),而且,如果分母非常大,曲线距离非常远,那么,zeta接近0; 相反,如果x_i和x_0在所有维度上的差完全一样,那么分数的值就是1。这样zeta取值范围就是0~1之间,0表示不相关,1表示强关联性。这也符合认知。考虑上rho max max 项之后,我们知道对于一个真分数,分子分母都加一个同样的值,仍然是真分数(实际上是一个添加溶质的溶液的问题)。也就是说,仍然是0到1。

    总结来说,rho是控制zeta系数区分度的一个系数,rho取值0到1, rho越小,区分度越大,一般取值0.5较为合适。zeta关联系数取值落在0到1之间。

    接上栗,我们对上述三个子序列做出关联系数zeta的序列,结果如下:
    在这里插入图片描述
    其实从这个图中已经可以看出,大学生这一因素对旅游也的相关性普遍要高一些,从业人员相对影响少一些。星级饭店的数量居中。

    (4) 计算关联系数均值,形成关联序

    根据上图其实已经可以看出大概的趋势,但是这只是因为这个恰好所有维度上的趋势比较一致,实际上,我们得到zeta关联系数的值以后,应该对每个因素在不同维度上的值求取均值,换句话说,也就是对于上面那些zeta 的曲线,同一个颜色的求取均值。结果如下:

    >> mean(zeta_1)
    ans =
       0.7505
    >> mean(zeta_2)
    ans =
        0.5848
    >> mean(zeta_3)
    ans =
       0.7154
    

    可以看到,根据关联系数大小,排序结果为:

    大学生人数 > 星级饭店数量 > 从业人员人数

    这和参考文献论文中的结论是一致的:

    在这里插入图片描述

    (由于论文中用了所有的因子,导致max max 这个全局最大值不同,所以计算出的关联度数值与复现计算的结果数值不一样,但是这三个因子的关联度的排序是一致的,说明关联度是一个相对的指标,它反映的是不同因子与参考内容的关联程度)

    总结

    GRA算法本质上来讲就是提供了一种度量两个向量之间距离的方法,对于有时间性的因子,向量可以看成一条时间曲线,而GRA算法就是度量两条曲线的形态和走势是否相近。为了避免其他干扰,凸出形态特征的影响,GRA先做了归一化,将所有向量矫正到同一个尺度和位置,然后计算每个点的距离。最后,通过min min 和max max 的矫正,使得最终输出的结果落在0到1之间,从而符合系数的一般定义。rho调节不同关联系数之间的差异,换句话说,就是输出的分布,使其可以变得更加稀疏或者紧密。以数学角度要言之,该算法即度量已归一化的子向量与母向量的每一维度的l1-norm距离的倒数之和,并将其映射到0~1区间内,作为子母向量的关联性之度量的一种策略。

    附录:MATLAB代码

    下面是该博文中为举栗子复现的参考文献1中的计算过程MATLAB代码:

    % Grey relation analysis
    
    clear all
    close all
    clc
    
    zongshouru = [3439, 4002, 4519, 4995, 5566];
    daxuesheng = [341, 409, 556, 719, 903];
    congyerenyuan = [183, 196, 564, 598, 613];
    xingjifandian = [3248, 3856, 6029, 7358, 8880];
    
    % define comparative and reference
    x0 = zongshouru;
    x1 = daxuesheng;
    x2 = congyerenyuan;
    x3 = xingjifandian;
    
    % normalization
    x0 = x0 ./ x0(1);
    x1 = x1 ./ x1(1);
    x2 = x2 ./ x2(1);
    x3 = x3 ./ x3(1);
    
    % global min and max
    global_min = min(min(abs([x1; x2; x3] - repmat(x0, [3, 1]))));
    global_max = max(max(abs([x1; x2; x3] - repmat(x0, [3, 1]))));
    
    % set rho
    rho = 0.5;
    
    % calculate zeta relation coefficients
    zeta_1 = (global_min + rho * global_max) ./ (abs(x0 - x1) + rho * global_max);
    zeta_2 = (global_min + rho * global_max) ./ (abs(x0 - x2) + rho * global_max);
    zeta_3 = (global_min + rho * global_max) ./ (abs(x0 - x3) + rho * global_max);
    
    % show
    figure;
    plot(x0, 'ko-' )
    hold on
    plot(x1, 'b*-')
    hold on
    plot(x2, 'g*-')
    hold on
    plot(x3, 'r*-')
    legend('zongshouru', 'daxuesheng', 'congyerenyuan', 'xingjifandian')
    
    figure;
    plot(zeta_1, 'b*-')
    hold on
    plot(zeta_2, 'g*-')
    hold on
    plot(zeta_3, 'r*-')
    title('Relation zeta')
    legend('daxuesheng', 'congyerenyuan', 'xingjifandian')
    

    参考文献:

    1. 马晓龙. 旅游业发展影响因子灰色关联分析[J]. 人文地理, 2006, 21(2):37-40.
    2. 谭学瑞, 邓聚龙. 灰色关联分析:多因素统计分析新方法[J]. 统计研究, 1995, 12(3):46-48.
    3. 刘思峰, 蔡华, 杨英杰, et al. 灰色关联分析模型研究进展[J]. 系统工程理论与实践, 2013, 33(8):2041-2046.

    2018年12月29日02:06:16
    to Rita ~

    展开全文
  • 国产灰色关联度分析软件,可以计算各种灰色关联的计算
  • MATLAB灰色关联度分析

    千次阅读 2019-12-08 10:06:29
    灰色关联度分析(Grey Relation Analysis,GRA),是一种多因素统计分析的方法。简单来讲,就是在一个灰色系统中,我们想要了解其中某个我们所关注的某个项目受其他的因素影响的相对强弱,再直白一点,就是说:我们...

    1.释名

    灰色关联度分析(Grey Relation Analysis,GRA),是一种多因素统计分析的方法。简单来讲,就是在一个灰色系统中,我们想要了解其中某个我们所关注的某个项目受其他的因素影响的相对强弱,再直白一点,就是说:我们假设以及知道某一个指标可能是与其他的某几个因素相关的,那么我们想知道这个指标与其他哪个因素相对来说更有关系,而哪个因素相对关系弱一点,依次类推,把这些因素排个序,得到一个分析结果,我们就可以知道我们关注的这个指标,与因素中的哪些更相关。

    ( note : 灰色系统这个概念的提出是相对于白色系统和黑色系统而言的。这个概念最初是由控制科学与工程的教授邓聚龙提出的。按照控制论的惯例,颜色一般代表的是对于一个系统我们已知的信息的多少,白色就代表信息充足,比如一个力学系统,元素之间的关系都是能够确定的,这就是一个白色系统;而黑色系统代表我们对于其中的结构并不清楚的系统,通常叫做黑箱或黑盒的就是这类系统。灰色介于两者之间,表示我们只对该系统有部分了解。)

    2.举例

    为了说明灰色关联度分析的应用场景,我们利用下图进行说明:
    在这里插入图片描述
    该图研究的内容是旅游业发展的影响因子,看该表格,第一行为五年的旅游总收入,代表着旅游业发展的程度,而下面的这些要素就是我们需要分析的因子,比如在校大学生数,旅行社数,星级饭店数,A级景区数等等。最终目的是要得到一个排序,从而说明这些因子对旅游总收入的关联性的程度。

    3.操作步骤与原理详解

    (1) 确立母序列
    (参考序列,在上面栗子中就是1998~2002年的旅游总收入序列)和子序列(比较序列,也就是需要确立顺序的因素序列,上栗中的除了第一行以外的所有因素都可以作为参考序列)
    为了后面的表述方便,这里统一一下notation:

    我们用x_i(k)表示第i个因素的第k个数值
    用上面的栗子来说
    比如第一个因素是在校大学生人数,那么x_1(1)就表示在校大学生人数在1998年的取值,也就是341x_1(2)就是1999年的取值,
    而x_2(1)就是表示旅游从业人数在1998年的数值。以此类推。
    我们用x_0(k)表示母序列,i≥1的表示子序列,也就是要分析的要素的序列。
    如果不写括号,比如x_i ,就代表这个元素的整个序列,也就是向量 x_i = [x_i(1), x_i(2), ... , x_i(n)] 
    n为每个向量的维度,也就是每个元素的特征的数量,在上栗中,n就是5,因为有五年的数据,代表五维向量。
    以下所有表述都用该notation表示。
    

    详解: 这个就是我们任务的目的(找到子序列和参考序列的关联程度)
    (2)归一化,或者叫 无量纲化。
    详解: 因为我们的这些要素是不同质的东西的指标,因此可能会有的数字很大有的数字很小,但是这并不是由于它们内禀的性质决定的,而只是由于量纲不同导致的,因此我们需要对它们进行无量纲化。这个操作一般在数据处理领域叫做归一化(normalization),也就是减少数据的绝对数值的差异,将它们统一到近似的范围内,然后重点关注其变化和趋势。
    如下图所示,这是上面表格中前3个元素随年的变化曲线,以及作为母序列的旅游总收入:
    在这里插入图片描述
    可以看到,有两个曲线绝对数值很大,而另外两个很小,如果不做处理必然导致大的数值的影响会”淹没“掉小数值的变量的影响。

    所以我们要对数据进行归一化处理,主要方法有如下几个:
    (1)初值化: 顾名思义,就是把这一个序列的数据统一除以最开始的值,由于同一个因素的序列的量级差别不大,所以通过除以初值就能将这些值都整理到1这个量级附近。

    公式: x_i(k)' = x_i(k) / x_i(1)   i = 1,...,m, k = 1,...,n 
    (m为因素个数,n为每个因素的数据维度,仍如上栗,n=5,m=3(我们只看前三个因素,
    就是曲线图里画的这三种,和旅游总收入的关联,数据维度为5,即五年))
    

    (2) 均值化: 顾名思义,就是把这个序列的数据除以均值,由于数量级大的序列均值比较大,所以除掉以后就能归一化到1的量级附近。

    公式: x_i(k)' = x_i(k) / ( mean(x_i) )        (除以均值)
    其中 : mean(x_i) = (1/n) sum_k=1^n (x_i(k))     (求第i个因素序列的均值)
    

    用初值化进行归一化,得到的结果如下图:
    在这里插入图片描述
    可以看到,归一化以后的数据,量级差别变小了,这是为了后面提供铺垫,因为我们关注的实际上是曲线的形状的差异,而不希望绝对数值对后面的计算有影响。
    (3)计算灰色关联系数
    先放上公式:
    在这里插入图片描述
    详解:
    首先,我们把i看做固定值,也就是说对于某一个因素,其中的每个维度进行计算,得到一个新的序列,这个序列中的每个点就代表着该子序列与母序列对应维度上的关联性(数字越大,代表关联性越强)。
    仔细观察这个公式,rho是一个可调节的系数,取值为(0,1),大于零小于一,这一项的目的是为了调节输出结果的差距大小,我们放在后面讲。我们先假设把rho取成0,那么,这个式子就变成了

    pseudo_zeta_i(k) = min min |x_0(k) - x_i(k)| / |x_0(k) - x_i(k)|
    = constant / |x_0(k) - x_i(k)|
    

    我们看上面这个式子,可以发现,分子上这个数值,对于所有子序列来说都是一样的(,分子上这个数实际上就是所有因素的所有维度中,与母序列(参考序列,即我们要比较的序列)距离最近的维度上的距离。为什么要这样做呢?这样来想,假如我们没有进行归一化,或者不是用的初值化,而是用的均值化或者其他方法,可能会导致曲线之间,也就是母序列和各个子序列之间仍然有一段距离,那么这个距离最小值与下面的每个维度的距离相除,实际上也可以看成是一种取消量纲的手段。对于所有子序列,这个分子是相同的,所以实际上,这个系数pseudo_zeta是与第k个维度上,子序列与母序列的距离(差的绝对值,通常叫做l1范数(l1-norm))成反比,也就是说,这两个数距离越远,我们认为越不相关,这是符合直觉的。

    当然,如果用了初值化归一化数据,如上面的图2所示,min min |x_0(k) - x_i(k)| 对每个i都会变成0,这样就不好了,因为这样一来,所有的zeta_i(k)都成了0,是无意义的。所以这时候我们就看到后面的 rho max max这一项的作用了。这一项对于每个i来说也是一个不变的常数constant,所以可以理解为给上面那个式子的分子分母同时加上某个数值,如下所示:

    zeta_i(k) = (aconstant + bconstant) / (|x_0(k) - x_i(k)| + bconstant)
    

    这样做的目的是什么呢? 我们举个栗子: 对于两个分数: 1/5 和 1/4 ,它们的分子一样,分母相差为1,这时候他们的值相差1/20,也就是0.05,这就是没有+rho max max那一项的情况,分子相同,分母的差代表着与参考序列的距离。 如果我们给他们分子分母同时加上20,那么就是21/25和21/24,它们相差为0.035,可以看到,加入这一项会导致同样的距离的点的系数差,会因为计算而变小。很显然地,rho取得越大,不同zeta系数的差距就越小。

    另外,由于分子上是min min,也就是距离的全局最小值,这就导致下面的分母必然大于分子(不考虑 rho max max 项),而且,如果分母非常大,曲线距离非常远,那么,zeta接近0; 相反,如果x_i和x_0在所有维度上的差完全一样,那么分数的值就是1。这样zeta取值范围就是0~1之间,0表示不相关,1表示强关联性。这也符合认知。考虑上rho max max 项之后,我们知道对于一个真分数,分子分母都加一个同样的值,仍然是真分数(实际上是一个添加溶质的溶液的问题)。也就是说,仍然是0到1。

    总结来说,rho是控制zeta系数区分度的一个系数,rho取值0到1, rho越小,区分度越大,一般取值0.5较为合适。zeta关联系数取值落在0到1之间。

    接上栗,我们对上述三个子序列做出关联系数zeta的序列,结果如下:
    在这里插入图片描述
    其实从这个图中已经可以看出,大学生这一因素对旅游也的相关性普遍要高一些,从业人员相对影响少一些。星级饭店的数量居中。
    (4)计算关联系数均值,形成关联序
    根据上图其实已经可以看出大概的趋势,但是这只是因为这个恰好所有维度上的趋势比较一致,实际上,我们得到zeta关联系数的值以后,应该对每个因素在不同维度上的值求取均值,换句话说,也就是对于上面那些zeta 的曲线,同一个颜色的求取均值。结果如下:

    >> mean(zeta_1)
    ans =
       0.7505
    >> mean(zeta_2)
    ans =
        0.5848
    >> mean(zeta_3)
    ans =
       0.7154
    

    可以看到,根据关联系数大小,排序结果为:

    大学生人数 > 星级饭店数量 > 从业人员人数

    4.总结

    GRA算法本质上来讲就是提供了一种度量两个向量之间距离的方法,对于有时间性的因子,向量可以看成一条时间曲线,而GRA算法就是度量两条曲线的形态和走势是否相近。为了避免其他干扰,凸出形态特征的影响,GRA先做了归一化,将所有向量矫正到同一个尺度和位置,然后计算每个点的距离。最后,通过min min 和max max 的矫正,使得最终输出的结果落在0到1之间,从而符合系数的一般定义。rho调节不同关联系数之间的差异,换句话说,就是输出的分布,使其可以变得更加稀疏或者紧密。以数学角度要言之,该算法即度量已归一化的子向量与母向量的每一维度的l1-norm距离的倒数之和,并将其映射到0~1区间内,作为子母向量的关联性之度量的一种策略。

    5.附录:MATLAB代码

    % Grey relation analysis
    
    clear all
    close all
    clc
    
    zongshouru = [3439, 4002, 4519, 4995, 5566];
    daxuesheng = [341, 409, 556, 719, 903];
    congyerenyuan = [183, 196, 564, 598, 613];
    xingjifandian = [3248, 3856, 6029, 7358, 8880];
    
    % define comparative and reference
    x0 = zongshouru;
    x1 = daxuesheng;
    x2 = congyerenyuan;
    x3 = xingjifandian;
    
    % normalization
    x0 = x0 ./ x0(1);
    x1 = x1 ./ x1(1);
    x2 = x2 ./ x2(1);
    x3 = x3 ./ x3(1);
    
    % global min and max
    global_min = min(min(abs([x1; x2; x3] - repmat(x0, [3, 1]))));
    global_max = max(max(abs([x1; x2; x3] - repmat(x0, [3, 1]))));
    
    % set rho
    rho = 0.5;
    
    % calculate zeta relation coefficients
    zeta_1 = (global_min + rho * global_max) ./ (abs(x0 - x1) + rho * global_max);
    zeta_2 = (global_min + rho * global_max) ./ (abs(x0 - x2) + rho * global_max);
    zeta_3 = (global_min + rho * global_max) ./ (abs(x0 - x3) + rho * global_max);
    
    % show
    figure;
    plot(x0, 'ko-' )
    hold on
    plot(x1, 'b*-')
    hold on
    plot(x2, 'g*-')
    hold on
    plot(x3, 'r*-')
    legend('zongshouru', 'daxuesheng', 'congyerenyuan', 'xingjifandian')
    
    figure;
    plot(zeta_1, 'b*-')
    hold on
    plot(zeta_2, 'g*-')
    hold on
    plot(zeta_3, 'r*-')
    title('Relation zeta')
    legend('daxuesheng', 'congyerenyuan', 'xingjifandian')
    
    展开全文
  • 灰色关联分析,从其思想方法上来看,属于...用于度量因素之间关联程度的灰色关联度,就是通过对因素之间的关联曲线的比较而得的。除了传统的Excel可以进行关联分析外,还可以用现有的软件进行分析 实现界面 ...
  • 灰色关联度分析(python)

    千次阅读 2020-08-18 21:31:22
    灰色关联度分析代码python import pandas as pd x=pd.read_csv('data4.csv') x=x.iloc[:,:].T # 1、数据均值化处理 x_mean=x.mean(axis=1) for i in range(x.index.size): x.iloc[i,:] = x.iloc[i,:]/x_mean[i] #...
  • 灰色关联度分析(Grey Relation Analysis,GRA)

    万次阅读 多人点赞 2019-05-09 20:08:58
    1,灰色关联度分析(Grey Relation Analysis,GRA)原理详解 2,灰色关联分析法 3,灰色关联分析(GRA)的理论及应用(matlab和python) 4Python实现 灰色关联分析 与结果可视化 ...
  • 论文研究-灰色关联度分析在变量筛选应用中的误区.pdf, 探讨了多元回归建模中灰色关联度分析应用于变量筛选时存在的问题及其原因 ;结合实例阐明 ,GM(1 ,n )模型本身无法...
  • 数学建模-灰色关联度分析原理笔记

    千次阅读 2021-07-24 11:43:09
    曲线越接近,相应序列之间的关联度就越大,反之就越小。 比较少用 步骤 例:下表某地区国内生产总值的统计数据(以百万元计),问该地区从2000年到2005年之间哪一种产业对GDP总量影响最大 年份 国内生产总值...
  • 2. 灰色关联度分析 背景: 通过对某健将级女子铅球运动员的跟踪调查,获得其 1982 年至 1986 年每年最好成绩及 16 项专项素质和身体素质的时间序列资料,见下表 ,试对此铅球运动员的专项成绩进行因素分析。 数据...
  • 个简单的demo记录下,防止忘记 先看原始数据: ...关联度分析代码: # -*- coding: utf-8 -*- from numpy import array import pandas as pd import seaborn as sns from matplotlib impo...
  • 灰色关联度C代码

    2016-01-23 16:45:00
    基本上灰色关联度分析是依据各因素数列曲线形状的接近程度发展态势的分析。灰色系统理论提出了对各子系统进行灰色关联度分析的概念,意图透过一定的方法,去寻求系统中各子系统(或因素)之间的数值关系。
  • 怎么用clementine做关联规则分析

    万次阅读 多人点赞 2015-11-30 18:00:24
    小伙伴们是不是还在为怎么做关联分析而苦恼呢?想自己写算法觉得太难,用软件分析又不会。不要怕,小迪来教了怎么用clementine做关联规则分析。 1、首先你得在你的电脑上安装clementine,安装方法我在另一篇博文上...
  • 灰色关联度

    千次阅读 2019-09-02 16:52:31
    灰色关联度分析具体步骤如下: 1. 确定比较对象(评价对象)和参考数列(评价标准) 这里评价对象的个数为 m = 10 , 评价指标变量有 8 个 比较数列为 这里是第 i 个评价对象关于第 k个指标变量 的取值 。 参考数...
  • 灰色关联度软件

    2015-05-12 15:31:03
    南京航天航空大学开发的灰色关联度计算软件。计算体系完整,有分步计算过程,且有激活说明。
  • 利用层次分析法合理地确定各指标权重,建立灰色关联度综合评价模型,比较了10名大学男生的体质健康水平,并就此五项评价指标了多元回归和响应曲面分析。结果表明:灰色关联层次综合评价和回归分析客观地反映了个体之间...
  • 数据挖掘怎么做关联分析呢?

    千次阅读 2020-09-30 15:14:52
    大家打开某宝,会发现,购物网站越来越懂我们了,推荐的商品正好就是我们想买的。其实这里面用到了数据挖掘中的关联规则...应用目标:从订单数据集中找出关联度较高的商品。 创建数据集 下图的数据集为某商城的订单数
  • 灰色关联度怎么的,可以用计量软件吗,原理是什么?为了求什么?
  • 灰色关联分析,包含成本性指标和效益型指标,直接运行结果。
  • 灰色关联度矩阵模型及其MATLAB实现

    千次阅读 多人点赞 2019-12-06 10:41:15
    灰色关联度矩阵是灰色系统另一个非常重要的领域,通常用于分析向量与向量之间或矩阵与矩阵之间的关联度,其实用性非常强。
  • 刘思峰教授提出的广义灰色关联分析的python算法实现。其中包括绝对关联度,相对关联度和综合关联度的计算实现。
  • 灰色关联分析matlab

    2017-04-18 09:11:04
    灰色关联分析matlab代码
  • 关联分析及常用的apriori算法和fp-growth算法了较为详细的分析和改进。是本人自己结合资料整理而来
  • 灰色系统理论提出了对各子系统进行灰色关联度分析的概念,意图透过一定的方法,去寻求系统中各子系统(或因素)之间的数值关系。因此,灰色关联度分析对于一个系统发展变化态势提供了量化的度量,非常适合动态历程...
  • 产品健康模型之指标关联分析 我们这里做关联分析的目的就是找出运维指标和运营指标的相关程度。这里重新贴一下指标的结构图:    指标离散化 这里需要说明的是,这些指标可能是连续的,也有可能是离散的...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 138,218
精华内容 55,287
关键字:

关联度分析怎么做