论文阅读——《A new combination method based on Pearson coefficient and information entropy for multi-sens》

本文主要是介绍论文阅读——《A new combination method based on Pearson coefficient and information entropy for multi-sens》,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录


前言

  • 本文主要针对论文中提出的一个基于Dempster-Shafer证据理论(DS证据理论)对多个证据融合的新方法,给出了相应的计算代码,以便大家对该算法有一个更直观的认知和看法。因此,这里对DS理论的一些基本概念不做过多的介绍,在阅读本文之前,如果对DS理论不太熟悉,大家可以先去下面这几篇内容做一个详细的了解,再来阅读本文会更好。😀
  • 一文读懂DS证据理论用法(详细公式步骤版)
  • Dempster–Shafer theory(D-S证据理论)初探
  • 浙大教授课件 第五章D-S证据理论

论文名称:A new combination method based on Pearson coefficient and information entropy for multi-sens(一种基于Pearson系数和信息熵的多传感器数据融合的新组合方法)

👀论文信息:由北京交通大学张阳等人2023年6月发表在《Information and Software Technology》期刊上

🎆论文链接:https://www.sciencedirect.com/science/article/abs/pii/S0950584923001027

📌论文主要贡献:

  • 面对一些非常矛盾的证据时,DS理论可能会表现出一些不足。该文介绍了一种基于Pearson相关系数和信息熵的冲突证据增强融合技术,通过事先处理证据体来解决矛盾信息。最终通过例子说明提出的技术可以处理高度冲突的证据,从而产生更精确的融合结果,有助于做出合理的决策。

一、DS证据理论合成规则计算

  • 网上可以找到很多计算的例子,但是绝大多数只涉及到两个证据的融合,几乎没有涉及到更多的证据。尽管计算时也只需要两两计算即可,但是这里给出计算多个证据融合的具体过程以及相应的Python实现代码,方便自己有一个更清晰的理解。
  • 以论文中所给的例子为例:
    假设在不同地点部署了五种不同类型的探测器,以监督一个共同目标,则有三种可能的监视目标,它们构成识别框架Ω = {A, B, C}。传感器的指示由五个证据m1, m2, m3, m4, m5表示,具体如下:
    在这里插入图片描述
  • 融合结果计算过程:
    首先还得了解一下DS理论的合成规则:
    在这里插入图片描述

阅读以上的几篇内容可以发现,计算时习惯把证据作为行,事件作为列。因此,为方便计算,这里也写成同样的形式,其实就是将上面矩阵做一个转置:
在这里插入图片描述暂且把上面这些数据组成的矩阵称之为证据-事件矩阵
根据上面的融合规则,首先计算 m 1 m_{1} m1 m 2 m_{2} m2的融合结果:
F i r s t : c o m p u t e K ; K 表示的是事件交集不为空的两个 m a s s 函数的乘积的和 First:compute \quad K;K表示的是事件交集不为空的两个mass函数的乘积的和 FirstcomputeKK表示的是事件交集不为空的两个mass函数的乘积的和
K = m 1 ( A ) ∗ m 2 ( A ) + m 1 ( B ) ∗ m 2 ( B ) + m 1 ( C ) ∗ m 2 ( C ) + m 1 ( A , C ) ∗ m 2 ( A , C ) + m 1 ( A ) ∗ m 2 ( A , C ) + m 1 ( C ) ∗ m 2 ( A , C ) + m 2 ( A ) ∗ m 1 ( A , C ) + m 2 ( C ) ∗ m 1 ( A , C ) = 0.41 ∗ 0 + 0.29 ∗ 0.9 + 0.3 ∗ 0.1 + 0 ∗ 0 + 0.41 ∗ 0 + 0.3 ∗ 0 + 0 ∗ 0 + 0.1 ∗ 0 \begin{align*} K=m_{1}(A)*m_{2}(A)+m_{1}(B)*m_{2}(B)+m_{1}(C)*m_{2}(C)+m_{1}(A,C)*m_{2}(A,C)\\+m_{1}(A)*m_{2}(A,C)+m_{1}(C)*m_{2}(A,C)\\+m_{2}(A)*m_{1}(A,C)+m_{2}(C)*m_{1}(A,C)\\=0.41*0+0.29*0.9+0.3*0.1+0*0+0.41*0+0.3*0+0*0+0.1*0 \end{align*} K=m1(A)m2(A)+m1(B)m2(B)+m1(C)m2(C)+m1(A,C)m2(A,C)+m1(A)m2(A,C)+m1(C)m2(A,C)+m2(A)m1(A,C)+m2(C)m1(A,C)=0.410+0.290.9+0.30.1+00+0.410+0.30+00+0.10
S e c o n d : c o m p u t e m a s s 函数 Second:compute\quad mass函数 Secondcomputemass函数
m 12 ( A ) = 1 K ∗ [ m 1 ( A ) ∗ m 2 ( A ) + m 1 ( A ) ∗ m 2 ( A , C ) + m 2 ( A ) ∗ m 1 ( A , C ) ] = 1 K ∗ [ 0.41 ∗ 0 + 0.41 ∗ 0 + 0 ∗ 0 ] \begin{align*} m_{12}(A) = \frac{1}{K}*[m_{1}(A)*m_{2}(A)+m_{1}(A)*m_{2}(A,C)+m_{2}(A)*m_{1}(A,C)]\\=\frac{1}{K}*[0.41*0+0.41*0+0*0]\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad\quad \end{align*} m12(A)=K1[m1(A)m2(A)+m1(A)m2(A,C)+m2(A)m1(A,C)]=K1[0.410+0.410+00]
m 12 ( B ) 、 m 12 ( C ) 、 m 12 ( A , C ) 计算同理,然后两两计算,得到最终的融合结果。 m_{12}(B)、 m_{12}(C)、 m_{12}(A,C)计算同理,然后两两计算,得到最终的融合结果。 m12(B)m12(C)m12(A,C)计算同理,然后两两计算,得到最终的融合结果。

  • 下面直接看代码实现过程:
