Xiang Li

文章目录

  • 1 什么是灰色关联分析
  • 2 灰色关联分析的步骤
  • 3 灰色关联分析的实例
  • 4 灰色关联分析matlab的实现
  • 5 灰色关联分析python的实现

1 什么是灰色关联分析

灰色关联分析是指对一个系统发展变化态势的定量描述和比较的方法,其基本思想是通过确定参考数据列和若干个比较数据列的几何形状相似程度来判断其联系是否紧密,它反映了曲线间的关联程度。

通常可以运用此方法来分析各个因素对于结果的影响程度,也可以运用此方法解决随时间变化的综合评价类问题,其核心是按照一定规则确立随时间变化的母序列,把各个评估对象随时间的变化作为子序列,求各个子序列与母序列的相关程度,依照相关性大小得出结论

2 灰色关联分析的步骤

灰色关联分析的具体计算步骤如下:

第一步:确定分析数列。

确定反映系统行为特征的参考数列和影响系统行为的比较数列。反映系统行为特征的数据序列,称为参考数列。影响系统行为的因素组成的数据序列,称比较数列。

第二步,变量的无量纲化

由于系统中各因素列中的数据可能因量纲不同,不便于比较或在比较时难以得到正确的结论。因此在进行灰色关联度分析时,一般都要进行数据的无量纲化处理。

第三步,计算关联系数

第四步,计算关联度

因为关联系数是比较数列与参考数列在各个时刻(即曲线中的各点)的关联程度值,所以它的数不止一个,而信息过于分散不便于进行整体性比较。因此有必要将各个时刻(即曲线中的各点)的关联系数集中为一个值,即求其平均值,作为比较数列与参考数列间关联程度的数量表示,关联度riri公式如下:

第五步,关联度排序

3 灰色关联分析的实例

下表为某地区国内生产总值的统计数据(以百万元计),问该地区从2000年到2005年之间哪一种产业对GDP总量影响最大

Xiang Li_第1张图片

步骤1:确立母序列

在此需要分别将三种产业与国内生产总值比较计算其关联程度,故母序列为国内生产总值。若是解决综合评价问题时则母序列可能需要自己生成,通常选定每个指标或时间段中所有子序列中的最佳值组成的新序列为母序列。

步骤2:无量纲化处理

在此采用均值化法,即将各个序列每年的统计值与整条序列的均值作比值,可以得到如下结果:

Xiang Li_第2张图片
步骤3:计算每个子序列中各项参数与母序列对应参数的关联系数
在这里插入图片描述

其中ξi(k)表示第ii个子序列的第kk个参数与母序列(即0序列)的第kk个参数的关联系数, ρ   为 分 辨 系 数 取 值 范 围 在 为 分 辨 系 数 取 值 范 围 在 [ 0 , 1 ] \rho\ 为分辨系数取值范围在为分辨系数取值范围在[0,1] ρ [0,1],其取值越小求得的关联系数之间的差异性越显著,在此取为0.5进行计算可得到如下结果:

Xiang Li_第3张图片

4 灰色关联分析matlab的实现

clc;
close;
clear all;
x=xlsread('data.xlsx');
x=x(:,2:end)';
column_num=size(x,2);
index_num=size(x,1);

% 1、数据均值化处理
x_mean=mean(x,2);
for i = 1:index_num
    x(i,:) = x(i,:)/x_mean(i,1);
end
% 2、提取参考队列和比较队列
ck=x(1,:)
cp=x(2:end,:)
cp_index_num=size(cp,1);

%比较队列与参考队列相减
for j = 1:cp_index_num
    t(j,:)=cp(j,:)-ck;
end
%求最大差和最小差
mmax=max(max(abs(t)))
mmin=min(min(abs(t)))
rho=0.5;
%3、求关联系数
ksi=((mmin+rho*mmax)./(abs(t)+rho*mmax))

%4、求关联度
ksi_column_num=size(ksi,2);
r=sum(ksi,2)/ksi_column_num;

%5、关联度排序,得到结果r3>r2>r1
[rs,rind]=sort(r,'descend');

5 灰色关联分析python的实现

import pandas as pd
x=pd.read_excel('data.xlsx')
x=x.iloc[:,1:].T

# 1、数据均值化处理
x_mean=x.mean(axis=1)
for i in range(x.index.size):
    x.iloc[i,:] = x.iloc[i,:]/x_mean[i]

# 2、提取参考队列和比较队列
ck=x.iloc[0,:]
cp=x.iloc[1:,:]

# 比较队列与参考队列相减
t=pd.DataFrame()
for j in range(cp.index.size):
    temp=pd.Series(cp.iloc[j,:]-ck)
    t=t.append(temp,ignore_index=True)

#求最大差和最小差
mmax=t.abs().max().max()
mmin=t.abs().min().min()
rho=0.5
#3、求关联系数
ksi=((mmin+rho*mmax)/(abs(t)+rho*mmax))


#4、求关联度
r=ksi.sum(axis=1)/ksi.columns.size

#5、关联度排序,得到结果r3>r2>r1
result=r.sort_values(ascending=False)

你可能感兴趣的:(Machine,learning)