当前位置: 首页 > news >正文

数学建模——灰色关联分析

1.概念

1.灰色系统

灰色系统理论由中国学者邓聚龙于1982年提出,是一种研究“部分信息已知、部分信息未知”的不确定性系统的理论。其核心思想是通过对有限数据的生成、开发和提取,挖掘隐藏规律,实现系统行为的预测和控制。灰色系统介于“白色系统”(信息完全明确)与“黑色系统”(信息完全未知)之间,适用于贫信息、小样本的复杂系统分析。

灰色系统的主要特点

  1. 数据需求低无需大量样本,即使少量数据也能建模。
  2. 动态预测能力:通过累加生成(AGO)或累减生成(IAGO)处理原始数据,弱化随机性,强化规律性。
  3. 应用广泛:涵盖经济、农业、工程、生态等领域,如GDP预测、灾害评估等。

核心模型与方法

  1. 灰色预测模型(GM)

        最典型的是GM(1,1)模型,通过一阶微分方程描述数据趋势。

     2.灰色关联分析
用于评估因素间关联程度,计算关联系数: 

关联分析 

就是系统地分析因素,回答众多因素中:什么因素重要,什么因素不重要;哪些因素影响大,哪些影响小等等

 灰色关联度分析

灰色关联度分析(Grey Relational Analysis, GRA)是一种基于灰色系统理论的数学方法,用于量化系统中各因素间的关联程度。其核心思想是通过比较数据序列的几何形状相似性,判断各因素对主行为序列的影响强度适用于小样本、贫信息的不确定性系统分析

几何形状越相似——>发展态势越接近——>关联程度越大

2.关联分析步骤 

1. 母序列(又称参考序列、母指标)
能反映系统行为特征的数据序列,类似于因变量

2. 子序列(又称比较序列、子指标)
影响系统行为的因素组成的数据序列,类似于自变量 X

3. 数据预处理
由于不同要素具有不同量纲和数据范围,因此需要预处理去量纲,统一到相近的范围内。
方法:先求每个指标的均值,再用指标中的元素除以其均值

X_{hi}' = \frac{X_{hi}}{\displaystyle \frac{1}{m}\sum_{k=1}^{m} X_{ki}}, \quad i=1,2,\dots,m

4.计算灰色关联系数

母序列是数据预处理后每个候选人指标的最大值
计算子序列中各个指标与母序列的关联系数。

  • 两极最小差:a = \min_i \min_k \bigl|x_0(k)-x_i(k)\bigr|

  • 两极最大差:b = \max_i \max_k \bigl|x_0(k)-x_i(k)\bigr|

构造灰色关联系数

\xi_i(k)=\frac{a+\rho\,b}{\bigl|x_0(k)-x_i(k)\bigr|+\rho\,b},\qquad 0<\rho\le1

其中 ρ 为分辨系数,一般取 0.5。

5.计算灰色关联度

r = \frac{1}{n}\sum_{k=1}^{n}\xi(k) = \frac{1}{n}\sum_{k=1}^{n}y\!\bigl(x_0(k),\,x_i(k)\bigr) 

2.代码 

1.mean函数

 在MATLAB中,mean函数用于计算数组或矩阵中元素的平均值。支持对向量、矩阵、多维数组等数据类型进行操作,并可指定沿特定维度计算。

1.默认计算: 

M = mean(A) 

对向量A返回所有元素的平均值;对矩阵A返回每列的均值(沿第一维计算)。

2.指定维度计算:

M = mean(A, dim)  

dim为维度参数。例如:

  • dim=1:计算每列的均值(默认行为)。
  • dim=2:计算每行的均值。

2.两类代码

我也是看了半天,这两个不是一个东西