import numpy as np
np.set_printoptions(precision=8)
def DS_cal(mat:np.ndarray): # 输入mat是  证据-事件矩阵# 计算两两证据融合的结果,直到全部融合# 思路:计算m1和m2的融合结果m12,把m12的值赋值给m2,然后计算m2和m3,得到的值赋给m3,...,依次直至计算到最后一列i = 0while i<mat.shape[1]-1:K = np.round(sum(mat[:,i]*mat[:,i+1]) + (mat[:,i][0]+mat[:,i][2]) * mat[:,i+1][3] + (mat[:,i+1][0]+mat[:,i+1][2]) * mat[:,i][3],8)mat[:,i+1][0] = mat[:,i][0] * mat[:,i+1][0] + mat[:,i][0] * mat[:,i+1][3] + mat[:,i][3] * mat[:,i+1][0]mat[:,i+1][1] = mat[:,i][1] * mat[:,i+1][1]mat[:,i+1][2] = mat[:,i][2] * mat[:,i+1][2] + mat[:,i][2] * mat[:,i+1][3] + mat[:,i][3] * mat[:,i+1][2]mat[:,i+1][3] = mat[:,i][3] * mat[:,i+1][3]mat[:,i+1] = mat[:,i+1] / K# print(mat[:,i+1])i+=1return mat[:,-1]mat = np.array([[0.41,0.29,0.3,0], [0,0.9,0.1,0], [0.58,0.07,0,0.35],[0.55,0.1,0,0.35],[0.6,0.1,0,0.3]],dtype=np.float64)
mat = mat.T
print(np.round(DS_cal(mat),4))>>>[0.     0.1422 0.8578 0.    ]

对比论文中结果,计算无误。在这里插入图片描述

二、论文提出的方法的计算过程

  • 该方法的计算流程:
    在这里插入图片描述
  • 具体计算过程:

1、构造相关矩阵,并对其进行修正。

  • 计算两两证据之间的相关系数 r i j r_{ij} rij,得到构成证据体的相关性矩阵 S S S
    在这里插入图片描述
    在这里插入图片描述
  • 修正的相关系数 r ~ i j \tilde{r}_{ij} r~ij 和修正的相关矩阵 S ~ \tilde{S} S~ 为:
    在这里插入图片描述
    在这里插入图片描述
  • 代码:
