信息扩散原理及实现(matlab)

信息扩散方法是为了弥补信息不足而考虑优化利用样本模糊信息的一种对样本进行集值化的模糊数学处理方法。最原始的形式是信息分配方法;最简单的信息扩散函数是正态扩散函数。信息扩散方法可以将一个分明值的样本点,变成一个模糊集。或者说,是把单值样本点,变成集值样本点。

信息扩散原理:
已知论域 U U
U = { u 1 , u 2 , . . . , u m } U= \left\{ u_1, u_2, ..., u_m \right\}

一个单值观测样本点 x x f ( u j ) = 1 h 2 π e ( x u j ) 2 2 h 2 f(u_j)=\frac{1}{h\sqrt{2\pi}}e^{-\frac{(x-u_j)^2}{2h^2}} 可以将其所携带的信息扩散给 U U 中的所有点。

f ( u j ) = 1 h 2 π e ( x u j ) 2 2 h 2 f(u_j)=\frac{1}{h\sqrt{2\pi}}e^{-\frac{(x-u_j)^2}{2h^2}} 中, h h 为扩散系数,可根据样本中的最大值 b b 和最小值 a a 及样本点个数 n n 来确定。

s = max 1 j m { f ( u j ) } s=\max_{1\leq j \leq m} \left\{ f(u_j)\right\}


μ x ( u j ) = f ( u j ) s \mu_x(u_j)=\frac{f(u_j)}{s}

就将单值样本点 x x 变成 μ x ( u j ) \mu_x(u_j) 为隶属函数的模糊子集 χ \chi
在进行风险评估时,为了使每一个集值样本点的地位均相同,需对 s = max 1 j m { f ( u j ) } s=\max_{1\leq j \leq m} \left\{ f(u_j)\right\} 作适当的调整,所得的模糊子集也不再是 μ x ( u j ) = f ( u j ) s \mu_x(u_j)=\frac{f(u_j)}{s} 中的最大隶属度为 1 1 的正规化模糊子集。
设对第 i i 个样本点 x i x_i 按照 f ( u j ) = 1 h 2 π e ( x u j ) 2 2 h 2 f(u_j)=\frac{1}{h\sqrt{2\pi}}e^{-\frac{(x-u_j)^2}{2h^2}} 进行扩散,得
f i ( u j ) = 1 h 2 π e ( x u j ) 2 2 h 2 f_i(u_j)=\frac{1}{h\sqrt{2\pi}}e^{-\frac{(x-u_j)^2}{2h^2}}


C i = j = 1 m f i ( u j ) C_i=\sum_{j=1}^m f_i(u_j)

相应的模糊子集的隶属函数是
μ x ( u j ) = f i ( u j ) C i \mu_x(u_j)=\frac{f_i(u_j)}{C_i}

μ x ( u j ) \mu_x(u_j) 为样本点 x i x_i 的归一化信息分布。

q ( u j ) = i = 1 n μ x i ( u j ) q(u_j)=\sum_{i=1}^n \mu_{x_i}(u_j)

再令
Q = j = 1 m q ( u j ) Q=\sum_{j=1}^m q(u_j)

Q Q 事实上就是各 u j u_j 点上样本点数的总和,从理论上讲,必有 Q = n Q=n (计算中可能存在一些误差)。
p ( u j ) = q ( u j ) Q p(u_j)=\frac{q(u_j)}{Q}

即样本点落在 u j u_j 处的频率值,可以作为概率的估计值。超越 u j u_j 的概率值为
P ( u j ) = k = j m p ( u k ) P(u_j)=\sum_{k=j}^m p(u_k)

P ( u j ) P(u_j) 即为超越概率估计值。

例:
X X = = { \left \{\right. 2.5875 , -2.5875, 2.5621 , -2.5621, 1.1896 , -1.1896, 1.1882 , -1.1882, 1.2074 , -1.2074, 1.7865 , -1.7865, 1.0498 , -1.0498, 2.0894 , -2.0894, 1.6859 , -1.6859, 1.3128 , -1.3128, 1.1729 , -1.1729, 1.9419 , -1.9419, 1.6125 , -1.6125, 1.9118 , -1.9118, 2.5795 , -2.5795, 1.2603 -1.2603 } \left.\right \}
试以 U = { u 1 , u 2 , , u 7 } U = \left\{ u_1, u_2, …, u_7 \right\} = = { 3 , 2.5 , 2 , , 0 } \left\{ -3, -2.5, -2, …, 0 \right\} 为论域;
h = 2.6851 1.0498 + 2.5875 16 1 = 0.2753 h = 2.6851 * \frac{-1.0498 + 2.5875}{16 - 1} = 0.2753 为扩散系统,使用正态扩散方法进行估计
matlab代码如下:

x = [-2.5875, -2.5621, -1.1896, -1.1882, -1.2074, -1.7865, -1.0498, -2.0894, -1.6859, -1.3128, -1.1729, -1.9419, -1.6125, -1.9118, -2.5795, -1.2603];
u = [-3, -2.5, -2, -1.5, -1, -0.5, 0];

xlength = length(x);
ulength = length(u);
maxX = max(x);
minX = min(x);

if xlength == 5
    h = 0.8146 * (maxX - minX);
elseif xlength == 6
    h = 0.5690 * (maxX - minX);
elseif xlength == 7
    h = 0.4560 * (maxX - minX);
elseif xlength == 8
    h = 0.3860 * (maxX - minX);
elseif xlength == 9
    h = 0.3362 * (maxX - minX);
elseif xlength == 10
    h = 0.2986 * (maxX - minX);
elseif xlength > 10
    h = 2.6851 * (maxX - minX) / (xlength - 1);
else
    h = 0;
end

f = zeros(xlength, ulength);
C = zeros(xlength, 1);
q = zeros(ulength, 1);
for i = 1 : xlength
    for j = 1 : ulength
        f(i, j) = 1.0 / (h * sqrt(2 * pi)) * exp(-(x(i) - u(j)) ^ 2 / (2 * h ^ 2));
        C(i) = C(i) + f(i, j);
    end
end

for i = 1 : xlength
    for j = 1 : ulength
        f(i, j) = f(i, j) / C(i);
        q(j) = q(j) + f(i, j);
    end
end
Q = sum(q);
p = q ./ Q;
P = zeros(ulength, 1);
for i = 1 : ulength
    for j = i : ulength
        P(i) = P(i) + p(j);
    end
end

输出结果为:

u -3 -2.5 -2 -1.5 -1 -0.5 0
p 0.0419 0.1583 0.2251 0.3114 0.2674 0.0157 4.9511e-05
P 1 0.9581 0.7999 0.5748 0.2634 0.0157 4.9511e-05
发布了35 篇原创文章 · 获赞 37 · 访问量 4281

猜你喜欢

转载自blog.csdn.net/L_J_Kin/article/details/102812473