入门文献复现——Analyzing the degree of conflict among belief functions Weiru Liu

it2024-06-26  41

该Paper的作者提出了一种新的度量证据是否冲突的方法,度量标准是

前者就是Dempster规则中的冲突质量(1/(1-k)中的k) 后者是the distance of betting commitment,我自己翻译为"赌博信度距离" 首先,将不同的BBA进行 pignistic transform,得到专属的BetP 然后做差,找到差值最大的代表这两个BBA的赌博信度距离。

下面的代码就是求difBetp的。

#基于pignistic transform证据冲突的度量标准 #作者的度量指标为cf(m(empty),difBetP) ##其中m(empty)就是Dempster规则中1/(1-k)中的k ##difBetP是两个不同的BBA之间的赌博信度的差值 import numpy as np; import pandas as pd; #辩框 # theta=set(["A","B","C","D","E"]); #BBA的格式如下 # bba1={"A":0.2,"B":0.2,"C":0.6} # bba2={"A":0.2,"B":0.2,"C":0.6} #抽取字典中的key值,并装进集合中,并且返回集合 def focal_Element(boe): key_m=[]; m_key=boe.keys(); for item in m_key: key_m.append(item) keym_set=set(key_m); return keym_set; #进行pignistic变换 #BBA——>BetP ##输入参数:辩框,BBA ##返回一个字典类型的BetP def transform(bba): bba_set=focal_Element(bba);#抽取字典中的key值 if "empty" in bba.keys(): m_empty=bba["empty"]; else: m_empty=0 BetP=dict();#字典类型 item_A=set(); item_B=set(); for variable in bba_set: sum=0.00 item_A.update(variable); for B in bba_set: item_B.update(B); A_insert_B=item_A.intersection(item_B);#A与B的交集 size_insert=len(A_insert_B); size_B=len(B);#|B| mass_B = bba[B];#B的质量 sum+=(size_insert/size_B)*(mass_B/(1-m_empty));#求BetP(A) item_B.clear(); # 这样是为了使,集合中只包含一个变量 # 记录一组BBA中的BetP if variable in BetP.keys(): BetP[variable] = sum; else: BetP[variable] = sum; item_A.clear(); return BetP; ##获得最大的difBetP def difBetP(bba1,bba2): #首先我们假设bba1,bba2已经统一化处理了,这是正确的 #这里我发现了自己之前的错误,虽然BBA中有些元素质量为0 #但是其BetP并不为0。 for item in bba1: if item not in bba2.keys(): bba2[item] = 0; for item in bba2: if item not in bba1.keys(): bba1[item]=0; setbba1=focal_Element(bba1); setbba2=focal_Element(bba2); #进行bba的pignistic 转换 betP1=transform(bba1);#betP betP2=transform(bba2);#betP #定义一个存放差值的工具 difbetp=dict(); for item_1 in setbba1: for item_2 in setbba2: if item_1==item_2: value=abs(betP1[item_1]-betP2[item_2]); if item_1 in difbetp.keys(): difbetp[item_1]=value; else: difbetp[item_1] = value; maxdifBetP=max(difbetp.values());#只要找到其中的最大值即可 maxdifBetP=round(maxdifBetP,4);#保留4位数 return maxdifBetP;
最新回复(0)