当前位置: 首页 > 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.xdnf.cn/news/1200403.html

相关文章:

  • 三、构建一个Agent
  • OpenCv中的 KNN 算法实现手写数字的识别
  • 消息队列MQ常见问题和解决方案
  • Java面试全攻略:Spring生态与微服务架构实战
  • 新手开发 App,容易陷入哪些误区?
  • Android:Reverse 实战 part 2 番外 IDA python
  • SignalR 全解析:核心原理、适用场景与 Vue + .NET Core 实战
  • [电网备考]计算机组成与原理
  • Vue 四个map的使用方法
  • Mysql 二进制安装常见问题
  • 设备独立性软件-高速缓存与缓冲区
  • GIF图像格式
  • 水稻调控组全景的综合绘制与建模揭示了复杂性状背后的调控架构
  • springboot基于Java的人力资源管理系统设计与实现
  • Java面试新趋势:云原生与新兴框架实战解析
  • Vscode的常用快捷键(摆脱鼠标计划)
  • 24点数学游戏(穷举法求解表达式)
  • mybatis-plus逻辑删除配置
  • PROFINET转CAN通讯协议转换速通汽车制造
  • 【机器学习-3】 | 决策树与鸢尾花分类实践篇
  • 【Typora】分享一款很好用的PJ版本的Markdown编辑器
  • k8s pod生命周期、初始化容器、钩子函数、容器探测、重启策略
  • S7-1500 与 S7-1200 存储区域保持性设置特点详解
  • ESP32学习-FreeRTOS队列使用指南与实战
  • 回归预测 | MATLAB实现BiTCN双向时间卷积神经网络多输入单输出回归预测
  • 如何在 Ubuntu 24.04 或 22.04 中更改 SSH 端口
  • 个人笔记HTML5
  • 【ee类保研面试】通信类---信息论
  • [2025CVPR-图象超分辨方向]DORNet:面向退化的正则化网络,用于盲深度超分辨率
  • 标签驱动的可信金融大模型训练全流程-Agentar-Fin-R1工程思路浅尝