当前位置:   article > 正文

【数学建模】--灰色关联分析

灰色关联分析

系统分析:

一般的抽象系统,如社会系统,经济系统,农业系统,生态系统,教育系统等都包含有许多种因素,多种因素共同作用的结果决定了该系统的发展态势。人们常常希望知道在众多的因素中,哪些是主要因素,哪些是次要因素;哪些因素对系统发展影响大,哪些因素对系统发展影响小;那些因素对系统发展起推动作用需强化发展;那些因素对系统发展起阻碍作用需加以抑制;……这些都是系统分析中人们普遍关心的问题。例如,粮食生产系统,人们希望提高粮食总产量,而影响粮食总产量的因素是多方面的,有播种面积以及水利,化肥,土壤,种子,劳力,气候,耕作技术和政策环境等。为了实现少投入多产出,并取得良好的经济效益,社会效益和生态效益,就必须进行系统分析。

数理统计的不足之处:

灰色关联的基本思想:

灰色关联分析原理:灰色关联分析(Grey Relational Analysis)是一种用于研究变量之间关联性的方法,特别适用于样本数据较少、样本特征缺失或数据质量不高的情况下。它是由灰色系统理论发展而来,旨在分析和描述变量之间的关联程度。

在灰色关联分析中,首先将各个变量的数据进行数值化,常采用标准化或归一化的方法,将变量的取值范围转化为[0, 1]之间。然后,通过计算变量之间的关联度,确定它们之间的关联程度。

灰色关联分析的步骤主要包括以下几个方面:

1.数据标准化:将原始数据进行标准化处理,通常采用归一化或标准化方法,使得各个变量具有相同的数值范围。

2.构建关联系数矩阵:计算各个变量之间的关联系数,一般采用灰色关联度或灰色斜率关联度。关联系数表示了变量之间的相对关联程度。

3.确定关联度序列:根据计算得到的关联系数,确定关联度序列,即将各个变量按照关联度的大小排序。

4.确定关联度权重:根据关联度序列,计算关联度权重,即各个变量在总关联系数中的贡献比例。

5.计算灰色关联度:通过将各个变量的关联系数与关联度权重相乘,并进行累加,计算出灰色关联度。灰色关联度可以反映变量之间的关联程度。

通过灰色关联度的计算,可以得到各个变量之间的关联情况,进而进行数据分析和决策支持。灰色关联分析常被应用于多个领域,包括经济、管理、环境、工程等,用于评估指标之间的关联强度、寻找关键因素等。

需要注意的是,灰色关联分析的结果是相对的,不具备精确的定量意义,应结合实际问题和其他分析方法进行综合评估和判断。

例题以及Excel的实操:在excel中选择数据-插入-推荐图标-修改信息。

2.确定分析数列:

母序列:能反映系统特征值的数据序列,类似于因变量Y,此处记为X0

子序列:有影响系统行为的因素组成的数据序列。类似于自变量x,此处记为(x1,x2……xm)

3.对变量进行预处理:

目的:去量纲,缩小变量范围简化计算。

方法:每个元素/所在列的列向量的均值。

4.计算子序列中各个指标与母序列的关联系数

先求每子列元素与母列之间差的绝对值,在求出矩阵中所有元素的最小值a和最大值b。且取分辨系数p/rho=0.5

在通过公式计算

5.求灰色关联度:

公式:每列子序列与母序列关联系数的均值。

6.分析结果进行总结。

MATLAB代码实现:

参考代码:

  1. %% 灰色关联分析用于系统分析例题的讲解
  2. clear;clc
  3. load gdp.mat % 导入数据 一个6*4的矩阵
  4. % 不会导入数据的同学可以看看第二讲topsis模型,我们也可以自己在工作区新建变量,并把Excel的数据粘贴过来
  5. % 注意Matlab的当前文件夹一定要切换到有数据文件的这个文件夹内
  6. Mean = mean(gdp); % 求出每一列的均值以供后续的数据预处理
  7. gdp = gdp ./ repmat(Mean,size(gdp,1),1); %size(gdp,1)=6, repmat(Mean,6,1)可以将矩阵进行复制,复制为和gdp同等大小,然后使用点除(对应元素相除),这些在第一讲层次分析法都讲过
  8. disp('预处理后的矩阵为:'); disp(gdp)
  9. Y = gdp(:,1); % 母序列
  10. X = gdp(:,2:end); % 子序列
  11. absX0_Xi = abs(X - repmat(Y,1,size(X,2))) % 计算|X0-Xi|矩阵(在这里我们把X0定义为了Y)
  12. a = min(min(absX0_Xi)) % 计算两级最小差a
  13. b = max(max(absX0_Xi)) % 计算两级最大差b
  14. rho = 0.5; % 分辨系数取0.5
  15. gamma = (a+rho*b) ./ (absX0_Xi + rho*b) % 计算子序列中各个指标与母序列的关联系数
  16. disp('子序列中各个指标的灰色关联度分别为:')
  17. disp(mean(gamma))