import numpy as np  
mat = np.array([[0.41,0.29,0.3,0], [0,0.9,0.1,0], [0.58,0.07,0,0.35],[0.55,0.1,0,0.35],[0.6,0.1,0,0.3]])
S = np.zeros((mat.shape[0],mat.shape[0]))
D = np.zeros((mat.shape[0],mat.shape[0]))
def r_(x):return  1/ (1+np.exp(-5*x))     
for i in range(S.shape[0]):for j in range(S.shape[1]):value = round(r_(np.corrcoef(mat[i],mat[j])[0][1]) ,4) # 填充的值S[i, j] = valueS[j, i] = value
print(S)
  • 结果:
    在这里插入图片描述

2、计算两个BBA之间的证据距离,并构造evidence distance matrix D(证据距离矩阵)。

  • 两个证据之间的 J o u s s e l m e Jousselme Jousselme 距离为:
    在这里插入图片描述
    注意:上面式子中的D不同于要构造的证据距离矩阵D
    这里的D中的元素计算公式为:
    在这里插入图片描述
    其中, ∣ . ∣ \begin{vmatrix}.\end{vmatrix} . 表示集合中元素的个数。
    因此,这里的 D D D为:
    在这里插入图片描述
    计算如下:在这里插入图片描述
  • 代码如下:
def d_(a,b,Distance):return np.sqrt(0.5 * (a-b) @ Distance @ (a-b).T)for i in range(D.shape[0]):for j in range(D.shape[1]):value = round(d_(mat[i],mat[j],Distance=np.array([[1,0,0,0.5],[0,1,0,0],[0,0,1,0.5],[0.5,0,0.5,1]])),4) # 填充的值# print(value)D[i, j] = valueD[j, i] = value
  • 结果
    在这里插入图片描述

3、计算证据 m i m_{i} mi和其他证据之间的距离

  • 计算公式为:
    在这里插入图片描述
  • 代码:
# 考虑到D的主对角元素全部为0,因此直接按列元素求和即可
distance_m = np.sum(D,axis=1)
print(distance_m)>>>array([1.5449, 2.9284, 1.2311, 1.1761, 1.1945])

论文中给出的结果中 d 5 d_{5} d5的数值为1.1944,应该是写错了。如果个人理解有误。欢迎指正。🍳
在这里插入图片描述

4、计算证据 m i m_{i} mi 的可信度水平 C r d Crd Crd,并作归一化 C r d ~ \widetilde{Crd} Crd

  • 计算公式:
    在这里插入图片描述
    **加粗样式**
  • 代码:
## 计算crd
Crd = list(range(S.shape[0]))
Crd_ = []
bbb = 0
for i in range(S.shape[0]):bbb += np.sqrt(np.sum(np.power(S[i] , 2)) - S[i][i]**2) 
for i in range(S.shape[0]):aaa = np.sqrt(np.sum(np.power(S[i] , 2)) - S[i][i]**2)Crd[i] = aaa / bbb / distance_m[i]
for i in range(len(Crd)):Crd_.append(round(Crd[i] / sum(Crd),4))
print(Crd_)
  • 结果:
    在这里插入图片描述

5、计算证据 m i m_{i} mi 的信息熵 Q Q Q

  • 计算公式:

在这里插入图片描述
∣ A ∣ = 1 |A|=1 A=1时,可写成:
在这里插入图片描述

  • 代码:
## 计算Q
Q = []
count_elements = [1,1,1,2]   #包含在子集A中的元素的个数 
for i in range(S.shape[0]):qqq = 0index = 0for j in mat[i]:if j == 0:logj = 0else:logj = np.log2(j * np.exp((count_elements[index] - 1)/ 3) / (2**count_elements[index] - 1))qqq += j * logjindex+=1Q.append(round(-qqq, 4))
print(Q)
  • 结果:
    -

6、计算证据 m i m_{i} mi 的信息量 I V IV IV,并做归一化 I V ~ \widetilde{IV} IV

  • 计算公式:
    在这里插入图片描述
    在这里插入图片描述
  • 代码:
IV_ = []
IV = np.exp(Q)
for i in IV:IV_.append(round(i/sum(IV),4))
print(IV_)
  • 结果:
    在这里插入图片描述

7、计算证据 m i m_{i} mi 的权重因子 W W W,并做归一化 W ~ \widetilde{W} W

  • 计算公式:
    在这里插入图片描述
    在这里插入图片描述
  • 代码:
