云模型的介绍及python简单实现

云模型的介绍及python简单实现

参考

百度百科

云模型云滴生成 - python_成田日上的博客-CSDN博客_python云模型

https://blog.csdn.net/u010480899/article/details/52232010

基本概念

云模型是由中国工程院院士李德毅在1995年提出的概念,是处理定性概念与定量描述的不确定转换模型。已经成功应用到自然语言处理处理,数据挖掘,决策分析,智能控制,图像处理等领域。

看一下百度的定义:

嗯,乱七八糟,我也看不懂。不过没关系,了解大概的概念就好。整个模型叫云,每个小的数据,也就是每个发生在系统中的事件,叫做云滴。

看他的数字特征。

期望Ex:云滴在论域空间分布的期望,就是你理解的期望熵En:代表云滴分布的不确定性和模糊性,就是你高中物理化学学的那个熵超熵He:熵的熵。超熵越大,说明模型的不确定性越大,云的厚度越大。

简单来看就是一个类似正态分布的东西。

模型的使用

模型使用就是实现云发生器。有正反两种。

正向云发生器

从定性概念到其定量表示的映射。根据云的数字特征产生云滴,每个云滴都是该概念的一次具体实现。

步骤:

(1)产生一个期望值为Ex,方差为En的正态随机数xi;

(2)产生一个期望值为En,方差为He的正态随机数Ex`;

(3)计算yi

(4)令

(xi, yi)为一个云滴,它是该云表示的语言值在数量上的一次具体实现,其中x为定性概念在论域中这一次对应的数值, yi 为属于这个语言值的

程度的量度;

(5)重复步骤(1)到步骤(4),直到产生满足要求数目的云滴数。

参考代码:

def plot_cloud_model(Ex, En, He, n, title='', grid=False, show=True):

Y = np.zeros((1, n))

X = np.random.normal(loc=En, scale=He, size=n)

Y = Y[0]

plt.rcParams['font.sans-serif'] = ['SimHei']

# 用来正常显示中文标签

plt.rcParams['axes.unicode_minus'] = False

# 用来正常显示负号

fig = plt.figure(0)

ax = fig.add_subplot(111)

for i in range(n):

Enn = X[i]

X[i] = np.random.normal(loc=Ex, scale=np.abs(Enn), size=1)

Y[i] = np.exp(-(X[i]-Ex)*(X[i]-Ex)/(2*Enn*Enn))

ax.scatter(X[i], Y[i], s=10, alpha=0.5, c='r', marker='o')

if title == '':

title = '期望:%.2f,熵:%.2f,超熵:%.2f,云滴数:%d' % (Ex, En, He, n)

ax.set_title(title)

ax.set_xlabel('指标值')

ax.set_ylabel('确定度')

ax.grid(True)

if show:

plt.show()

else:

return X

逆向云发生器

是定量值到定性概念的转换模型,他可以将一定数量的精确数据转换为以数字特征(Ex, En, He)表示的定性概念。

算法实现:

输入:N个云滴的定量值xi

输出:3个参数

步骤:

计算均值EX,均方差S熵En计算计算超熵He

参考代码

def Cloud_compute(xl):

'''计算云滴的数字特征'''

xl = np.array(xl)

# S2 = np.var(xl) #用的方差

S2 = np.std(xl) #用的标准差

Ex = np.mean(xl)

En = np.sqrt(np.pi/2) * np.mean( np.abs(xl-Ex) )

He = np.sqrt( np.abs(S2*S2 - En*En) )

return (Ex, En, He)

下面是用先用正向生成器生成500个云滴画图,然后在对这500个云滴逆向生成云模型,前后作对比,发现差距不大。

完整源码在这里最下面。

相关任务

365bet体育投注地 办一场丧事大概要花多少钱?丧事服务费用详解
365bet网址开户 三星手机 I829 (白)

三星手机 I829 (白)

📅 06-28 👁️ 1326
365bet体育平台 现状诛仙各职业比评换号及回坑可参考