数学建模笔记—— 灰色关联分析[GRA]

数学建模笔记—— 灰色关联分析[GRA]

  • 灰色关联分析(GRA)
    • 1. 相关概念
      • 1.1 灰色系统
      • 1.2 什么是关联分析?
      • 1.3 灰色关联分析
    • 2. 关联分析步骤
    • 3. 典型例题
      • 3.1 关联分析例题
      • 3.2 灰色关联综合评价
    • 4. python代码实现
      • 4.1 关联分析
      • 4.2 灰色关联综合评价

灰色关联分析(GRA)

1. 相关概念

1.1 灰色系统

灰色系统理论是1982年由邓聚龙创立的一门边缘性学科(interdisciplinary)。灰色系统用颜色深浅反映信息量的多少。说一个系统是黑色的,就是说这个系统是黑洞洞的,信息量太少;说一个系统是白色的,就是说这个系统是清楚的,信息量充足。而处于黑白之间的系统,或说信息不完全的系统,称为灰色系统或简称灰系统。

“信息不完全”是灰的基本含义,一般指:

  1. 系统因素不完全明确
  2. 因素关系不完全清楚
  3. 系统的结构不完全知道
  4. 系统的作用原理不完全明了
从表象看明朗若明若暗
从过程看新旧交替
从性质看不纯多种成分
从信息看完全不完全部分完全
从结果看唯一的解无数的解非唯一性
从态度看肯定否定扬弃
从方法看严厉放纵宽容

1.2 什么是关联分析?

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

现有因素分析的量化方法,大都是数理统计法如回归分析、方差分析、主要成分分析等,这些方法都有下述弱点:

  1. 要求大量数据,数据量少难以找到统计规律
  2. 要求分布是典型的(线性的、指数的或对数的),即使是典型的并非都能处理
  3. 计算工作量大,一般需要计算机帮助
  4. 有时可能出现反常情况,如正相关则断为负相关,以至正确现象受到歪曲和颠倒

1.3 灰色关联分析

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

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

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

