灰色系统 - 关联度分析法 例子 源代码
前面说到关联系数和关联度,本次就具体举个例子,并附上源代码,求解关联系数。
例子
因素 | t 0 t_0 t0 | t 1 t_1 t1 | t 2 t_2 t2 | t 3 t_3 t3 | t 4 t_4 t4 | t 5 t_5 t5 |
---|---|---|---|---|---|---|
x 0 x_0 x0 | 1 | 1.3 | 1.7 | 2 | 2.2 | 2.5 |
x 1 x_1 x1 | 0.1 | 0.13 | 0.15 | 0.18 | 0.3 | 0.32 |
x 2 x_2 x2 | 100 | 120 | 180 | 160 | 140 | 200 |
x 3 x_3 x3 | 1 | 1.32 | 1.7 | 2 | 2.2 | 2.5 |
x 4 x_4 x4 | 250 | 220 | 200 | 160 | 140 | 100 |
上面的这个例子,我们发现各个序列之间的数据差距太大了,所以首先采用数据变换技术(可以参考之前的博客),这里以初值化变化为例,对于
x
=
(
x
(
1
)
,
x
(
2
)
,
.
.
.
,
x
(
n
)
)
x=(x(1),x(2),...,x(n))
x=(x(1),x(2),...,x(n))序列,初值化序列定义为:
x
1
=
{
1
,
x
(
2
)
x
(
1
)
,
.
.
.
x
(
n
)
x
(
1
)
}
x^1 = \{ 1,\frac {x(2)}{x(1)},... \frac {x(n)}{x(1)} \}
x1={1,x(1)x(2),...x(1)x(n)}
但是对于
x
4
x_4
x4,发现其实递减规律,和上面四个序列不同,因此,对于
x
4
x_4
x4采用不同的数据变换:
x
1
=
{
1
,
x
(
1
)
x
(
2
)
,
.
.
.
x
(
1
)
x
(
n
)
}
x^1 = \{ 1,\frac {x(1)}{x(2)},... \frac {x(1)}{x(n)} \}
x1={1,x(2)x(1),...x(n)x(1)}
对上面的原始数据进行处理,可以得到处理后的数据
因素 | t 0 t_0 t0 | t 1 t_1 t1 | t 2 t_2 t2 | t 3 t_3 t3 | t 4 t_4 t4 | t 5 t_5 t5 |
---|---|---|---|---|---|---|
x 0 1 x_0^1 x01 | 1 | 1.3 | 1.7 | 2 | 2.2 | 2.5 |
x 1 1 x_1^1 x11 | 1 | 1.3 | 1.55 | 1.8 | 3 | 3.2 |
x 2 1 x_2^1 x21 | 1 | 1.20 | 1.80 | 1.60 | 1.40 | 2.00 |
x 3 1 x_3^1 x31 | 1 | 1.32 | 1.7 | 2 | 2.2 | 2.5 |
x 4 1 x_4^1 x41 | 1 | 1.1364 | 1.25 | 1.5625 | 1.7857 | 2.5 |
经过数据变换后,就感觉可以发现一些规律了,那么记下来就算算关联度,选取 x 0 1 x_0^1 x01为参考序列,关联度。
比较序列
x
i
x_i
xi对参考序列
x
0
x_0
x0在
k
k
k 时刻的关联系数定义为:
ζ
i
(
k
)
=
min
s
min
t
∣
x
0
(
t
)
−
x
s
(
t
)
∣
+
ρ
max
s
max
t
∣
x
0
(
t
)
−
x
s
(
t
)
∣
∣
x
0
(
k
)
−
x
i
(
k
)
∣
+
ρ
max
s
max
t
∣
x
0
(
t
)
−
x
s
(
t
)
∣
\zeta_i(k) =\frac{ \min \limits_{s} \min \limits_t \lvert x_0(t)-x_s(t) \rvert +\rho \max \limits_{s} \max \limits_t \lvert x_0(t)-x_s(t) \rvert } { \lvert x_0(k)-x_i(k) \lvert +\rho \max \limits_{s} \max \limits_t \lvert x_0(t)-x_s(t) \rvert }
ζi(k)=∣x0(k)−xi(k)∣+ρsmaxtmax∣x0(t)−xs(t)∣smintmin∣x0(t)−xs(t)∣+ρsmaxtmax∣x0(t)−xs(t)∣
其中,分辨系数
ρ
∈
[
0
,
1
]
\rho \in [0,1]
ρ∈[0,1],分辨系数
ρ
\rho
ρ 越大,分辨率越大;
ρ
\rho
ρ 越小,分辨率越小。
min
s
min
t
∣
x
0
(
t
)
−
x
s
(
t
)
∣
\min \limits_{s} \min \limits_t \lvert x_0(t)-x_s(t) \rvert
smintmin∣x0(t)−xs(t)∣为两级最小差,
max
s
max
t
∣
x
0
(
t
)
−
x
s
(
t
)
∣
\max \limits_{s} \max \limits_t \lvert x_0(t)-x_s(t) \rvert
smaxtmax∣x0(t)−xs(t)∣为两级最大值。
序列
x
i
x_i
xi 对参考数列
x
0
x_0
x0 的关联度定义为:
r i = 1 n ∑ k = 1 n ζ i ( k ) r_i = \frac{1}{n}\sum_{k=1}^{n}\zeta_i(k) ri=n1k=1∑nζi(k)
带入上述公式,得到各个序列相对于 x 0 x_0 x0关联度:
因素 | x 1 x_1 x1 | x 2 x_2 x2 | x 3 x_3 x3 | x 4 x_4 x4 |
---|---|---|---|---|
关联度 | 0.9717 | 0.6463 | 0.9921 | 0.6915 |
排序 | 3 | 4 | 1 | 2 |
分析
从结果上看, x 3 x_3 x3和 x 0 x_0 x0的关联度最高,即二者最相似, x 3 x_3 x3可以反映 x 0 x_0 x0的变化,这可以从原数据看出。 x 2 x_2 x2和 x 0 x_0 x0的关联度最高,原数据上这两个序列也是差距最大的。
源代码
clc;clear all;
data = [1 1.3 1.7 2 2.2 2.5
0.1 0.13 0.15 0.18 0.3 0.32
100 120 180 160 140 200
1 1.32 1.7 2 2.2 2.5
250 220 200 160 140 100];
% 数据变换
for i = 1:4
data(i,:) = data(i,:)/data(i,1);
end
data(5,:) = data(5,1)./data(5,:);
n=size(data,1); % 总共序列数
x0=data(1,:); % x0序列
mum1=size(x0,1); % 参考序列,这里只有一个
x_n=data(2:n,:); % 比较序列
mum2=size(x_n,1); % 比较序列个数
for i=1:mum1
for j=1:mum2
diffX(j,:)=x_n(j,:)-x0(i,:);
end
minmin=min(min(abs(diffX))); % 两级最小差
maxmax=max(max(abs(diffX))); % 两级最大差
rho=0.5;
Zeta=(minmin+rho*maxmax)./(abs(diffX)+rho*maxmax);
rt=sum(Zeta')/size(Zeta,2); % 关联度
rMax(i,:)=rt;
end
disp(['关联矩阵:'])
rMax
[rs,rind] = sort(rMax,'descend') %对关联度进行排序