cp分解实现_如何用贝叶斯高斯张量分解修复缺失数据?(Jupyter notebook - Python)

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

准备阶段

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

9b55ef7401bd067e45864262af530c8b.png

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

910724190a373705a9a18d216722e9be.png

621ea4c30ff6a50983db8979121ef581.png

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

9fbd0e355c66978d78944bdc378d6a16.png

定义CP分解的组合结构 (cp_combination):

06eb4e82f17ce19559c38ec5b24d9a4b.png

c524dc908e198f9f8f678785481018f3.png

6afc2536fde9b0d8e500fd2092c7fb9e.png

定义张量展开(将张量展开成矩阵, ten2mat):

2572b0de61e365205c2f02881e8637e8.png

ad0ee687898d6fc6747bdaf5a04d735f.png

贝叶斯高斯张量分解原理

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

b59ccd815438a22613adef7c898756b8.png

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

595fcbf409239d82d9aa1d6d23a89ec9.png

9edb53be0d1228b8e7bb3d679f80fe18.png

9a0b1f7873677c49247cddfb1a0a87fa.png

e9abcc54702a270c981bb6df9bcd09b5.png

编译实现贝叶斯高斯张量分解的Python代码:

f07d9599ffdd2e819cedaf82900d2900.png

c2683483b91bf0b404ffc49d672209e6.png

bdfbf3a7fb8ec5181e1856f5db1ec543.png

e2438d5fb02f19ec00e16bd71cc0dcbd.png

bd01f982bd7c4ccf15fe2c4a9d444997.png

3ee50e17f4829cff9e1545c2f805f09d.png

缺失数据修复实验

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

数据集下载链接1:https://github.com/xinychen/transdim/tree/master/Guangzhou-data-set
数据集下载链接2:Urban Traffic Speed Dataset of Guangzhou, China

c96ac3d63d8a5bd705eed925b64f9bf9.png

06ac4e7360e1f5d4ceda6d89b1d3c18c.png

4cf06ee7e6a028f1740469f62eca340a.png

e0a85c48a84f0436c983ea45f04a572d.png

主要参考

BGCP Matlab代码:https://github.com/lijunsun/bgcp_imputation


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部