概述
云模型是云的具体实现方法,也是基于云的运算、推理和控制等的基础。它可以表示由定性概念到定量表示的过程(正向云发生器),也可表示由定量表示到定性概念的过程(逆向云发生器)。
该模型是由中国工程院院士李德毅于1995年提出云模型的概念,是处理定性概念与定量描述的不确定转换模型。自提出至今,已成功地应用到自然语言处理、数据挖掘、决策分析、智能控制、图像处理等领域 。
云发生器
正向云发生器(Forward Cloud Generator)是从定性概念到其定量表示的映射,它根据云的数字特征(Ex,En,He)产生云滴,每个云滴都是该概念的一次具体实现。
一维正向正态云发生器的算法实现如下 :
输入:表示定型概念A的三个数字特征值Ex,En,He以及云滴数N;
输出:N个云滴的定量值,以及每个云滴代表概念A的确定度;
步骤:
(1)产生一个期望值为Ex,方差为En的正态随机数 ;
import numpy as np
np.random.seed(0)
x=np.random.normal(Ex,En)
(2)产生一个期望值为En,方差为He的正态随机数En’;
En2=np.random.normal(En,He)
(3)计算:
;
y=math.exp(-pow(x-Ex,2)/(2*pow(En2,2)))
(4)令 为一个云滴,它是该云表示的语言值在数量上的一次具体实现,其中x为定性概念在论域中这一次对应的数值,
为属于这个语言值的程度的量度;
(5)重复步骤(1)到步骤(4),直到产生满足要求数目的云滴数。
云生成器函数:
import math
import numpy as np
import matplotlib.pyplot as plt
#定义正向(forward)云发生器
def forwardCloud(Ex,En,He,N):
cloudpoints=[]
#numpy随机数发生器,指定种子为0
np.random.seed(0)
for i in range(N):
x=np.random.normal(Ex,En)
En2=np.random.normal(En,He)
y=math.exp(-pow(x-Ex,2)/(2*pow(En2,2)))
cloudpoints.append({'x':x,'y':y})
return cloudpoints
绘制成散点图:
使用matplotlib将散点图绘出:
res=forwardCloud(0,10,1,10000)
x=[]
y=[]
for r in res:
x.append(r['x'])
y.append(r['y'])
plt.scatter(x,y)
plt.show()
全部代码:
import math
import numpy as np
import matplotlib.pyplot as plt
#定义正向(forward)云发生器
def forwardCloud(Ex,En,He,N):
cloudpoints=[]
#numpy随机数发生器,指定种子为0
np.random.seed(0)
for i in range(N):
x=np.random.normal(Ex,En)
En2=np.random.normal(En,He)
y=math.exp(-pow(x-Ex,2)/(2*pow(En2,2)))
cloudpoints.append({'x':x,'y':y})
return cloudpoints
res=forwardCloud(0,10,1,10000)
x=[]
y=[]
for r in res:
x.append(r['x'])
y.append(r['y'])
plt.scatter(x,y)
plt.show()