一 实验原理
证据理论是Dempster于1967年首先提出,由他的学生Shafer于1976年进一步发展起来的一种不精确推理理论,也称为Dempster/Shafer 证据理论(D-S证据理论),属于人工智能范畴,最早应用于专家系统中,具有处理不确定信息的能力。作为一种不确定推理方法,证据理论的主要特点是:满足比贝叶斯概率论更弱的条件;具有直接表达“不确定”和“不知道”的能力。 在DS证据理论中,由互不相容的基本命题(假定)组成的完备集合称为识别框架,表示对某一问题的所有可能答案,但其中只有一个答案是正确的。该框架的子集称为命题。分配给各命题的信任程度称为基本概率分配(BPA,也称m函数),m(A)为基本可信数,反映着对A的信度大小。信任函数Bel(A)表示对命题A的信任程度,似然函数Pl(A)表示对命题A非假的信任程度,也即对A似乎可能成立的不确定性度量,实际上,[Bel(A),Pl(A)]表示A的不确定区间,[0,Bel(A)]表示命题A支持证据区间,[0,Pl(A)]表示命题A的拟信区间, [Pl(A),1]表示命题A的拒绝证据区间。设m1和m2是由两个独立的证据源(传感器)导出的基本概率分配函数,则Dempster组合规则可以计算这两个证据共同作用产生的反映融合信息的新的基本概率分配函数。
二· 案例描述
- 案例描述:
某个病人可能患有的病:[cold,flu,meningitis,indigestion],可以根据不同医生给出的证据推理出这个病人大概率患哪几种病。 - 问题描述:
在识别框架[cold,flu,meningitis,indigestion]下,
给定以下三个不同的证据:
[[{‘cold’, ‘flu’},0.6], [{‘meningitis’},0.2], [{‘indigestion’},0.1], [{‘’},0.1]]
[[{‘meningitis’,‘indigestion’},0.7], [{‘’},0.3]]
[[{‘cold’,‘flu’,‘indigestion’},0.99], [{‘’},0.01]]
’ '代表全集。分别计算:
[‘flu’,‘indigestion’,‘cold’],
[‘flu’,‘cold’],
[‘meningitis’,‘indigestion’],
[‘indigestion’],
[‘meningitis’]
的信任区间。 - 具体步骤:
(1) 定义mass融合函数,融合不同证据提供的mass函数得到组合mass函数
(2) 定义信任函数和似然函数。
(3) 整理结果得到最终信任区间
三 实验代码
import pprint
ill_all = {
'cold', 'flu', 'meningitis', 'indigestion'}
ill_gai_1 = {
('cold', 'flu'): 0.6, 'meningitis': 0.2, 'indigestion': 0.1,
('cold', 'flu', 'meningitis', 'indigestion'): 0.1}
ill_gai_2 = {
('meningitis', 'indigestion'): 0.7, ('cold', 'flu', 'meningitis', 'indigestion'): 0.3}
ill_gai_3 = {
('cold', 'flu', 'indigestion'): 0.99, ('cold', 'flu', 'meningitis', 'indigestion'): 0.01}
need_list = [
['flu', 'indigestion', 'cold'],
['flu', 'cold'],
['meningitis', 'indigestion'],
['indigestion'],
['meningitis']
]
def work_k(see: dict, stt: dict) -> int:
k_value = 0
tag = 0
for i, j in see.items():
for a, b in stt.items():
if isinstance(i, tuple) and isinstance(a, tuple):
for te in i:
if te in a:
tag = 1
else:
pass
if tag == 0:
k_value += j * b
if isinstance(i, tuple) and not isinstance(a, tuple):
if a in i:
pass
else:
k_value += j * b
if not isinstance(i, tuple) and isinstance(a, tuple):
if i in a:
pass
else:
k_value += j * b
return 1 - k_value
def work_dict(see: dict, stt: dict) -> dict:
all_dict = dict()
all_set = set()
temp_set = set()
for i, j in see.items():
for a, b in stt.items():
all_set.discard(())
if isinstance(i, tuple) and isinstance(a, tuple):
temp_set.clear()
for te in i:
if te in a:
temp_set.add(te)
else:
pass
# print(len(temp_set))
if len(temp_set) == 1:
temp_set_str = ''.join(temp_set)
tae = 0
for one in all_set:
if isinstance(one, tuple):
pass
else:
if one == temp_set_str:
all_dict[one] += j * b
temp_set.clear

本文围绕DS证据理论展开实验。该理论是一种不精确推理理论,能处理不确定信息。文中以病人患病情况为例,在给定识别框架和不同证据下,通过定义融合函数、信任与似然函数等步骤,计算不同病症组合的信任区间,并给出了实验代码和运行结果。
最低0.47元/天 解锁文章
1250

被折叠的 条评论
为什么被折叠?



