hiyouga / hiyouga-blog-project

填坑ing...
http://blog.hiyouga.top
MIT License
7 stars 3 forks source link

灰色系统理论及其应用 #20

Closed hiyouga closed 5 years ago

hiyouga commented 6 years ago

比赛估计要用到这个方法,再巩固一下知识吧,灰色系统在综合评价里面说了一下,这边再详细地学习一下。

客观世界的很多实际问题,其内部的结构、参数以及特征并未全部被人们了解,人们不可能象研究白箱问题那样将其内部机理研究清楚,只能依据某种思维逻辑与推断来构造模型。对这类部分信息已知而部分信息未知的系统,我们称之为灰色系统。本章介绍的方法是从灰色系统的本征灰色出发,研究在信息大量缺乏或紊乱的情况下,如何对实际问题进行分析和解决。

灰色系统概论

客观世界在不断发展变化的同时,往往通过事物之间及因素之间相互制约、相互联系而构成一个整体,我们称之为系统。按事物内涵的不同,人们已建立了工程技术系统、社会系统、经济系统等。人们试图对各种系统所外露出的一些特征进行分析,从而弄清楚系统内部的运行机理。从信息的完备性与模型的构建上看,工程技术等系统具有较充足的信息量,其发展变化规律明显,定量描述较方便,结构与参数较具体,人们称之为白色系统;对另一类系统诸如社会系统、农业系统、生态系统等,人们无法建立客观的物理原型,其作用原理亦不明确,内部因素难以辨识或之间关系隐蔽,人们很难准确了解这类系统的行为特征,因此对其定量描述难度较大,带来建立模型的困难。这类系统内部特性部分已知的系统称之为灰色系统。一个系统的内部特性全部未知,则称之为黑色系统。 区别白色系统与灰色系统的重要标志是系统内各因素之间是否具有确定的关系。 运动学中物体运动的速度、加速度与其所受到的外力有关,其关系可用牛顿定律以明确的定量来阐明,因此,物体的运动便是一个白色系统。

灰色关联分析

灰色系统理论提出了一种新的分析方法——关联度分析方法,即根据因素之间发展态势的相似或相异程度来衡量因素间关联的程度,它揭示了事物动态关联的特征与程度。由于以发展态势为立足点,因此对样本量的多少没有过分的要求,也不需要典型的分布规律,计算量少到甚至可用手算,且不致出现关联度的量化结果与定性分析不一致的情况。 作为一个发展变化的系统,关联分析实际上是动态过程发展态势的量化比较分析。 所谓发展态势比较,也就是系统各时期有关统计数据的几何关系的比较。

数据变换技术

为保证建模的质量与系统分析的正确结果,对收集来的原始数据必须进行数据变换和处理,使其消除量纲和具有可比性。 设有序列\(x=(x(1), x(2), \cdots, x(n))\),则称映射\(f:x\to y, f(x(k))=y(k), k=1,2,\cdots,n\)为序列x到序列y的数据变换。

  1. 当 $$f(x(k))=\frac{x(k)}{x(1)}=y(k), x(1)\neq0$$ 称f是初值化变换
  2. 当 $$f(x(k))=\frac{x(k)}{\bar{x}}=y(k), \bar{x}=\frac1n\sum_{k=1}^nx(k)$$ 称f是均值化变换
  3. 当 $$f(x(k))=\frac{x(k)}{\max\limits_kx(k)}=y(k)$$ 称f是百分比变换
  4. 当 $$f(x(k))=\frac{x(k)}{\min\limits_kx(k)}=y(k), \min\limits_kx(k)\neq0$$ 称f是倍数变换
  5. 当 $$f(x(k))=\frac{x(k)}{x_0}=y(k), x_0\gt0$$ 称f是归一化变换
  6. 当 $$f(x(k))=\frac{x(k)-\min\limits_kx(k)}{\max\limits_kx(k)}=y(k)$$ 称f是极差最大值化变换
  7. 当 $$f(x(k))=\frac{x(k)-\min\limits_kx(k)}{\max\limits_kx(k)-\min\limits_kx(k)}=y(k)$$ 称f是区间值化变换
