【学习笔记】Matlab和python双语言的学习(灰色关联分析法)


前言

通过模型算法,熟练对Matlab和python的应用。
学习视频链接:
https://www.bilibili.com/video/BV1EK41187QF?p=13&vd_source=67471d3a1b4f517b7a7964093e62f7e6

一、灰色关联分析

1.灰色系统理论

灰色系统理论(Grey System Theory)是一种用于处理不完全、未知或部分已知信息系统的方法。它由中国学者邓聚龙教授在20世纪80年代提出,主要用于分析和建模不确定性系统,并通过有限的信息和数据来推测、预测和优化系统行为。灰色系统理论弥补了传统统计方法在处理小样本和不完全信息时的不足。

核心概念

  1. 灰色

    • 在灰色系统理论中,“灰色"代表着不完全或不确定的信息。与此相对的是"白色”(完全已知的信息)和"黑色"(完全未知的信息)。灰色系统介于完全已知和完全未知之间。
  2. 灰色数

    • 灰色数是一个数值范围或区间,表示不确定的数值。它用于描述不确定性和模糊性。
  3. 灰色关系

    • 灰色关系用于度量系统中各变量之间的关联程度。灰色关联分析是研究变量之间相互关系的重要工具,用于确定关键因素和主要驱动因素。
  4. 灰色模型

    • 灰色模型(如GM(1,1)模型)用于预测系统的未来行为。GM(1,1)模型是一阶单变量的灰色预测模型,通过累加生成序列,并用差分方程建模来进行预测。

2.关联分析

所谓关联分析,就是系统地分析因素。回答的问题是: 某个包含多种因素的系统中,哪些因素是主要的,哪些是次要的;哪些因素影响大,哪些因素影响小;哪些因素是明显的,哪些因素是潜在的;哪些是需要发展的,那些需要抑制……

现有因素分析的量化方法,大都是数理统计法如回归分析、方差分析、主要成分分析等,这些方法都有下述弱点:
(1)要求大量数据,数据量少难以找到统计规律
(2)要求分布是典型的(线性的、指数的或对数的),即使是典型的并非都能处理
(3)计算工作量大,一般需要计算机帮助
(4)有时可能出现反常情况,如正相关则断为负相关,以至正确现象受到歪曲和颠倒

尤其是我国统计数据十分有限,而且现有数据灰度较大,许多数据都出现几次大起大落,没有典型的分布规律。因此,采用数理统计方法往往难以奏效。

3.灰色关联分析

灰色关联度分析(Grey Relation Analysis,GRA),是一种多因素统计分析的方法。灰色关联分析方法弥补了采用数理统计方法作系统分析所导致的缺憾。它对样本量的多少和样本有无规律都同样适用,而且计算量小,十分方便,更不会出现量化结果与定性分析结果不符的情况。

灰色关联分析的基本思想是根据序列曲线几何形状的相似程度来判断其联系是否紧密。曲线越接近,相应序列之间的关联度就越大,反之就越小。

对一个抽象的系统或现象进行分析,首先要选准反映系统行为特征的数据序列,称为找系统行为的映射量,用映射量来间接地表征系统行为。例如,用国民平均接受教育的年数来反映教育发达程度,用刑事案件的发案率来反映社会治安面貌和社会秩序,用医院挂号次数来反映国民的健康水平等。有了系统行为特征数据和相关因素的数据,即可作出各个序列的图形,从直观上进行分析。

二、灰色关联分析步骤

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

能反应系统行为特征的数据序列,类似与因变量 Y
Y = [ y 1 , y 2 , ⋯   , y n ] T Y=\begin{bmatrix}y_1,y_2,\cdots,y_n\end{bmatrix}^T Y=[y1,y2,,yn]T
2、子序列(又称比较序列、子指标)

影响系统行为的因素组成的数据序列,类似于自变量 X,记为:
X n m = [ x 11 x 12 ⋯ x 1 m x 21 x 22 ⋯ x 2 m ⋮ ⋮ ⋱ ⋮ x n 1 x n 2 ⋯ x n m ] {X_{nm}}=\begin{bmatrix}x_{11}&x_{12}&\cdots&x_{1m}\\x_{21}&x_{22}&\cdots&x_{2m}\\\vdots&\vdots&\ddots&\vdots\\\\x_{n1}&x_{n2}&\cdots&x_{nm}\end{bmatrix} Xnm= x11x21xn1x12x22xn2x1mx2mxnm
3、数据预处理

由于不同要素具有不同量纲和数据范围,因此我们要对他们进行预处理去量纲,将他们统一到近似的范围内,先求出每个指标的均值,在用指标中的元素除以其均值
y k ~ = y k y i , y i ‾ = 1 n ∑ k = 1 n y k x k i ~ = x k i x i ‾ , x i ‾ = 1 n ∑ k = 1 n x k i ( i = 1 , 2 , ⋯   , m ) \widetilde{y_{k}}=\frac{y_{k}}{y_{i}},\overline{y_{i}}=\frac{1}{n}\sum_{k=1}^{n}y_{k}\quad\widetilde{x_{ki}}=\frac{x_{ki}}{\overline{x_{i}}},\overline{x_{i}}=\frac{1}{n}\sum_{k=1}^{n}x_{ki}\left(i=1,2,\cdots,m\right) yk =yiyk,yi=n1k=1nykxki =xixki,xi=n1k=1nxki(i=1,2,,m)
4、计算灰色关联系数

计算子序列中各个指标与母序列的关联系数,记为:
a = min ⁡ i min ⁡ k ∣ x o ( k ) − x i ( k ) ∣ , b = max ⁡ i max ⁡ k ∣ x o ( k ) − x i ( k ) ∣ a=\min_{i}\min_{k}\left|x_{o}\left(k\right)-x_{i}\left(k\right)\right|, b=\max_{i}\max_{k}\left|x_{o}\left(k\right)-x_{i}\left(k\right)\right| a=iminkminxo(k)xi(k),b=imaxkmaxxo(k)xi(k)为两级最小差和最大差。

