灰色关联分析应用

参考学习b站:数学建模学习交流

感觉这篇博客写的很好:灰色关联分析+Matlab代码实现

看完后自己尝试运行的一下,发现和自己本地的matlab代码运行结果不同,就把其中细节写到这篇博客里了

运行上述博客应用2的代码,将更多中间变量输出出来,得到结果:

请输入最佳的中间值:7
请输入区间的下界:10
请输入区间的下界:20
正向化后的矩阵为:
    4.6900    0.7172    3.0000    1.0000
    2.0300    0.4069   35.0000    0.6940
    9.1100    0.5241    8.0000    0.9058
    8.6100    0.9655    8.0000    0.4443
    7.1300    0.6552    4.0000    0.6914
    2.3900    0.8414   16.0000    0.6007
    7.6900    0.8552   16.0000    0.6551
    9.3000    0.8690   27.0000         0
    5.4500    0.5724   49.0000    1.0000
    6.1900    0.8138   37.0000    0.7848
    7.9300    0.6345   45.0000    0.6992
    4.4000    0.8069   37.0000    0.5419
    7.4600    0.1448   31.0000    1.0000
    2.0100         0    7.0000    0.4546
    2.0400    0.5862   31.0000    1.0000
    7.7300    0.4069    2.0000    1.0000
    6.3500    0.6000   29.0000    0.1824
    8.2900    0.0276   15.0000    1.0000
    3.5400    0.8138         0    0.4088
    7.4400    0.4897   46.0000    0.2731


a =

    2.1526


b =

   48.0900

各个指标对于母序列的灰色关联度为:

gamma =

    0.6320    0.6323    0.6254    0.6326

各个指标的权重为:

weight =

    0.2506    0.2507    0.2479    0.2508

******标准化后的矩阵为:

Z =

    0.1622    0.2483    0.0245    0.3065
    0.0702    0.1408    0.2863    0.2127
    0.3150    0.1814    0.0655    0.2776
    0.2977    0.3342    0.0655    0.1361
    0.2466    0.2268    0.0327    0.2119
    0.0826    0.2912    0.1309    0.1841
    0.2659    0.2960    0.1309    0.2008
    0.3216    0.3008    0.2209         0
    0.1885    0.1981    0.4009    0.3065
    0.2141    0.2817    0.3027    0.2405
    0.2742    0.2196    0.3682    0.2143
    0.1522    0.2793    0.3027    0.1661
    0.2580    0.0501    0.2536    0.3065
    0.0695         0    0.0573    0.1393
    0.0705    0.2029    0.2536    0.3065
    0.2673    0.1408    0.0164    0.3065
    0.2196    0.2077    0.2373    0.0559
    0.2867    0.0095    0.1227    0.3065
    0.1224    0.2817         0    0.1253
    0.2573    0.1695    0.3763    0.0837


Z_max =

    0.3216    0.3342    0.4009    0.3065


Z_min =

    0.0695         0         0         0


D_max =

    0.2082
    0.1751
    0.1843
    0.1879
    0.2004
    0.1913
    0.1484
    0.1785
    0.0953
    0.0841
    0.0791
    0.1236
    0.1632
    0.2832
    0.1597
    0.2163
    0.1703
    0.2143
    0.2423
    0.1429


D_min =

    0.2032
    0.1914
    0.2091
    0.2162
    0.1796
    0.1845
    0.2145
    0.2252
    0.2771
    0.2497
    0.2602
    0.2256
    0.2214
    0.0754
    0.2232
    0.1959
    0.1766
    0.1978
    0.1566
    0.2300

该矩阵得分为:

S =

    0.4940
    0.5223
    0.5316
    0.5350
    0.4727
    0.4910
    0.5911
    0.5578
    0.7441
    0.7481
    0.7670
    0.6460
    0.5758
    0.2102
    0.5830
    0.4754
    0.5091
    0.4800
    0.3926
    0.6167

矩阵归一化后得分为:

S =

    0.0451
    0.0477
    0.0486
    0.0489
    0.0432
    0.0449
    0.0540
    0.0510
    0.0680
    0.0684
    0.0701
    0.0590
    0.0526
    0.0192
    0.0533
    0.0434
    0.0465
    0.0439
    0.0359
    0.0564

但是我用下面的代码试了一下

%% 对正向化后的矩阵进行预处理
Mean = mean(X);  % 求出每一列的均值
Z = X ./ repmat(Mean,size(X,1),1);  
disp('预处理后的矩阵为:'); disp(Z)

%% 构造母序列和子序列
Y = max(Z,[],2);  % 母序列为虚拟的,用每一行的最大值构成的列向量表示母序列
X = Z; % 子序列就是预处理后的数据矩阵

%% 计算得分
absX0_Xi = abs(X - repmat(Y,1,size(X,2)))  % 计算|X0-Xi|矩阵
a = min(min(absX0_Xi))    % 计算两级最小差a
b = max(max(absX0_Xi))  % 计算两级最大差b
rho = 0.5; % 分辨系数取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') % 进行排序

运行结果为:

