当前位置:   article > 正文

【数模/评价模型】灰色关联分析_灰色关联模型如何表示各指标间的关联关系

灰色关联模型如何表示各指标间的关联关系

声明:文章参考数学建模清风的网课编写。

灰色关联分析应用于系统分析

灰色关联分析主要应用于系统分析,其原理是根据两序列图像几何形状的相似程度来判断两序列的关联程度。

1,绘制图表

如:分析各产业对生产总值的影响。
在这里插入图片描述
使用excel绘制图表:
在这里插入图片描述

2、确定分析数列

母序列(又称参考数列、母指标):能反映系统行为特征的数据序列,类似于因变量y。
子序列(又称比较数列、子指标):影响系统行为因素组成的数据序列,类似于自变量x。
在如图的例子中,母序列就是生产总值x0,子序列就是第一x1、第二x2、第三产业x3。

3、对每个序列进行预处理

预处理目的:统一量纲,简化数据。
预处理公式,每个元素除所在列平均值:

A ./ repmat(mean(A), n, 1)
  • 1
4、计算子序列各个指标与母序列关联系数

两级最小差:

a = min( min( abs(x0(k) - xi(k))))
  • 1

两级最大差:

b = max( max( abs(x0(k) - xi(k))))
  • 1

在这里插入图片描述

关联系数:

gamma(x0(k), xi(k)) = (a + p*b) / (|x0(k) - xi(k)| + p*b)
  • 1

p为分辨系数,通常取0.5

5、计算灰色关联度

每一列的算术平均:

gamma(x0, xi) = sum(A) / n
  • 1

评价子序列对母序列的影响时,子序列的个数较小时使用灰色关联分析。否则,使用回归分析

灰色关联分析用于系统分析代码:

clear;clc

% 灰色关联分析的输入为一个n*m的矩阵。
% 每一列是一个系统序列。第一列为母序列,其余列为子序列

A = input('请输入矩阵A:');
[n, m] = size(A);

% 预处理
A = A ./ repmat(mean(A), n, 1);
% 第一列即母序列
firs = repmat(A(:, 1), 1, m - 1);
% 后m-1列即子序列
A = A(:, 2 : end);

% 两级最小差 和 两级最大差
A = abs(A - firs);
a = min(A(:));
b = max(A(:));
disp('两级最小差为:');
disp(a);

disp('两级最大差为:');
disp(b);


p = 0.5; % p为分辨系数,通常取0.5
% gamma 关联系数

gamma = sum((a + p*b) ./ (A + p*b)) ./ n;

% 每一列指标的关联系数为, 关联系数越大和母序列相关性越强
disp('每一列指标的关联系数为:');
disp(gamma);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

灰色关联分析应用于综合评价

1.指标正向化

 指标正向化,在Topsis中有详细讲解。链接Topsis
极小型指标标准化代码(trans_min.m):

% 将极小型转化为极大型
function [C] = trans_min(A)
% A列向量,为极小型
    C = max(A) - A;
end
  • 1
  • 2
  • 3
  • 4
  • 5

中间型指标标准化代码(trans_mid.m):

% 将中间型转化为极大型
function [C] = trans_mid(A, a)
% A为待转化的中间型列向量
% a为中间值 如:ph = 7
    M = max(abs(A - a));
    C = 1 - abs(A - a) ./ M;
end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

区间型指标标准化代码(trans_seg.m):

% 区间型转化为极大型
function [C] = trans_seg(A, s)
% A为带转化的区间型列向量
% s(1)为区间左端点; s(2)为区间右端点
    a = s(1);
    b = s(2);
    M = max(max(A) - b, a - min(A));
    C = A;
    for i = 1 : size(A)
        if A(i) < a
            C(i) = 1 - (a - A(i))/M;
        elseif A(i) > b
            C(i) = 1 - (A(i) - b)/M;
        else
            C(i) = 1;
        end
    end
end
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
2.对每个序列进行预处理

 预处理方法同上,预处理得到矩阵 Z Z Z

3.构造母序列

 取矩阵Z每一行的最大值构成母序列。

% 取每一行最大值构成一个列向量
max(A, [], 2)
  • 1
  • 2
4.计算子序列各个指标与母序列关联系数

 计算方法同上,计算得到关联系数 g a m m a gamma gamma g a m m a gamma gamma为一个行向量。

5.根据关联系数计算权重

 计算公式,每一个系数除以所有系数之和:
ω i = g a m m a i ∑ i = 1 n g a m m a i   ( 1 ≤ i ≤ n ) \omega_{i} = \frac{gamma_{i}}{\sum_{i=1}^{n} gamma_{i}} \ (1\le i \le n) ωi=i=1ngammaigammai (1in)

6.根据权重计算得分并进行归一化

 得分的计算公式,每一行乘对应权重并相加:
S k = ∑ j = 1 m Z k j   ω j      ( 1 ≤ k ≤ n ) S_{k} = \sum_{j= 1}^{m} Z_{kj} \ \omega_{j} \ \ \ \ (1\le k \le n) Sk=j=1mZkj ωj    (1kn)
 对得分进行归一化,分数越高则评价越高:

s c o r e i = S i ∑ i = 1 n S i score_{i} = \frac{S_{i}}{\sum_{i=1}^{n} S_{i}} scorei=i=1nSiSi灰色关联分析用于评价类问题代码:

% clear;clc

% 灰色关联分析的输入为一个n*m的矩阵。
% 每一列是一个待评价指标, 每一行为一个待评价对象
% A = input('请输入待评价元素构成的矩阵A(行为待评价对象, 列为评价指标):');

% 指标正向化
[n, m] = size(A);
% 正向化
% 待正向化的列
col = input('请输入待正向化的列[]:');

for i = 1 : size(col, 2)
    kind = input(['请输入' num2str(col(i)) '列所属类型(1:极小型;2:中间型;3:区间型):']);
    % 列
    c = col(i);
    if kind == 1
        A(:, c) = trans_min(A(:, c));
    elseif kind == 2
        a = input('请输入中间型的中间值:');
        A(:, c) = trans_mid(A(:, c), a);
    elseif kind == 3
        s = input('请输入区间型的两个端点[a, b]:');
        A(:, c) = trans_seg(A(:, c), s);
    else
        disp('输入类型有误!');
    end
end

disp('正向化后的矩阵:');
disp(A);


% 矩阵处理
Z = A ./ repmat(mean(A), n, 1);
A = Z;
% 构造虚拟母序列
firs = repmat(max(A, [], 2), 1, m);

% 两级最小差 和 两级最大差
A = abs(A - firs);
a = min(A(:));
b = max(A(:));
disp('两级最小差为:');
disp(a);

disp('两级最大差为:');
disp(b);


p = 0.5; % p为分辨系数,通常取0.5
% gamma 关联系数

gamma = sum((a + p*b) ./ (A + p*b)) ./ n;

% 每一列指标的关联系数为
disp('每一列指标的关联系数为:');
disp(gamma);

% 计算权重
wi = gamma ./ sum(gamma, 2);
wi = repmat(wi, n, 1);

% 计算权重并归一化
score = sum(Z .* wi, 2);
% 归一化
score = score ./ sum(score);

disp('最终得分为:');
disp(score);

[score, ind] = sort(score, 'descend');
disp('最终排名为:');
disp(ind);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/682150
推荐阅读
相关标签
  

闽ICP备14008679号