你也能看懂的:灰色关联分析算法

灰色关联分析是指对一个系统发展变化态势的定量描述和比较的方法,其基本思想是通过确定参考数据列和若干个比较数据列的几何形状相似程度来判断其联系是否紧密,它反映了曲线间的关联程度。
通常可以运用此方法来分析各个因素对于结果的影响程度,也可以运用此方法解决随时间变化的综合评价类问题,其核心是按照一定规则确立随时间变化的母序列,把各个评估对象随时间的变化作为子序列,求各个子序列与母序列的相关程度,依照相关性大小得出结论


灰色关联分析的流程

  1. 根据分析目的确定分析指标体系,收集分析数据

比如水果店里面每天卖苹果的总金额与哪些因素相关,定价、数量、大小、人流量等

这 n 种数据构成矩阵:
( X 1 , X 2 , , X n ) = ( x 1 ( 1 ) x 2 ( 1 ) x n ( 1 ) x 1 ( 2 ) x 2 ( 2 ) x n ( 2 ) x 1 ( m ) x 2 ( m ) x n ( m ) ) (X_1',X_2',\cdots,X_n')=\begin{pmatrix} x_1^{'(1)} & x_2^{'(1)} & \cdots & x_n^{'(1)} \\ x_1^{'(2)} & x_2^{'(2)} & \cdots & x_n^{'(2)} \\ \vdots & \vdots & \vdots & \vdots \\ x_1^{'(m)} & x_2^{'(m)} & \cdots & x_n^{'(m)} \\ \end{pmatrix}

  1. 确定参考数据列

上面的水果例子中,每天的总金额就是参考数据列,其它数据与其进行比较,得出相关度,这样就知道每种因素对其的影响

参考数据列应该是一个理想的比较标准,可以以各指标的最优值(或最劣值)构成参考数据列,也可根据评价目的选择其它参照值

记作:
X 0 = ( x 0 ( 1 ) , x 0 ( 1 ) , , x 0 ( 1 ) ) X_0'=(x_0^{'(1)},x_0^{'(1)}, \cdots,x_0^{'(1)})

  1. 针对数据进行无量纲化处理(通常情况下需要)

不同量纲造成不同指标的数据有大有小,为了消除不同变量不同量纲的影响因此在分析前需要先对数据进行处理,常见的处理方法可分为:标准化初值化。两者并没有什么固定的使用标准,初值化对数据格式要求更严格,建议使用均值法

无量纲化后的数据序列形成如下矩阵:
( X 0 , X 1 , , X n ) = ( x 1 ( 1 ) x 2 ( 1 ) x n ( 1 ) x 1 ( 2 ) x 2 ( 2 ) x n ( 2 ) x 1 ( m ) x 2 ( m ) x n ( m ) ) (X_0,X_1,\cdots,X_n)=\begin{pmatrix} x_1^{(1)} & x_2^{(1)} & \cdots & x_n^{(1)} \\ x_1^{(2)} & x_2^{(2)} & \cdots & x_n^{(2)} \\ \vdots & \vdots & \vdots & \vdots \\ x_1^{(m)} & x_2^{(m)} & \cdots & x_n^{(m)} \\ \end{pmatrix}

  1. 计算关联系数
    ζ i ( k ) = min i min k x 0 ( k ) x i ( k ) + ρ max i max k x 0 ( k ) x i ( k ) x 0 ( k ) x i ( k ) + ρ max i max k x 0 ( k ) x i ( k ) \zeta_i(k) =\frac {\min_i \min_k|x_0(k)-x_i(k)|+\rho \max_i \max_k|x_0(k)-x_i(k)|}{|x_0(k)-x_i(k)|+\rho \max_i \max_k|x_0(k)-x_i(k)|}

ρ \rho 为分辨系数, 0 < ρ < 1 0<ρ<1 ,若 ρ \rho 越小,关联系数间差异越大,区分能力越强。通常 ρ \rho 取 0.5

看不懂没关系,可以直接套公式

更为简便的计算方法:
ζ i ( k ) = min i x 0 ( k ) x i ( k ) + ρ max i x 0 ( k ) x i ( k ) x 0 ( k ) x i ( k ) + ρ max i x 0 ( k ) x i ( k ) \zeta_i(k) =\frac {\min_i |x_0'(k)-x_i'(k)|+\rho \max_i |x_0'(k)-x_i'(k)|}{|x_0'(k)-x_i'(k)|+\rho \max_i |x_0'(k)-x_i'(k)|}

  1. 计算关联度

上一步计算的只是某一对象在某一因素下与标准的关联程度。然后就是用之前算的权作一个加权平均,就可以得到每个对象与标准的关联度 r i r_i
r i = 1 n k = 1 n ζ i ( k ) r_i=\frac 1n \sum_{k=1}^n \zeta_i(k)

  1. 排序,得到关联度顺序了

案例解读

使用 MatLab 语言

x1 = [1.14 1.49 1.69 2.12 2.43 4.32 5.92 6.07 7.85;3.30 3.47 3.61 3.80 4.00 4.19 4.42 4.61 4.80;6.00 6.00 6.00 7.50 7.50 7.50 9.00 9.00 9.00;1.20 1.20 1.80 1.80 1.80 2.40 2.70 3.60 4.00;4.87 5.89 6.76 7.97 8.84 10.05 11.31 12.25 11.64];
%原始数据59列
x = x1;
%以第一行数据为参考数据
%按照公式一步步计算
for i=1:5
    for j=1:9
        x(i,j) = x(i,j)/x1(1,j);
    end
end
x1 = x;
for i = 1:5
    for j = 1:9
        x(i,j) = abs(x(i,j)-x1(i,1));
    end
end
max = x(1,1);
min = x(1,1);
for i = 1:5
    for j = 1:9
        if x(i,j) >= max
            max = x(i,j);
        end
    end
end
for i = 1:5
    for j = 1:9
        if x(i,j) <= min
            min = x(i,j);
        end
    end
end
k = 0.5; %分辨系数取值
l = (min+k*max)./(x+k*max); %求关联系数矩阵
guanliandu = sum(l')/9;
[rs,rind] = sort(guanliandu,'descend') %对关联度进行排序

得出的结论:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_44613063/article/details/104177229