2. 关联分析步骤

  1. 指标正向化

    所谓正向化处理,就是将极小型、中间型以及区间型指标统一转化为极大型指标。

  2. 确定分析数列

    1. 母序列(又称参考数列,母指标):能反映系统应为特征的数据序列,其类似于因变量 Y Y Y,记为 Y = [ y 1 , y 2 , ⋯   , y n ] T Y=\left[y_{1},y_{2},\cdots,y_{n}\right]^{T} Y=[y1,y2,,yn]T

    2. 子序列(又称比较数列,子指标):影响系统行为的因素组成的数据序列,其类似于自变量 X X 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}}{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 0 ( k ) − x i ( k ) ∣ a=\min_{i}\min_{k}\left | x_{0}\left ( k\right ) - x_{i}\left ( k\right ) \right | a=miniminkx0(k)xi(k), b = max ⁡ i m a x k ∣ x 0 ( k ) − x i ( k ) ∣ b= \max _{i}max_k\left | x_{0}\left ( k\right ) - x_{i}\left ( k\right ) \right | b=maximaxkx0(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} ξi(k)=y(x0(k),xi(k))=x0(k)xi(k)+ρba+ρb 其中 ρ \rho ρ为分辨系数,一般取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\Big(x_{0}\left(k\right),x_{i}\left(k\right)\Big) ri=n1k=1nξi(k)=n1k=1ny(x0(k),xi(k))

3. 典型例题

3.1 关联分析例题

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

项目名称年份
2016201720182019
国民生产总值556575100
工业产值24384050
农业产值10221820
  1. 定义母序列及子序列如下

    项目名称年份项目代号
    2016201720182019
    国民生产总值556575100X0(母序列)
    工业产值24384050X1(子序列)
    农业产值10221820X2(子序列)
  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}}{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)

    项目名称年份项目代号
    2016201720182019
    国民生产总值0.750.881.021.36(母序列)
    工业产值0.631.001.051.32(子序列)
    农业产值0.571.261.031.14(子序列)
  3. 求关联系数
    a = min ⁡ i min ⁡ k ∣ x 0 ( k ) − x i ( k ) ∣ b = max ⁡ i m a x k ∣ x 0 ( k ) − x i ( k ) ∣ ξ i ( k ) = y ( x 0 ( k ) , x i ( k ) ) = a + ρ b ∣ x 0 ( k ) − x i ( k ) ∣ + ρ b a= \min _{i}\min _{k}\left | x_{0}\left ( k\right ) - x_{i}\left ( k\right ) \right |\\ b= \max _{i}max_k\left | x_{0}\left ( k\right ) - x_{i}\left ( k\right ) \right |\\ \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} a=iminkminx0(k)xi(k)b=imaxmaxkx0(k)xi(k)ξi(k)=y(x0(k),xi(k))=x0(k)xi(k)+ρba+ρb

    kX_0X_1X_2|x_0(k)-x_1(k)||x_0(k)-x_2(k)|
    10.750.630.570.120.18
    20.881.001.260.120.38
    31.021.051.030.030.01
    41.361.321.140.040.22

    得a=0.01,b=0.38
    ξ i ( k ) = y ( x 0 ( k ) , x i ( k ) ) = 0.01 + 0.5 × 0.38 ∣ x 0 ( k ) − x i ( k ) ∣ + 0.5 × 0.38 = 0.2 ∣ x 0 ( k ) − x i ( k ) ∣ + 0.19 \begin{aligned} \xi_{i}\left(k\right)=y\left(x_{0}\left(k\right),x_{i}\left(k\right)\right)& =\frac{0.01+0.5\times0.38}{\left|x_{0}\left(k\right)-x_{i}\left(k\right)\right|+0.5\times0.38} \\ &=\frac{0.2}{\left|x_{0}\left(k\right)-x_{i}\left(k\right)\right|+0.19} \end{aligned} ξi(k)=y(x0(k),xi(k))=x0(k)xi(k)+0.5×0.380.01+0.5×0.38=x0(k)xi(k)+0.190.2

    k ∥ x 0 ( k ) − x 1 ( k ) ∥ \|x_{0}(k)-x_{1}(k)\| x0(k)x1(k) ∥ x 0 ( k ) − x 2 ( k ) ∥ \|x_{0}(k)-x_{2}(k)\| x0(k)x2(k) ξ 1 \xi_1 ξ1 ξ 2 \xi_2 ξ2
    10.120.180.6450.541
    20.120.380.6450.351
    30.030.010.9091.000
    40.040.220.8700.488
  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\Big(x_{0}\left(k\right),x_{i}\left(k\right)\Big) ri=n1k=1nξi(k)=n1k=1ny(x0(k),xi(k))

    k ξ 1 \xi_1 ξ1 ξ 2 \xi_2 ξ2
    10.6450.541
    20.6450.351
    30.9091.000
    40.8700.488
    r r r0.7670.595

    r 1 > r 2 r_1>r_2 r1>r2,工业产值关联度更大。

3.2 灰色关联综合评价

换个方法给明星Kun找一个对象,经过层层考察,留下三个候选人。他认为身高165是最好的,体重在90-100斤是最好的。

