1
人工智能导论课程作业报告
1. 任务描述
考虑一个 100*100 的二维矩阵,其中,矩阵中有部分内容缺失。假设二维矩阵中每个数值
在[0-10]闭区间,二维矩阵构成一个贝叶斯网络,并且具有马尔科夫特性。请根据矩阵中的已
知数据,学习贝叶斯网络参数,并采用合理的贝叶斯推理方法,设计一定的超参数,将矩阵中
部分内容估计出来。
任务说明:
mat_groudtruth.txt 是真值矩阵,mat_missing.txt 是缺失数据矩阵,缺失元素用-1 表示。
Main.cpp 文件是实现 BNs 训练和推理的主文件。读取矩阵元素的程序已经写完。
二维矩阵大小为 100*100,假设二维矩阵中每个数值在[0-10]闭区间,二维矩阵构成一个
贝叶斯网络,并且具有马尔科夫特性。请根据缺失数据矩阵 Mat_missing 中的已知数据,学习
贝叶斯网络参数,并采用合理的贝叶斯推理方法,设计一定的超参数,将矩阵中缺失内容估计
出来。
程序完成后,请完成不同参数条件下的估计值与真值矩阵 Mat_gd 进行准确率测试。
2. 设计思路与可行性分析
定义一个数据点的邻居数据为它上下左右相邻的 4 个数据(对于边缘或角位数据来说则是
3 个或 2 个)。对于一个缺失的数据,我们认为它的数值与它的邻居数据有关。因此,给定邻
居数据,可以计算待估计数据在值域内不同数值出现的概率,使用贝叶斯推理可以得到待估计
数据的预测值。
这种方法需要确保每个数据的邻居数据都是完整的,也就是缺失数据点是孤立点,彼此互
不相连。当缺失数据的邻居数据也缺失时,缺失的邻居点越多,预测的结果越差;当邻居点全
部缺失时,只能依据先验估计进行预测,可想而知效果将大幅下降。因此,需要检查是否存在
很多连续的缺失点。通过两次扫描来实现:
1)横向扫描:检查每一行的元素中,前后两个元素相加是否为-2,如果是,则存在横向的
连续缺失点,记录坐标;
2)纵向扫描:检查每一列的元素中,上下两个元素相加是否为-2,如 果是,则存在纵向的
连续缺失点,记录坐标。
经检查发现,只存在一处横向的连续缺失点,坐标为(19,5)和(19,6),其余缺失点都互不相
连。因此,可以使用邻居数据作为推理依据。后续进行贝叶斯推理时,需要剔除缺失的邻居点
数据。
3. 贝叶斯推理过程
如图为 Y 点和它的邻居点,我们利用 X1~X4 来推测 Y 的取值。