讨论:

灰色分析用于综合评价问题:

步骤:

MATLAB代码实现:

这里的代码和博主之前TOPSIS算法一文:数学建模——TOPSIS法_Wei&Yan的博客-CSDN博客

前面的操作都一致,只是在最后添加上了灰色相关分析的方法

步骤:

  1. 先对矩阵进行预处理:每个元素/所在列的均值
  2. 构造母序列和子序列

母序列:取每一行的max构成一个列向量

子序列:预处理后的矩阵

3.计算灰色关联度

先求每个元素与母序列差的绝对值矩阵,再求两级最大/小差。

最后利用公式求灰色关联度

4.求权重:每列的均值/每列均值的和

5.求得分:(矩阵中每个元素*其所在列的权重)的矩阵的列和。(得到一个)

6.归一化得分:每个元素/向量和

图形对比:

参考代码:

这里只参考了主函数加上带有灰色相关分析的代码,其他自定义函数可参考博主原来的文章TOPSIS算法:数学建模——TOPSIS法_Wei&Yan的博客-CSDN博客

  1. %% 灰色关联分析用于综合评价模型例题的讲解
  2. clear;clc
  3. load data_water_quality.mat
  4. % 不会导入数据的同学可以看看第二讲topsis模型,我们也可以自己在工作区新建变量,并把Excel的数据粘贴过来
  5. % 注意Matlab的当前文件夹一定要切换到有数据文件的这个文件夹内
  6. %% 判断是否需要正向化
  7. [n,m] = size(X);
  8. disp(['共有' num2str(n) '个评价对象, ' num2str(m) '个评价指标'])
  9. Judge = input(['这' num2str(m) '个指标是否需要经过正向化处理,需要请输入1 ,不需要输入0: ']); %1
  10. if Judge == 1
  11. Position = input('请输入需要正向化处理的指标所在的列,例如第2、3、6三列需要处理,那么你需要输入[2,3,6]: '); %[2,3,4]
  12. disp('请输入需要处理的这些列的指 标类型(1:极小型, 2:中间型, 3:区间型) ')
  13. Type = input('例如:第2列是极小型,第3列是区间型,第6列是中间型,就输入[1,3,2]: '); %[2,1,3]
  14. % 注意,Position和Type是两个同维度的行向量
  15. for i = 1 : size(Position,2) %这里需要对这些列分别处理,因此我们需要知道一共要处理的次数,即循环的次数
  16. X(:,Position(i)) = Positivization(X(:,Position(i)),Type(i),Position(i));
  17. % Positivization是我们自己定义的函数,其作用是进行正向化,其一共接收三个参数
  18. % 第一个参数是要正向化处理的那一列向量 X(:,Position(i)) 回顾上一讲的知识,X(:,n)表示取第n列的全部元素
  19. % 第二个参数是对应的这一列的指标类型(1:极小型, 2:中间型, 3:区间型)
  20. % 第三个参数是告诉函数我们正在处理的是原始矩阵中的哪一列
  21. % 该函数有一个返回值,它返回正向化之后的指标,我们可以将其直接赋值给我们原始要处理的那一列向量
  22. end
  23. disp('正向化后的矩阵 X = ')
  24. disp(X)
  25. end
  26. %% 对正向化后的矩阵进行预处理
  27. Mean = mean(X); % 求出每一列的均值以供后续的数据预处理
  28. Z = X ./ repmat(Mean,size(X,1),1);
  29. disp('预处理后的矩阵为:'); disp(Z)
  30. %% 构造母序列和子序列
  31. Y = max(Z,[],2); % 母序列为虚拟的,用每一行的最大值构成的列向量表示母序列
  32. X = Z; % 子序列就是预处理后的数据矩阵
  33. %% 计算得分
  34. absX0_Xi = abs(X - repmat(Y,1,size(X,2))) % 计算|X0-Xi|矩阵
  35. a = min(min(absX0_Xi)) % 计算两级最小差a
  36. b = max(max(absX0_Xi)) % 计算两级最大差b
  37. rho = 0.5; % 分辨系数取0.5
  38. gamma = (a+rho*b) ./ (absX0_Xi + rho*b) % 计算子序列中各个指标与母序列的关联系数
  39. weight = mean(gamma) / sum(mean(gamma)); % 利用子序列中各个指标的灰色关联度计算权重
  40. score = sum(X .* repmat(weight,size(X,1),1),2); % 未归一化的得分
  41. stand_S = score / sum(score); % 归一化后的得分
  42. [sorted_S,index] = sort(stand_S ,'descend') % 进行排序

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/知新_RL/article/detail/682190
推荐阅读
相关标签
  

闽ICP备14008679号