项目灰色关联分析(GRA)灰色关联评价(GRE)
目的分析因素对结果的影响程度,识别关键驱动因素多个对象或方案进行排序或优劣评价
是否有参考序列有,通常是母序列(参考序列),用于衡量子序列的影响程度有,通常是理想最优序列,用于衡量各对象与理想值的接近程度
输出结果各因素与参考序列的关联度排序各评价对象与理想序列的接近程度排序
应用示例分析哪些因素对经济增长影响最大评估多个老师绩效谁最接近“理想教师”
是否用于决策一般用于解释性分析,辅助理解系统结构多用于评价决策,如选优、排序、分级等
%灰色关联分析
%灰色关联分析用于系统分析例题的讲解
clear; clc;A = input('请输入初始矩阵=');         % 输入初始矩阵Mean = mean(A);                       % 求出每一列的均值以供后续的数据预处理
A = A ./ repmat(Mean, size(A,1), 1);  % 数据预处理(去量纲)
disp('预处理后的矩阵为:'); disp(A);Y = A(:,1);                           % 母序列
X = A(:,2:end);                       % 子序列X0_Xi = abs(X - repmat(Y,1,size(X,2)));   % 计算 |x0 - Xi| 矩阵a = min(min(X0_Xi));               % 两级最小差
b = max(max(X0_Xi));               % 两级最大差
rho = 0.5;                            % 分辨系数gamma = (a + rho*b) ./ (X0_Xi + rho*b);   % 关联系数矩阵
disp('子序列中各个指标的灰色关联度分别为:');
disp(mean(gamma));
%灰色关联评价
clear; clc;A = input('请输入初始矩阵=');         % 输入初始矩阵[n,m]=size(A);
disp(['共有' num2str(n) '个评价对象',num2str(m) '个评价指标']);
Judge = input(['这' num2str(m) '个指标是否需要正向化处理,需要输入1,不需要输入0:']);
if Judge==1Position=input('请输入需要正向化处理的指标所在的列,例如第2,3,6列现需要处理,那么输入[2,3,6]:');disp('请输入需要处理的这些列的指标类型(1:极小型,2:中间型,3:区间型)');Type=input('例如:第2列是极小型,第3列是区间型,第6列是中间型,需要输入[1,3,2]');for i=1:size(position,2)A(:,Position(i))=Positivization(A(:,Position(i)),Type(i),Position(i));enddisp('正向化后矩阵X=');disp(A);
endMean = mean(A);                       % 求出每一列的均值以供后续的数据预处理
A = A ./ repmat(Mean, size(A,1), 1);  % 数据预处理(去量纲)
disp('预处理后的矩阵为:'); disp(A);Y = max(A,[],2);                           % 母序列
X = A;                       % 子序列absX0_Xi = abs(X - repmat(Y,1,size(X,2)));   % 计算 |x0 - Xi| 矩阵a = min(min(absX0_Xi));               % 两级最小差
b = max(max(absX0_Xi));               % 两级最大差
rho = 0.5;                            % 分辨系数gamma = (a + rho*b) ./ (absX0_Xi + rho*b);   % 关联系数矩阵weight= mean(gamma)/sum(mean(gamma));%相当于算出了每一个因素的权重,标准化后乘到数据里面
score= sum(X .* repmat(weight,size(X,1),1),2);
stand_S=score/sum(score);%最终结果也要标准化一次
% [sorted_S,index]=sort(stand_S,'descend');

(其实不管用啥方法似乎都不会对最终结果有太大影响)

http://www.dtcms.com/a/301089.html

相关文章:

  • 一个MySQL的数据表最多能够存多少的数据?
  • net8.0一键创建支持(Redis)
  • GPT-4o实战应用指南:从入门到精通的技术心得
  • 【QT开发手册】 Qt界面介绍Qt程序多种实现项目文件解析
  • C语言(长期更新)第6讲:函数
  • 20250727-1-Kubernetes 网络-Ingress介绍,部署Ingres_笔记
  • Java面试精进:测试、监控与序列化技术全解析
  • Product Hunt 每日热榜 | 2025-07-27
  • 【C语言网络编程基础】TCP 服务器详解
  • 《不只是接口:GraphQL与RESTful的本质差异》
  • 机器学习的算法有哪些?
  • python优秀案例:基于python flask实现的小说文本数据分析与挖掘系统,包括K-means聚类算法和LDA主题分析
  • 系统整理Python的条件语句和常用方法
  • [ctfshow web入门]web99 in_array的弱比较漏洞
  • Java面试题及详细答案120道之(081-100)
  • OpenHarmony部件化编译最佳实践
  • 【优选算法】BFS解决FloodFill算法
  • Triton Shared编译
  • 零基础学习性能测试第五章:Tomcat的性能分析与调优-Tomcat原理,核心配置项,性能瓶颈分析,调优
  • JavaScript - 实现套索工具的demo
  • 机器学习鸢尾花案例
  • 面试150 只出现一次的数字Ⅱ
  • 相关数电知识
  • 【51单片机和数码管仿真显示问题共阴共阳代码】2022-9-24
  • Web3与元宇宙:构建下一代互联网的数字文明
  • Petalinux生成文件的关系
  • Flutter 生命周期介绍
  • 2507C++,结构化存储与复合文件
  • JavaWeb(苍穹外卖)--学习笔记13(微信小程序开发,缓存菜品,Spring Cache)
  • epoll_event 事件类型详解