## 计算W_
W = []
W_ = []
for i in range(len(Crd_)):W.append(float(Crd_[i] * float(IV_[i])))
for i in W:W_.append(round(i/sum(W),4))
print(W_)
  • 结果:
    在这里插入图片描述

8、得到 weighted average evidence (加权平均证据)

  • 计算公式:
    在这里插入图片描述
  • 代码:
## 计算WAE(m)
M = []
for i in range(mat.shape[1]):M.append(round((sum((mat[:,i]) * np.array(W_))),4))
print(M)
  • 结果:
    在这里插入图片描述
  • 注意:这里论文中给出的值应该是有误的,如果按照论文中给出加权平均证据的值计算,是得不到最终的结果的。大家也可以尝试一下,如果有误,请指正。

9、替换成新的加权平均证据,按照前文的DS融合规则进行融合。

  • 代码:
mat = np.array([[0.5401, 0.1356, 0.0499, 0.2744], [0.5401, 0.1356, 0.0499, 0.2744], [0.5401, 0.1356, 0.0499, 0.2744],[0.5401, 0.1356, 0.0499, 0.2744],[0.5401, 0.1356, 0.0499, 0.2744]],dtype=np.float64)
mat = mat.T
print(np.round(DS_cal(mat),4))
  • 结果:在这里插入图片描述
    与论文中给出的结果一致
    在这里插入图片描述

完整代码:写成函数的形式

import numpy as npdef r_(x):return  1/ (1+np.exp(-5*x)) def d_(a,b,Distance):return np.sqrt(0.5 * (a-b) @ Distance @ (a-b).T)def Weight_average_evidence(mat,Distance):S = np.zeros((mat.shape[0],mat.shape[0]))D = np.zeros((mat.shape[0],mat.shape[0]))for i in range(S.shape[0]):for j in range(S.shape[1]):value = round(r_(np.corrcoef(mat[i],mat[j])[0][1]) ,4) # 填充的值S[i, j] = valueS[j, i] = valuefor i in range(D.shape[0]):for j in range(D.shape[1]):value = round(d_(mat[i],mat[j],Distance=Distance),4) # 填充的值# print(value)D[i, j] = valueD[j, i] = valuedistance_m = np.sum(D,axis=1)## 计算crdCrd = list(range(S.shape[0]))Crd_ = []bbb = 0for i in range(S.shape[0]):bbb += np.sqrt(np.sum(np.power(S[i] , 2)) - S[i][i]**2) for i in range(S.shape[0]):aaa = np.sqrt(np.sum(np.power(S[i] , 2)) - S[i][i]**2)Crd[i] = aaa / bbb / distance_m[i]for i in range(len(Crd)):Crd_.append(round(Crd[i] / sum(Crd),4))## 计算QQ = []count_elements = [1,1,1,2]   #包含在子集A中的元素的个数 for i in range(S.shape[0]):qqq = 0index = 0for j in mat[i]:if j == 0:logj = 0else:logj = np.log2(j * np.exp((count_elements[index] - 1)/ 3) / (2**count_elements[index] - 1))qqq += j * logjindex+=1Q.append(round(-qqq, 4))## 计算IV_IV_ = []IV = np.exp(Q)for i in IV:IV_.append(round(i/sum(IV),4))## 计算W_W = []W_ = []for i in range(len(Crd_)):W.append(float(Crd_[i] * float(IV_[i])))for i in W:W_.append(round(i/sum(W),4))## 计算WAE(m)M = []for i in range(mat.shape[1]):M.append(round((sum((mat[:,i]) * np.array(W_))),4))return M
Weight_average_evidence(mat=np.array([[0.41,0.29,0.3,0], [0,0.9,0.1,0], [0.58,0.07,0,0.35],[0.55,0.1,0,0.35],[0.6,0.1,0,0.3]]),Distance=np.array([[1,0,0,0.5],[0,1,0,0],[0,0,1,0.5],[0.5,0,0.5,1]]))

总结

  • 1.本文给出了一个基于DS理论融合规则计算多个证据融合结果的Python代码。
  • 2.对论文《A new combination method based on Pearson coefficient and information entropy for multi-sens》中计算多传感器数据融合的方法和步骤作了比较详细的介绍。
  • 觉得有帮助的话,给个赞吧🐱‍🏍🐱‍🏍🐱‍🏍

