一、DS证据理论的Python实现
1. 功能描述
输入:
类别数量 (M) 及其名称。 证据源数量 (N)。 每个证据源的BPA,用户需输入每个子集及其对应的质量值。 处理:
使用Dempster组合规则融合所有证据源的BPA。 处理冲突(即子集交集为空的情况),并进行归一化。 输出:
最终融合后的BPA,显示每个子集的质量值。
2. 代码说明
函数
get_user_input
:
获取用户输入的类别数量 (M) 及其名称。 获取证据源数量 (N)。 对于每个证据源,用户需输入其非零子集数量,并依次输入每个子集及其对应的质量值。 检查每个证据源的质量总和是否为1,若不为1,则提示错误并终止程序。
函数 combine_bpa
:
接受两个BPA字典 bpa1
和bpa2
。计算所有子集的交集,并根据Dempster组合规则累加质量。 对组合后的BPA进行归一化,返回新的BPA字典。
函数 print_bpa
:
打印当前BPA的分配情况。
3. 使用示例
假设我们有一个三分类问题,类别为 (A)、(B)、(C),有三个证据源,具体BPA如下:
证据源1:
(A): 0.6 (B): 0.3 (\Theta) (全体): 0.1 证据源2:
(B): 0.5 (C): 0.4 (\Theta): 0.1 证据源3:
(A): 0.2 (C): 0.5 (\Theta): 0.3
运行步骤
3.1. 输入类别数量和名称:
请输入类别数量 M: 3
请输入 3 个类别的名称(用逗号分隔,例如 A,B,C):
A,B,C
3.2. 输入证据源数量:
请输入证据源数量 N: 3
3.3. 输入每个证据源的BPA:
证据源1:
请输入第 1 个证据源的BPA:
请输入该证据源的非零子集数量: 3
请输入第 1 个子集(例如 A 或 Theta 表示全体): A
请输入子集 A 的质量值: 0.6
请输入第 2 个子集(例如 A 或 Theta 表示全体): B
请输入子集 B 的质量值: 0.3
请输入第 3 个子集(例如 A 或 Theta 表示全体): Theta
请输入子集 Theta 的质量值: 0.1证据源2:
请输入第 2 个证据源的BPA:
请输入该证据源的非零子集数量: 3
请输入第 1 个子集(例如 A 或 Theta 表示全体): B
请输入子集 B 的质量值: 0.5
请输入第 2 个子集(例如 A 或 Theta 表示全体): C
请输入子集 C 的质量值: 0.4
请输入第 3 个子集(例如 A 或 Theta 表示全体): Theta
请输入子集 Theta 的质量值: 0.1证据源3:
请输入第 3 个证据源的BPA:
请输入该证据源的非零子集数量: 3
请输入第 1 个子集(例如 A 或 Theta 表示全体): A
请输入子集 A 的质量值: 0.2
请输入第 2 个子集(例如 A 或 Theta 表示全体): C
请输入子集 C 的质量值: 0.5
请输入第 3 个子集(例如 A 或 Theta 表示全体): Theta
请输入子集 Theta 的质量值: 0.3
3.4. 程序输出:
程序将依次显示每次融合后的BPA,最终输出融合后的结果:
=== Dempster-Shafer证据理论融合程序 ===
请输入类别数量 M: 3
请输入 3 个类别的名称(用逗号分隔,例如 A,B,C):
A,B,C
请输入证据源数量 N: 3
请输入第 1 个证据源的BPA:
请输入该证据源的非零子集数量: 3
请输入第 1 个子集(例如 A 或 Theta 表示全体): A
请输入子集 A 的质量值: 0.6
请输入第 2 个子集(例如 A 或 Theta 表示全体): B
请输入子集 B 的质量值: 0.3
请输入第 3 个子集(例如 A 或 Theta 表示全体): Theta
请输入子集 Theta 的质量值: 0.1
初始融合的证据源1的BPA:
子集 A: 0.6000
子集 B: 0.3000
子集 Theta: 0.1000
正在融合证据源 2...
证据源 2 的BPA:
子集 B: 0.5000
子集 C: 0.4000
子集 Theta: 0.1000
融合后的BPA(融合到证据源 2):
子集 B: 0.6765
子集 A: 0.1765
子集 C: 0.1176
子集 Theta: 0.0294
正在融合证据源 3...
证据源 3 的BPA:
子集 A: 0.2000
子集 C: 0.5000
子集 Theta: 0.3000
融合后的BPA(融合到证据源 3):
子集 A: 0.2270
子集 B: 0.4895
子集 C: 0.2620
子集 Theta: 0.0210
=== 最终融合结果 ===
子集 A: 0.2270
子集 B: 0.4895
子集 C: 0.2620
子集 Theta: 0.0210
4. 代码运行说明
4.1. 启动程序:
将上述代码保存为 ds_evidence.py
。在终端或命令行中运行 python ds_evidence.py
。
4.2. 输入数据:
按照提示输入类别数量、类别名称、证据源数量及每个证据源的BPA。
4.3. 查看结果: