D-S证据理论是对贝叶斯推理方法推广,主要是利用概率论中贝叶斯条件概率来进行的,贝叶斯条件概率需要知道先验概率。而D-S证据理论不需要知道先验概率,能够很好地表示“不确定”,被广泛用来处理不确定数据。 (对来自多传感器数据的融合处理)
适用于:信息融合、专家系统、情报分析、法律案件分析、多属性决策分析
1、D-S证据理论知识介绍
(1)四大定义
其中,函数m为识别框架U上的基本概率赋值函数,m(A)叫做A的基本概率赋值,也就是对A的支持度,如果满足,m(A)> 0,则称A为焦元。
(2)Dempster组合规则(以两个证据/传感器为例)
(2)Dempster判决规则
D-S证据理论组合正是由组合规则与判定规则组成的,Dempster组合规则作为其核心内容将多传感器的信息进行融合达到判定规则的标准,最终得到融合结果。
2、Matlab实现:
先编写了两个函数:DSfusion表示根据组合规则写的融合函数;
DSjudg表示根据判定规则编写的决策函数;
最终使用主函数Dempster.m实现多传感器信息融合。
(1)融合函数DSfusion:
function [Result] = DSfusion(P,inputm1,inputm2)
%该函数是D-S的融合函数,即融合两个传感器m1和m2之间的信息(实现经典Dempster-Shafer组合公式)
% INPUT: P : 分类的类别最终的组合
% inputm1: 传感器m1对于分类组合数N的置信度,1-by-(N-1) matrix.[去掉空集]
% inputm2: 传感器m2对于分类组合数N的置信度,1-by-(N-1) matrix.[去掉空集]
%
% OUTPUT: Result: 两个传感器最终的数据融合结果(对于分类组合数N的置信度),
% 1-by-(N-1) matrix.[去掉空集]
L = length(P)-1;
mp = zeros(1,L);
for k = 1:L
F_k = zeros(L,L);
label = num2str(P(k));
for i = 1:L
label_i = num2str(P(i));
for j = 1:L
label_j = num2str(P(j));
itersect_ij = intersect(label_i,label_j);
if strcmp(itersect_ij,label)
F_k(i,j) = 1;
end
end
end
mp(k) = sum(sum(inputm1'*inputm2.*F_k));
end
mp = mp/sum(mp);
Result = mp;
end
(2)决策函数DSjudg
function [A1, A2] = DSjudg(P, Result, ec1, ec2)
%该函数是D-S的判断函数,
% INPUT: P : 分类的类别最终的组合,1-by-(N-1) matrix.[去掉空集]
% Result : 两个传感器最终的数据融合结果(对于分类组合数N的置信度),1-by-(N-1)
% matrix.[去掉空集]
% ec1,ec2: 两个判决门限值
%
% OUTPUT: Type : 根据DS证据推论得到的最终结果
% A1,A2 : 判断阈值
[~, mx] = size(Result);
res = zeros(1, mx);
A1 = max(Result(1,1:3)); %此处需要根据你的分类组合数进行修改,取确定的类别
%比如我这里组合数是A,B,C,AB,ABC,空集,确定的类别是前三 个类别,所以我取3
[c,r] = find(Result == A1);
res = Result;
res(c,r) = 0;
A2 = max(res(1,1:3)); %此处同上
uncertainty = Result(1,mx) + Result(1,mx-1); %此处是不确定的类别数的概率总和,即类别
%组合矩阵中后两个AB和ABC
if (A1-A2 > ec1) && (uncertainty < ec2) && (A1 > uncertainty)
judg_result = [c,r,A1];
Type = P(c,r);
fprintf('D-S数据融合之后的结果是:%d\n',Type);
else
fprintf('无法识别目标\n');
end
end
(3)主函数Dempster.m
clc;
clear;
%% Matlab code for Dempster's combinatonal rule in belief functiontheory.
num_Sensor=3; %传感器数目
num_Object=5; %分类的类别最终的组合数,去掉空集
num_Period=3; %测量周期数
Info=zeros(num_Sensor,num_Object,num_Period); % 一次判决所需要的信息
Info(:,:,1)=[0.30 0.40 0.15 0.00 0.15 ;
0.30 0.50 0.10 0.00 0.10 ;
0.30 0.30 0.20 0.00 0.20 ;];
Info(:,:,2)=[0.40 0.20 0.20 0.00 0.20 ;
0.50 0.20 0.20 0.00 0.10 ;
0.50 0.30 0.10 0.00 0.10 ;];
Info(:,:,3)=[0.50 0.20 0.15 0.00 0.15 ;
0.40 0.30 0.10 0.00 0.20 ;
0.40 0.20 0.10 0.00 0.30 ;];
Info1=zeros(num_Period,num_Object);
P = [1 2 3 12 123 0];
%P1 = ['A','B','C','AB','ABC','空集'];
%各周期内传感器的融合
for i=1:num_Period
Info1(i,:)=Info(1,:,i);
for j=1:num_Sensor-1
Info1(i,:)=DSfusion(P, Info1(i,:),Info(j+1,:,i));
end
end
%周期之间的融合
Final_Result=Info1(1,:);
for i=1:num_Period-1
Final_Result=DSfusion(P, Final_Result,Info1(i+1,:));
end
ec1=0.1; %融合决策判据
ec2=0.1;
DSjudg(P, Final_Result, ec1, ec2);
如果周期数为1,则只用计算三个传感器之间的融合即可,也就是加粗那部分。
算法的运行结果:
D-S数据融合之后的结果是:1
%%即根据DS证据理论,融合三个传感器的信息,最终可以得出结果属于A类别。
最终返回的结果是P矩阵中的类别,1代表的是A类别,2代表的是B类别,3代表的是C类别。
参考资料:
理论部分:理论知识(一)、理论知识(二)
代码部分:代码1、代码2