这篇关于论文阅读——《A new combination method based on Pearson coefficient and information entropy for multi-sens》的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/273595

相关文章

JAVA智听未来一站式有声阅读平台听书系统小程序源码

智听未来,一站式有声阅读平台听书系统 🌟&nbsp;开篇:遇见未来,从“智听”开始 在这个快节奏的时代,你是否渴望在忙碌的间隙,找到一片属于自己的宁静角落?是否梦想着能随时随地,沉浸在知识的海洋,或是故事的奇幻世界里?今天,就让我带你一起探索“智听未来”——这一站式有声阅读平台听书系统,它正悄悄改变着我们的阅读方式,让未来触手可及! 📚&nbsp;第一站:海量资源,应有尽有 走进“智听

Retrieval-based-Voice-Conversion-WebUI模型构建指南

一、模型介绍 Retrieval-based-Voice-Conversion-WebUI(简称 RVC)模型是一个基于 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)的简单易用的语音转换框架。 具有以下特点 简单易用:RVC 模型通过简单易用的网页界面,使得用户无需深入了

AI hospital 论文Idea

一、Benchmarking Large Language Models on Communicative Medical Coaching: A Dataset and a Novel System论文地址含代码 大多数现有模型和工具主要迎合以患者为中心的服务。这项工作深入探讨了LLMs在提高医疗专业人员的沟通能力。目标是构建一个模拟实践环境,人类医生(即医学学习者)可以在其中与患者代理进行医学

2014 Multi-University Training Contest 8小记

1002 计算几何 最大的速度才可能拥有无限的面积。 最大的速度的点 求凸包, 凸包上的点( 注意不是端点 ) 才拥有无限的面积 注意 :  凸包上如果有重点则不满足。 另外最大的速度为0也不行的。 int cmp(double x){if(fabs(x) < 1e-8) return 0 ;if(x > 0) return 1 ;return -1 ;}struct poin

2014 Multi-University Training Contest 7小记

1003   数学 , 先暴力再解方程。 在b进制下是个2 , 3 位数的 大概是10000进制以上 。这部分解方程 2-10000 直接暴力 typedef long long LL ;LL n ;int ok(int b){LL m = n ;int c ;while(m){c = m % b ;if(c == 3 || c == 4 || c == 5 ||

2014 Multi-University Training Contest 6小记

1003  贪心 对于111...10....000 这样的序列,  a 为1的个数,b为0的个数,易得当 x= a / (a + b) 时 f最小。 讲串分成若干段  1..10..0   ,  1..10..0 ,  要满足x非递减 。  对于 xi > xi+1  这样的合并 即可。 const int maxn = 100008 ;struct Node{int

论文翻译:arxiv-2024 Benchmark Data Contamination of Large Language Models: A Survey

Benchmark Data Contamination of Large Language Models: A Survey https://arxiv.org/abs/2406.04244 大规模语言模型的基准数据污染:一项综述 文章目录 大规模语言模型的基准数据污染:一项综述摘要1 引言 摘要 大规模语言模型(LLMs),如GPT-4、Claude-3和Gemini的快

论文阅读笔记: Segment Anything

文章目录 Segment Anything摘要引言任务模型数据引擎数据集负责任的人工智能 Segment Anything Model图像编码器提示编码器mask解码器解决歧义损失和训练 Segment Anything 论文地址: https://arxiv.org/abs/2304.02643 代码地址:https://github.com/facebookresear

模版方法模式template method

学习笔记,原文链接 https://refactoringguru.cn/design-patterns/template-method 超类中定义了一个算法的框架, 允许子类在不修改结构的情况下重写算法的特定步骤。 上层接口有默认实现的方法和子类需要自己实现的方法

论文翻译:ICLR-2024 PROVING TEST SET CONTAMINATION IN BLACK BOX LANGUAGE MODELS

PROVING TEST SET CONTAMINATION IN BLACK BOX LANGUAGE MODELS https://openreview.net/forum?id=KS8mIvetg2 验证测试集污染在黑盒语言模型中 文章目录 验证测试集污染在黑盒语言模型中摘要1 引言 摘要 大型语言模型是在大量互联网数据上训练的,这引发了人们的担忧和猜测,即它们可能已