候选人颜值牌气(争吵次数)身高体重
A910175120
B8716480
C6315790
  1. 数据正向化

    将原始矩阵正向化,就是要将所有的指标类型统一转化为极大型指标。
    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

    候选人颜值牌气(争吵次数)身高体重
    A9000
    B830.90.5
    C670.21
  2. 正向化后的数据进行预处理

    每个指标的元素除以该指标元素的平均值。
    Z n m = [ z 11 z 12 ⋯ z 1 m z 21 z 22 ⋯ z 2 m ⋮ ⋮ ⋱ ⋮ z n 1 z n 2 ⋯ z n m ] Z_{nm}=\begin{bmatrix}z_{11}&z_{12}&\cdots&z_{1m}\\z_{21}&z_{22}&\cdots&z_{2m}\\\vdots&\vdots&\ddots&\vdots\\z_{n1}&z_{n2}&\cdots&z_{nm}\end{bmatrix} Znm=z11z21zn1z12z22zn2z1mz2mznm

    候选人颜值牌气(争吵次数)身高体重
    A1.170.000.000.00
    B1.040.902.451.00
    C0.782.100.552.00
  3. 构造母序列

    选取每个指标的最大值作为母序列
    Y = [ y 1 , y 2 , ⋯   , y n ] T 其中 y i = m a x ( z i 1 , z i 2 , ⋯   , z i m ) Y=\begin{bmatrix}y_1,y_2,\cdots,y_n\end{bmatrix}^T\quad\text{其中}\quad y_i=max\begin{pmatrix}z_{i1},z_{i2},\cdots,z_{im}\end{pmatrix} Y=[y1,y2,,yn]T其中yi=max(zi1,zi2,,zim)

    候选人Y颜值牌气(争吵次数)身高体重
    A1.171.170.000.000.00
    B2.451.040.902.451.00
    C2.100.782.100.552.00
  4. 计算关联系数

    记差值矩阵为 K K K
    K n m = [ k 11 k 12 ⋯ k 1 m k 21 k 22 ⋯ k 2 m ⋮ ⋮ ⋱ ⋮ k n 1 k n 2 ⋯ k n m ] = [ ∣ z 11 − y 11 ∣ ∣ z 2 − y 1 ∣ ⋯ ∣ z 1 m − y 1 ∣ ∣ z 21 − y 2 ∣ ∣ z 22 − y 2 ∣ ⋯ ∣ z 2 m − y 2 ∣ ⋮ ⋮ ⋱ ⋮ ∣ z n 1 − y n ∣ ∣ z n 2 − y n ∣ ⋯ ∣ z n m − y n ∣ ] a = min ⁡ i min ⁡ k ∣ x o ( k ) − x i ( k ) ∣ b = max ⁡ i max ⁡ k ∣ x o ( k ) − x i ( k ) ∣ \begin{aligned}&K_{nm}=\begin{bmatrix}k_{11}&k_{12}&\cdots&k_{1m}\\k_{21}&k_{22}&\cdots&k_{2m}\\\vdots&\vdots&\ddots&\vdots\\k_{n1}&k_{n2}&\cdots&k_{nm}\end{bmatrix}=\begin{bmatrix}\left|z_{11}-y_{11}\right|&\left|z_{2}-y_{1}\right|&\cdots&\left|z_{1m}-y_{1}\right|\\\left|z_{21}-y_{2}\right|&\left|z_{22}-y_{2}\right|&\cdots&\left|z_{2m}-y_{2}\right|\\\vdots&\vdots&\ddots&\vdots\\\left|z_{n1}-y_{n}\right|&\left|z_{n2}-y_{n}\right|&\cdots&\left|z_{nm}-y_{n}\right|\end{bmatrix}\\&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|\end{aligned} Knm=k11k21kn1k12k22kn2k1mk2mknm=z11y11z21y2zn1ynz2y1z22y2zn2ynz1my1z2my2znmyna=iminkminxo(k)xi(k)b=imaxkmaxxo(k)xi(k)

    候选人 Y Y Y Z 1 Z_1 Z1 Z 2 Z_2 Z2 Z 3 Z_3 Z3 Z 4 Z_4 Z4 ∥ z k 1 − y k ∥ \|z_{k1} - y_k\| zk1yk ∥ z k 2 − y k ∥ \|z_{k2} - y_k\| zk2yk ∥ z k 3 − y k ∥ \|z_{k3} - y_k\| zk3yk ∥ z k 4 − y k ∥ \|z_{k4} - y_k\| zk4yk
    A A A1.171.170.000.000.000.001.171.171.17
    B B B2.451.040.902.451.001.411.550.001.45
    C C C2.100.782.100.552.001.320.001.550.10

    易得a=0,b=1.55
    ξ i ( k ) = y ( x 0 ( k ) , x i ( k ) ) = 0 + 0.5 × 1.55 ∣ x 0 ( k ) − x i ( k ) ∣ + 0.5 × 1.55 = 0.775 ∣ x 0 ( k ) − x i ( k ) ∣ + 0.775 \xi_{i}\left(k\right)=y\left(x_{0}\left(k\right),x_{i}\left(k\right)\right)=\frac{0+0.5\times1.55}{\left|x_{0}\left(k\right)-x_{i}\left(k\right)\right|+0.5\times1.55}=\frac{0.775}{\left|x_{0}\left(k\right)-x_{i}\left(k\right)\right|+0.775} ξi(k)=y(x0(k),xi(k))=x0(k)xi(k)+0.5×1.550+0.5×1.55=x0(k)xi(k)+0.7750.775

    候选人 ∥ z k 1 − y k ∥ \|z_{k1}-y_k\| zk1yk ∥ z k 2 − y k ∥ \|z_{k2}-y_k\| zk2yk ∥ z k 3 − y k ∥ \|z_{k3}-y_k\| zk3yk ∥ z k 4 − y k ∥ \|z_{k4}-y_k\| zk4yk ξ 1 \xi_1 ξ1 ξ 2 \xi_2 ξ2 ξ 3 \xi_3 ξ3 ξ 4 \xi_4 ξ4
    A0.001.171.171.171.0000.3980.3980.398
    B1.411.550.001.450.3550.3331.0000.348
    C1.320.001.550.100.3701.0000.3330.886
  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\Big(x_{0}\left(k\right),x_{i}\left(k\right)\Big) ri=n1k=1nξi(k)=n1k=1ny(x0(k),xi(k))

    候选人 ξ 1 \xi_1 ξ1 ξ 2 \xi_2 ξ2 ξ 3 \xi_3 ξ3 ξ 4 \xi_4 ξ4
    A1.0000.3980.3980.398
    B0.3550.3331.0000.348
    C0.3701.0000.3330.886
    r0.5750.5770.5770.544
  6. 计算指标权重

    将关联度归一化即可得到指标权重
    w i = r i ∑ k = 1 m r k ( i = 1 , 2 , ⋯   , m ) \begin{aligned}w_{i}&=\frac{r_{i}}{\sum_{k=1}^{m}r_{k}}\big(i=1,2,\cdots,m\big)\end{aligned} wi=k=1mrkri(i=1,2,,m)

    候选人颜值脾气(争吵次数)身高体重
    r0.5750.5770.5770.544
    W0.2530.2540.2540.239
  7. 计算得分并归一化

    候选人颜值脾气(争吵次数)身高体重得分归一化得分
    A1.170.000.000.000.2960.099
    B1.040.902.451.001.3530.451
    C0.782.100.552.001.3480.450

