如何用贝叶斯概率矩阵分解修复缺失数据?(Jupyter notebook - Python)

本文来源于BPMF Imputation - transdim,主要讨论如何利用贝叶斯概率矩阵分解 (Bayesian Probabilistic Matrix Factorization, BPMF) 估计矩阵中的缺失元素,其中,贝叶斯概率矩阵分解是以高斯分布为基本假设,并采用Gibbs采样做参数估计。另外,感兴趣的读者可在transdim - GitHub项目中下载数据集和Jupyter notebook。

准备阶段

在进行贝叶斯概率矩阵分解之前,需要调用一些常用的package,如numpy等。以scipy.stats中的Wishart分布和numpy.random中的多元正态分布为基础,设计贝叶斯概率矩阵分解采样过程中会遇到的Gaussian-Wishart分布。

另外,在矩阵分解过程中,为了加快采样过程的计算效率,需要用到一种特殊的矩阵运算规则 - Khatri-Rao积,即

Khatri-Rao积的函数 (kr_prod) 和实例:

贝叶斯概率矩阵分解原理

矩阵元素被假设服从高斯分布,为了求解矩阵分解的隐性因子矩阵,依据贝叶斯准则,需进一步对模型参数和超参数设置共轭先验。具体如下:

在所设计的贝叶斯网络中,对模型参数和超参数求后验分布交替更新即可完成贝叶斯概率矩阵分解。

编译实现贝叶斯概率矩阵分解的Python代码:

缺失数据修复实验

以广州路网车速数据集为基础,设计面向时空交通数据的缺失值修复实验。

数据集下载链接1:github.com/xinychen/tra
数据集下载链接2:Urban Traffic Speed Dataset of Guangzhou, China

编辑于 2019-06-29

文章被以下专栏收录