关联分析

选取参考数列 $$x_0=\{x_0(k)|k=1,2, \cdots, n\}=(x_0(1), x_0(2), \cdots, x_0(n))$$ 其中k表示时刻。假设有m个比较数列 $$x_i=\{x_i(k)|k=1,2, \cdots, n\}=(x_i(1), x_i(2), \cdots, x_i(n)), i=1, 2, \cdots, m$$ 则称 $$\xi_i(k)=\frac{\min\limits_s\min\limits_t|x_0(t)-x_s(t)|+\rho\max\limits_s\max\limits_t|x_0(t)-x_s(t)|}{|x_0(k)-x_i(k)|+\rho\max\limits_s\max\limits_t|x_0(t)-x_s(t)|}\tag{1}\label{1}$$ 为比较数列\(x_i\)对参考数列\(x_0\)在k时刻的关联系数,其中\(\rho\in[0,1]\)为分辨系数,称\(\eqref{1}\)式中\(\min\limits_s\min\limits_t|x_0(t)-x_s(t)|\)、\(\max\limits_s\max\limitst|x_0(t)-x_s(t)|\)分别为两级最小差两级最大差。 一般来讲,分辨系数ρ越大,分辨率越大;ρ越小,分辨率越小,ρ一般取为0.5。 \(\eqref{1}\)式定义的关联系数是描述比较数列与参考数列在某时刻关联程度的一种指标,由于各个时刻都有一个关联数,因此信息显得过于分散,不便于比较,为此我们给出定义: 称 $$r_i=\frac1n\sum_{k=1}^n\xi_i(k)\tag{2}\label{2}$$ 为比较数列\(x_i\)对参考数列\(x_0\)的关联度。 由\(\eqref{2}\)易看出,关联度是把各个时刻的关联系数集中为一个平均值,亦即把过于分散的信息集中处理。利用关联度这个概念,我们可以对各种问题进行因素分析。 区别因素关联是正关联还是负关联,计算 $$\sigma_i=\sum_{k=1}^nkx_i(k)-\sum_{k=1}^nx_i(k)\sum\{k=1}^n\frac{k}{n}, i=1,2,\cdots,n$$ 同号则是正关联,否则为负关联。

MATLAB程序示例:

clc, clear
load x.txt; %把原始数据存放在x.txt中
for i=1:15
     x(i, :)=x(i, :) / x(i, 1); %标准化数据
end
for i=16:17
     x(i, :)=x(i, 1) / x(i, :); %标准化数据
end
data = x;
n = size(data, 2); %求矩阵的列数,即观测时刻的个数
ck = data(1, :); %提取出参考数列
bj = data(2:end, :); %提取出比较数列
m2 = size(bj, 1); %求比较数列的个数
for j = 1:m2
    t(j, :) = bj(j, :) - ck;
