关于本文: tensor-learning是我们近期在GitHub上开展的一个项目,主要提供面向张量分解/张量复原/张量回归的技术说明文档和Python代码,文件形式为Jupyter Notebook,项目地址为:tensor-learning
注:该项目相应的Python代码主要依赖于Numpy,能够最大程度上方便读者阅读和掌握。
1. 如何打开原文?
打开原文的方式有两种:
- 原地址:在GitHub repository中直接打开Jupyter Notebook文件,链接为:
Tensor Factorization with Alternative Least Square (ALS) - xinychen/tensor-learning
- 推荐地址:由于Jupyter Notebook文件在GitHub repository中直接打开后显示效果往往不佳(特别是公式),因此,可以考虑在nbviewer中打开Jupyter Notebook文件,相关链接如下:
Tensor Factorization with Alternative Least Square (ALS) - Jupyter Notebook Viewer
2. 技术说明文档
在众多现实场景中,所获取到的数据在代数结构上往往是张量,而非矩阵,本文首先回顾基本的张量分解形式,然后,详细讨论如何利用交替最小二乘法(Alternating Least Square, ALS,适用于矩阵/张量分解的经典求解算法)对张量分解形式进行求解,并就公开数据集进行缺失数据修复测试。
2.1 张量的Tucker分解
在张量分解中,一类经典的张量分解形式为Tucker分解,其分解的任务是得到一个核心张量和多个因子矩阵。
![93c938b5a60e2aef94ac15ae5985032d.png](https://i-blog.csdnimg.cn/blog_migrate/274237e31ac743880014899e4663f49b.jpeg)
当我们有一个核心张量和多个因子矩阵时,可按照相应的运算规则得到一个张量,Python代码如下:
![ec2b32d8c4ce6755ef851f631c535de2.png](https://i-blog.csdnimg.cn/blog_migrate/f2f2f977e2dca37702ab71bd4190a004.jpeg)
2.2 张量的CP分解
除了Tucker分解,另外一种更为简洁的张量分解形式为CP分解,通过对给定张量进行分解,能够得到几个因子矩阵。
![840dadef27afdb5e055c72bd04940203.png](https://i-blog.csdnimg.cn/blog_migrate/a0b366f0695ccc98b8b9026bc5afa352.jpeg)
2.3 Tucker分解的优化问题
在Tucker分解中,为了得到合理的核心张量和因子矩阵,需将分解问题转化为一个常见的机器学习优化问题。
![ab4c3749ce4e5b6853e33b246aadcbf1.png](https://i-blog.csdnimg.cn/blog_migrate/b1976b3b2653a708ee0095f0bdca5fa5.jpeg)
![b01192a050c8f5109f08d08344e50c2c.png](https://i-blog.csdnimg.cn/blog_migrate/d1dd1b7c71a3635d24c87c962f66ce7d.jpeg)
在这里,为了得到核心张量和因子矩阵,需要将优化问题进行变换,写出关于各个变量的最小二乘估计,在迭代更新过程中,当就某一个变量进行估计时,只要控制其他变量不变即可。
![8f6488879a15f7da50b132cd1ef104c4.png](https://i-blog.csdnimg.cn/blog_migrate/46d3821fa065796494d9c5154fed2dc7.jpeg)
![4d60a7a6820ce900060684c1eb0a1cb2.png](https://i-blog.csdnimg.cn/blog_migrate/5ecbcfe3d0e22f396eb1f1a782189b1d.jpeg)
![91e0c10af2cbc3371a51d6a8ad248520.png](https://i-blog.csdnimg.cn/blog_migrate/a390f33d97f72a78ebbb06199fa3780c.jpeg)
2.4 CP分解的优化问题
CP分解相比Tucker分解不管在推导过程还是代码编写上都更加简洁,当然,计算消耗也更小。为了得到CP分解的因子矩阵,同样需要根据优化问题写出各个变量(因子矩阵)的最小二乘估计,在此基础上,可采用交替最小二乘法进行迭代更新,从而估计出因子矩阵。
![a1b2d6a4039fcaf10f1f376504d1ce45.png](https://i-blog.csdnimg.cn/blog_migrate/3b540f72c25f0cd7f246e30ba15068dc.jpeg)
相应的Python代码为:
![aca8977c7fcad3b2c1385f80d9c24e05.png](https://i-blog.csdnimg.cn/blog_migrate/0d3130909d99a555f32871ee2cdbf91d.jpeg)
2.5 时空交通数据缺失值修复
选用已经组织成三阶张量的广州城市路网车速数据集进行测试(数据集介绍),实验代码如下:
![bd1a47023045e3c1af5fca048627f6a0.png](https://i-blog.csdnimg.cn/blog_migrate/a319821f3b9cfed4ac23d4f6afa1836e.jpeg)
![009c2a8c35d8e6eb291de2d7c0e95c04.png](https://i-blog.csdnimg.cn/blog_migrate/cadc3b3a6d41a403b122aaa664642645.jpeg)
![4111e04fab4c92befa14bfc03b4e6962.png](https://i-blog.csdnimg.cn/blog_migrate/a7dc34827610d82c0e65a253828df197.jpeg)
![3ece30d2b153957ffab1bf3a0418fe57.png](https://i-blog.csdnimg.cn/blog_migrate/2f7258273c17aca330fef666bad965c3.jpeg)
![f162dc42b273987f5a5a9dbbab79beab.png](https://i-blog.csdnimg.cn/blog_migrate/e4a0ba0cfd47f472094505e2c6fd699c.jpeg)
![d9cd63e746a511a49ccdb091c173737d.png](https://i-blog.csdnimg.cn/blog_migrate/fd3e7cd253c3ea46d52c61d42403f8f3.jpeg)
3. tensor-learning项目
Tensor Learning (张量学习): Tutorials and Python codes for tensor factorization/completion/regression techniques with an application of spatiotemporal data analysis. [tensor-learning -- Blogger]