因此选择B

4. python代码实现

4.1 关联分析

import numpy as np

A = np.array(eval(input("请输入初始矩阵:")))

# 求出每一列的均值以供后续的数据处理
Mean = np.mean(A, axis=0)

# 预处理后的矩阵
A_norm = A/Mean

print("预处理后的矩阵为:\n", A_norm)

# 母序列
Y = A_norm[:, 0]

# 子序列
X = A_norm[:, 1:]

# 计算|x0-xi|矩阵,这里把x0看作是Y
absX0_Xi = np.abs(X-np.tile(Y.reshape(-1, 1), (1, X.shape[1])))

# 计算两级最小差a
a = np.min(absX0_Xi)

# 计算两级最大差b
b = np.max(absX0_Xi)

# 分布系数取0.5
rho = 0.5

# 计算子序列各个指标与母序列的关联系数
gamma = (a+rho*b)/(absX0_Xi+rho*b)

print("各个指标与母序列的关联系数为:\n", np.mean(gamma, axis=0))

输入:

[[55,24,10],[65,38,22],[75,40,18],[100,50,20]]

输出:

预处理后的矩阵为:
 [[0.74576271 0.63157895 0.57142857]
 [0.88135593 1.         1.25714286]
 [1.01694915 1.05263158 1.02857143]
 [1.3559322  1.31578947 1.14285714]]
各个指标与母序列的关联系数为:
 [0.76966578 0.60058464]

4.2 灰色关联综合评价

import numpy as np

# 从用户输入参评数目和指标数目
print("请输入参评数目:")
n = int(input())
print("请输入指标数目:")
m = int(input())

# 接受用户输入的类型矩阵
print("请输入类型矩阵:1. 极大型 2. 极小型 3. 中间型 4.区间型")
kind = input().split(" ")

# 接受用户输入的矩阵并转化为向量
print("请输入矩阵:")
A = np.zeros(shape=(n, m))
for i in range(n):
    A[i] = input().split(" ")
    A[i] = list(map(float, A[i]))
print("输入矩阵为:\n{}".format(A))

# 极小型指标转化为极大型指标的函数