end
mn = min(min(abs(t'))); %求最小差
mx = max(max(abs(t'))); %求最大差
rho = 0.5; %设置分辨系数
ksi = (mn + rho * mx) ./ (abs(t) + rho * mx); %求关联系数
r = sum(ksi') / n; %求关联度
[rs, rand] = sort(r, 'descend') %对关联度进行排序

优势分析

当参考数列不止一个,被比较的因素也不止一个时,则需进行优势分析。假设有\(m\)个参考数列(亦称母因素),记为\(y_1, y_2, \cdots, y_m\),再假设有\(l\)个比较数列(亦称子因素), 记为\(x_1, x_2, \cdots, x_l\)。显然,每一个参考数列对\(l\)个比较数列有\(l\)个关联度,设\(r_{ij}\)表示比较数列\(x_j\)对参考数列\(y_i\)的关联度,可构造关联(度)矩阵\(R=(r_{ij})_{m\times l}\)。根据矩阵R的各个元素的大小,可分析判断出哪些因素起主要影响,哪些因素起次要影响。起主要影响的因素称之为优势因素。再进一步,当某一列元素大于其它列元素时,称此列所对应的子因素为优势子因素;若某一行元素均大于其它行元素时,称此行所对应的母元素为优势母元素。 例如,矩阵R的第3列元素大于其它各列元素,\(r_{i3}\gt r_{ij}, i=1,2,\cdots,m, j\neq3\),则称\(x_3\)为优势子因素。 如果矩阵R的某个元素达到最大,则该行对应的母因素被认为是所有母因素中影响最大的。 为简单起见,先来讨论一下下三角阵,例如 $$A = \begin{pmatrix} 0.8 & 0 & 0 & 0 & 0 & 0\\ 0.6 & 0.5 & 0 & 0 & 0 & 0\\ 0.7 & 0.7 & 0.3 & 0 & 0 & 0\\ 0.4 & 0.6 & 0.7 & 0.9 & 0 & 0\\ 0.3 & 0.8 & 0.2 & 0.7 & 0.504 & 0 \end{pmatrix}$$ 因为第1列元素是满的,故称第1个子元素为潜在优势子因素。第2列元素中有一个元素为零,故称第2个子因素为次潜在优势子因素。余下类推。 当关联矩阵的“对角线”以下全都是零元素,则称第1个母因素为潜在优势母因素……。 为了分析方便,我们经常把相对较小的元素近似为零,从而使关联矩阵尽量稀疏。

举例: 某数据有6个母因素\(y_i(i=1,2,\cdots,6)\)和5个子因素\(x_j(j=1,2,\cdots,5)\),MATLAB程序如下:

clc,clear
load data.txt; %把原始数据存放在data.txt中
n = size(data, 1); %求矩阵的行数,即求所有因素的个数
m = size(data, 2);  %求矩阵的列数,即求观测时刻的个数
for i = 1:n
    data(i, :) = data(i, :) / data(i, 1); %标准化数据
end
m1 = 6; m2 = 5; %m1:母因素的个数;m2:子因素的个数
ck = data(m2+1:n, :); %提取出母因素数据
bj = data(1:m2, :); %提取出子因素数据
for i = 1:m1
    for j = 1:m2
        t(j, :) = bj(j, :) - ck(i, :);
    end
    mn = min(min(abs(t'))); %求母因素i的最小差
    mx = max(max(abs(t'))); %求母因素i的最大差
    rho = 0.5; %分辨系数设置
    ksi = (mn + rho * mx) ./ (abs(t) + rho * mx); %求母因素i对所有因素的关联系数
    rt = sum(ksi') / m; %求母因素i对所有因素的关联度
    r(i, :) = rt;
end
r

计算出各个子因素对母因素的关联度(这里取ρ=0.5),从而得到关联矩阵为 $$R = \begin{pmatrix} 0.802 & 0.761 & 0.557 & 0.810 & 0.936\\ 0.689 & 0.666 & 0.529 & 0.885 & 0.800\\ 0.891 & 0.858 & 0.579 & 0.577 & 0.675\\ 0.678 & 0.663 & 0.568 & 0.780 & 0.731\\ 0.811 & 0.774 & 0.565 & 0.804 & 0.921\\ 0.743 & 0.766 & 0.562 & 0.607 & 0.632 \end{pmatrix}$$ 从关联矩阵R可以看出:

  1. 第4行元素都比较小,表明各种子因素对第四个母因素影响不大。
  2. \(r_{15}=0.936\)最大,表明第五个子因素对第一个母因素的影响最大。
  3. \(r_{55}=0.936\)仅次于\(r_{15}\),表明第五个母因素主要取决于第五个子因素。
  4. 在第4列中\(r_{24}=0.885\)最大,表明第四个子因素对第二个母因素影响最大;而\(r_{34}=0.577\)是该列中最小的,表明第四个子因素和第三个母因素关系不大。
  5. 第三行的前2个元素比较大,表明第三个母因素同时受第一个和第二个子因素影响。

参考文档:灰色系统理论及其应用.pdf

Myriad-Dreamin commented 6 years ago

感觉...和你已经是另外一个世界的人了,找来找去也就这里联系你。苟富贵,emm,忘了也没关系。

hiyouga commented 6 years ago

@Myriad-Dreamin 不会忘记的,我永远膜拜纸夜大神_(:з」∠)_