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

该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;
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值