正向化后的矩阵 X =  
    4.6900    0.7172    3.0000    1.0000
    2.0300    0.4069   35.0000    0.6940
    9.1100    0.5241    8.0000    0.9058
    8.6100    0.9655    8.0000    0.4443
    7.1300    0.6552    4.0000    0.6914
    2.3900    0.8414   16.0000    0.6007
    7.6900    0.8552   16.0000    0.6551
    9.3000    0.8690   27.0000         0
    5.4500    0.5724   49.0000    1.0000
    6.1900    0.8138   37.0000    0.7848
    7.9300    0.6345   45.0000    0.6992
    4.4000    0.8069   37.0000    0.5419
    7.4600    0.1448   31.0000    1.0000
    2.0100         0    7.0000    0.4546
    2.0400    0.5862   31.0000    1.0000
    7.7300    0.4069    2.0000    1.0000
    6.3500    0.6000   29.0000    0.1824
    8.2900    0.0276   15.0000    1.0000
    3.5400    0.8138         0    0.4088
    7.4400    0.4897   46.0000    0.2731

预处理后的矩阵为:
    0.7831    1.2228    0.1345    1.4997
    0.3390    0.6937    1.5695    1.0408
    1.5211    0.8936    0.3587    1.3584
    1.4376    1.6461    0.3587    0.6662
    1.1905    1.1170    0.1794    1.0369
    0.3991    1.4345    0.7175    0.9008
    1.2840    1.4580    0.7175    0.9825
    1.5528    1.4815    1.2108         0
    0.9100    0.9759    2.1973    1.4997
    1.0336    1.3874    1.6592    1.1769
    1.3241    1.0817    2.0179    1.0486
    0.7347    1.3757    1.6592    0.8127
    1.2456    0.2469    1.3901    1.4997
    0.3356         0    0.3139    0.6818
    0.3406    0.9994    1.3901    1.4997
    1.2907    0.6937    0.0897    1.4997
    1.0603    1.0229    1.3004    0.2735
    1.3842    0.0470    0.6726    1.4997
    0.5911    1.3874         0    0.6131
    1.2423    0.8348    2.0628    0.4096


absX0_Xi =

    0.7166    0.2769    1.3651         0
    1.2306    0.8758         0    0.5287
         0    0.6275    1.1624    0.1627
    0.2085         0    1.2873    0.9799
         0    0.0735    1.0111    0.1536
    1.0354         0    0.7170    0.5336
    0.1739         0    0.7405    0.4755
         0    0.0714    0.3421    1.5528
    1.2873    1.2214         0    0.6976
    0.6256    0.2718         0    0.4823
    0.6938    0.9362         0    0.9693
    0.9245    0.2835         0    0.8465
    0.2541    1.2528    0.1095         0
    0.3462    0.6818    0.3679         0
    1.1591    0.5003    0.1095         0
    0.2090    0.8060    1.4100         0
    0.2402    0.2775         0    1.0270
    0.1155    1.4526    0.8270         0
    0.7963         0    1.3874    0.7743
    0.8205    1.2280         0    1.6532


a =

     0


b =

    1.6532


gamma =

    0.5356    0.7491    0.3771    1.0000
    0.4018    0.4855    1.0000    0.6099
    1.0000    0.5684    0.4156    0.8355
    0.7986    1.0000    0.3910    0.4576
    1.0000    0.9183    0.4498    0.8433
    0.4439    1.0000    0.5355    0.6077
    0.8261    1.0000    0.5275    0.6348
    1.0000    0.9205    0.7073    0.3474
    0.3910    0.4036    1.0000    0.5423
    0.5692    0.7526    1.0000    0.6315
    0.5437    0.4689    1.0000    0.4603
    0.4720    0.7446    1.0000    0.4941
    0.7649    0.3975    0.8830    1.0000
    0.7048    0.5480    0.6920    1.0000
    0.4163    0.6230    0.8830    1.0000
    0.7982    0.5063    0.3696    1.0000
    0.7749    0.7486    1.0000    0.4460
    0.8774    0.3627    0.4999    1.0000
    0.5093    1.0000    0.3733    0.5163
    0.5018    0.4023    1.0000    0.3333


weight =

    0.2433    0.2482    0.2574    0.2511


sorted_S =

    0.0703
    0.0687
    0.0659
    0.0576
    0.0572
    0.0553
    0.0549
    0.0533
    0.0529
    0.0513
    0.0509
    0.0460
    0.0458
    0.0453
    0.0449
    0.0443
    0.0437
    0.0432
    0.0321
    0.0167


index =

     9
    11
    10
    12
    20
     7
    13
    15
     8
     3
     4
     2
    17
     1
    18
    16
     5
     6
    19
    14

上面仅列出了灰色关联分析的结果,发现a,b的值(全矩阵最小/大值)不太对
在这里插入图片描述
和:
在这里插入图片描述

之后看博主的代码,发现有些问题:
在这里插入图片描述
这里预处理后的矩阵应该是new_X,而不是X,改完后和下面代码结果的ab值就一样了(0,1.6532)weight也一样了(0.2433 ,0.2482,0.2574,0.2511)

那么修正后灰色关联分析归一化后的得分为(未排序):

stand_S =

    0.0453
    0.0460
    0.0513
    0.0509
    0.0437
    0.0432
    0.0553
    0.0529
    0.0703
    0.0659
    0.0687
    0.0576
    0.0549
    0.0167
    0.0533
    0.0443
    0.0458
    0.0449
    0.0321
    0.0572

这样问题得以解决

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值