def minTomax(maxx, x):
    x = list(x)
    ans = [[(maxx-e) for e in x]]
    return np.array(ans)

# 中间型指标转化为极大型指标的函数


def midTomax(bestx, x):
    x = list(x)
    h = [abs(e-bestx) for e in x]
    M = max(h)
    if M == 0:
        M = 1  # 防止最大差值为0的情况
    ans = [[1-(e/M) for e in h]]
    return np.array(ans)

# 区间型指标转化为极大型指标的函数


def regTomax(lowx, highx, x):
    x = list(x)
    M = max(lowx-min(x), max(x)-highx)
    if M == 0:
        M = 1  # 防止最大差值为0的情况
    ans = []
    for i in range(len(x)):
        if x[i] < lowx:
            ans.append(1-(lowx-x[i])/M)
        elif x[i] > highx:
            ans.append(1-(x[i]-highx)/M)
        else:
            ans.append(1)
    return np.array([ans])


# 同一指标类型,将所有指标转化为极大型指标
X = np.zeros(shape=(n, 1))
for i in range(m):
    if kind[i] == "1":
        v = np.array(A[:, i])
    elif kind[i] == "2":
        maxA = max(A[:, i])
        v = minTomax(maxA, A[:, i])
    elif kind[i] == "3":
        print("类型三,请输入最优值:")
        bestA = eval(input())
        v = midTomax(bestA, A[:, i])
    elif kind[i] == "4":
        print("类型四,请输入区间[a,b]值a:")
        lowA = eval(input())
        print("类型四,请输入区间[a,b]值b:")
        highA = eval(input())
        v = regTomax(lowA, highA, A[:, i])
    if i == 0:
        X = v.reshape(-1, 1)  # 如果是第一个指标,直接赋值
    else:
        X = np.hstack((X, v.reshape(-1, 1)))  # 如果不是第一个指标,横向拼接
print("统一指标后矩阵为:\n{}".format(X))

# 对正向化后的矩阵进行预处理
Mean = np.mean(X, axis=0)
Z = X/Mean
print("预处理后的矩阵为:")
print(Z)

# 构造母序列和子序列
Y = np.max(Z, axis=1)  # 选取每一行最大值构成列向量的母序列
X = Z

# 计算得分
absX0_Xi = np.abs(X-np.tile(Y.reshape(-1, 1), (1, X.shape[1])))
a = np.min(absX0_Xi)
b = np.max(absX0_Xi)

# 分辨系数
rho = 0.5
gamma = (a+rho*b)/(absX0_Xi+rho*b)  # 计算关联系数
weight = np.mean(gamma, axis=0)/np.sum(np.mean(gamma, axis=0)
                                       )  # 利用子序列中各个指标与母序列的灰色关联度计算权重
score = np.sum(X*np.tile(weight, (X.shape[0], 1)), axis=1)  # 未归一化得分
stand_S = score/np.sum(score)  # 归一化得分
sorted_S = np.sort(stand_S)[::-1]  # 进行降序排序
index = np.argsort(stand_S)[::-1]  # 得到排序后的索引

print("归一化后的得分及其索引(降序):")
print(sorted_S)
print(index)

输入:

请输入参评数目:
3
请输入指标数目:
4
请输入类型矩阵:1. 极大型 2. 极小型 3. 中间型 4.区间型
1 2 3 4
请输入矩阵:
9 10 175 120
8 7 164 80
6 3 157 90
输入矩阵为:
[[  9.  10. 175. 120.]
 [  8.   7. 164.  80.]
 [  6.   3. 157.  90.]]
类型三,请输入最优值:
 165
类型四,请输入区间[a,b]值a:
90 
类型四,请输入区间[a,b]值b:
100

输出:

统一指标后矩阵为:
[[9.  0.  0.  0. ]
 [8.  3.  0.9 0.5]
 [6.  7.  0.2 1. ]]
预处理后的矩阵为:
[[1.17391304 0.         0.         0.        ]
 [1.04347826 0.9        2.45454545 1.        ]
 [0.7826087  2.1        0.54545455 2.        ]]
归一化后的得分及其索引(降序):
[0.45160804 0.44937917 0.0990128 ]
[1 2 0]
  • 8
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值