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

1.概念

1.灰色系统

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

灰色系统的主要特点

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

核心模型与方法

  1. 灰色预测模型(GM)

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

2.灰色关联分析

用于评估因素间关联程度,计算关联系数:

关联分析

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

灰色关联度分析

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

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

2.关联分析步骤

1. 母序列 (又称参考序列、母指标)

能反映系统行为特征的数据序列,类似于因变量

2. 子序列 (又称比较序列、子指标)

影响系统行为的因素组成的数据序列,类似于自变量 X

3. 数据预处理

由于不同要素具有不同量纲和数据范围,因此需要预处理去量纲,统一到相近的范围内。

方法:先求每个指标的均值 ,再用指标中的元素除以其均值

4.计算灰色关联系数

母序列是数据预处理后每个候选人指标的最大值

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

  • 两极最小差:

  • 两极最大差:

构造灰色关联系数

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

5.计算灰色关联度

2.代码

1.mean函数

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

1.默认计算:

Matlab 复制代码
M = mean(A) 

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

2.指定维度计算:

复制代码
M = mean(A, dim)  

dim为维度参数。例如:

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

2.两类代码

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

|-------------|---------------------------------|----------------------------------|
| 项目 | 灰色关联分析(GRA) | 灰色关联评价(GRE) |
| 目的 | 分析因素对结果的影响程度,识别关键驱动因素 | 对多个对象或方案进行排序或优劣评价 |
| 是否有参考序列 | 有,通常是母序列(参考序列),用于衡量子序列的影响程度 | 有,通常是理想最优序列,用于衡量各对象与理想值的接近程度 |
| 输出结果 | 各因素与参考序列的关联度排序 | 各评价对象与理想序列的接近程度排序 |
| 应用示例 | 分析哪些因素对经济增长影响最大 | 评估多个老师绩效谁最接近"理想教师" |
| 是否用于决策 | 一般用于解释性分析,辅助理解系统结构 | 多用于评价决策,如选优、排序、分级等 |

Matlab 复制代码
%灰色关联分析
%灰色关联分析用于系统分析例题的讲解
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));
Matlab 复制代码
%灰色关联评价
clear; clc;

A = input('请输入初始矩阵=');         % 输入初始矩阵

[n,m]=size(A);
disp(['共有' num2str(n) '个评价对象',num2str(m) '个评价指标']);
Judge = input(['这' num2str(m) '个指标是否需要正向化处理,需要输入1,不需要输入0:']);
if Judge==1
    Position=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));
    end
    disp('正向化后矩阵X=');
    disp(A);
end


Mean = 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');

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

相关推荐
shenghaide_jiahu14 小时前
数学建模——非线性规划
数学建模
shenghaide_jiahu20 小时前
数学建模——多目标规划
数学建模
Finn_JLU20 小时前
MacTex+Vscode数学建模排版
ide·vscode·数学建模
同元软控2 天前
赋能建模实践,服务教学科研 | 同元软控亮相第十九届数学建模教学与应用会议
数学建模
行然梦实2 天前
论文阅读:《多目标和多目标优化的回顾与评估:方法和算法》
论文阅读·算法·机器学习·数学建模
绿炮火2 天前
【MATLAB】(一)简介
开发语言·数学建模·matlab
tzc_fly2 天前
人类语言驱动物理机制建模的AIVC
数学建模
shenghaide_jiahu2 天前
数学建模——01规划/整数规划
算法·数学建模
行然梦实3 天前
粒子群优化算法(Particle Swarm Optimization, PSO) 求解二维 Rastrigin 函数最小值问题
算法·机器学习·数学建模