构造: ξ i ( k ) = y ( x 0 ( k ) , x i ( k ) ) = a + ρ b ∣ x 0 ( k ) − x i ( k ) ∣ + ρ b 其中 ρ 为分辨系数,一般取 0.5 {\xi_{i}}(k)=y\left(x_{0}\left(k\right),x_{i}\left(k\right)\right)=\frac{a+\rho b}{\left|x_{0}\left(k\right)-x_{i}\left(k\right)\right|+\rho b}\quad\text{其中}{\rho\text{为分辨系数,一般取}0.5} ξi(k)=y(x0(k),xi(k))=x0(k)xi(k)+ρba+ρb其中ρ为分辨系数,一般取0.5
5、计算关联度
r i = 1 n ∑ k = 1 n ξ i ( k ) = 1 n ∑ k = 1 n y ( x 0 ( k ) , x i ( k ) ) r_{i}=\frac{1}{n}\sum_{k=1}^{n}\xi_{i}\left(k\right)=\frac{1}{n}\sum_{k=1}^{n}y\left(x_{0}\left(k\right),x_{i}\left(k\right)\right) ri=n1k=1nξi(k)=n1k=1ny(x0(k),xi(k))

四、灰色关联分析例题

已知某地国民生产总值,工业和农业生产总值,原始数据的形式及来源见下表,分析工业农业哪个对国民生产总值影响大

在这里插入图片描述

(1)定义母序列及子序列如下

在这里插入图片描述

(2)数据预处理

对数据进行均值化 y k ~ = y k y i , y i ‾ = 1 n ∑ k = 1 n y k x k i ~ = x k i x i ‾ , x i ‾ = 1 n ∑ k = 1 n x k i ( i = 1 , 2 , ⋯   , m ) \widetilde{y_{k}}=\frac{y_{k}}{y_{i}},\overline{y_{i}}=\frac{1}{n}\sum_{k=1}^{n}y_{k}\quad\widetilde{x_{ki}}=\frac{x_{ki}}{\overline{x_{i}}},\overline{x_{i}}=\frac{1}{n}\sum_{k=1}^{n}x_{ki}\left(i=1,2,\cdots,m\right) yk =yiyk,yi=n1k=1nykxki =xixki,xi=n1k=1nxki(i=1,2,,m)
在这里插入图片描述

(3)求关联系数
a = min ⁡ i min ⁡ k ∣ x o ( k ) − x i ( k ) ∣ , b = max ⁡ i max ⁡ k ∣ x o ( k ) − x i ( k ) ∣ a=\min_{i}\min_{k}\left|x_{o}\left(k\right)-x_{i}\left(k\right)\right|, b=\max_{i}\max_{k}\left|x_{o}\left(k\right)-x_{i}\left(k\right)\right| a=iminkminxo(k)xi(k),b=imaxkmaxxo(k)xi(k)
ξ i ( k ) = y ( x 0 ( k ) , x i ( k ) ) = a + ρ b ∣ x 0 ( k ) − x i ( k ) ∣ + ρ b {\xi_{i}}(k)=y\left(x_{0}\left(k\right),x_{i}\left(k\right)\right)=\frac{a+\rho b}{\left|x_{0}\left(k\right)-x_{i}\left(k\right)\right|+\rho b}\quad ξi(k)=y(x0(k),xi(k))=x0(k)xi(k)+ρba+ρb
在这里插入图片描述

得到 :a = 0.01 ;b = 0.38

(4)求关联度
r i = 1 n ∑ k = 1 n ξ i ( k ) = 1 n ∑ k = 1 n y ( x 0 ( k ) , x i ( k ) ) r_{i}=\frac{1}{n}\sum_{k=1}^{n}\xi_{i}\left(k\right)=\frac{1}{n}\sum_{k=1}^{n}y\left(x_{0}\left(k\right),x_{i}\left(k\right)\right) ri=n1k=1nξi(k)=n1k=1ny(x0(k),xi(k))
在这里插入图片描述

r1 > r2 工业产值关联度更大

五、代码实现----Matlab

clear;clc;
% A = [55 65 75 100;24 38 40 50;10 22 18 20]

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

% 数据预处理
X_mean = A ./ repmat(mean(A,2),1,m);
% 取出母序列
X0 = X_mean(1,:);
% 取出子序列
Xi = X_mean(2:end,:);

% 求关联系数
abs_x = abs(repmat(X0,2,1) - Xi);
a = min(min(abs_x));
b = max(max(abs_x));

kesi = (a + 0.5 * b) ./ (abs_x + 0.5 * b);
% 求关联度
r = mean(kesi,2);

六、代码实现----python

import numpy as np

# [[55, 24, 10], [65, 38, 22], [75, 40, 18], [100, 50, 20]]
A = np.array(eval(input('请输入初始矩阵:')))  # 假设输入的是合法的列表形式

n,m = A.shape

# 数据预处理
X_mean = A / np.mean(A,0)

# 取出母序列
X0 = X_mean[:,0]
# 取出子序列
Xi = X_mean[:,1:]

# 求关联函数
abs_x = abs(Xi - np.tile(X0.reshape(-1,1),(1,2)))

a = np.min(np.min(abs_x))

b = np.max(np.max(abs_x))

kesi = (a + 0.5 * b) / (abs_x + 0.5 * b)

# 求关联度
r = np.mean(kesi,0)

总结

本文介绍了评价决策的方法之一———灰色关联分析法,并分别使用Matlab和python进行代码编写。

  • 16
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值