一、CP分解(CANDECAMP/PARAFAC)
这是较为古老的一种张量分解方法。最早的研究历史可以追溯到1927年。

在上一节,学习向量乘积的时候,我们看到两个向量外积产生一个矩阵。我们可以推断出,三个向量做外积得出一个三维张量(其实是一种extension)。
数学上,我们可以用以下公式表示:

我们可以将三个向量的外积结果以张量的三种矩阵化形式写出:

matlab实例程序如下

我们都知道,矩阵的秩是矩阵中的最大的不相关的向量的个数。那么张量的秩是什么概念呢?
文中提出,把能够以用三个向量外积直接表示的张量称作秩一张量。
如果一个张量能够以两个秩一张量的和表示,那么其秩则为2。
如果一个张量能够以三个秩一张量的和表示,那么其秩为3。
以此类推…

我们可以以公式写出秩R的张量T:

其中 A = (a1,a2……aR) , B = (b1,b2……bR) , C = (c1,c2……cR)。A,B,C称为因子矩阵。
这个公式即是张量的CP分解。

这里有一个性质:Rank(A)+Rank(B)+Rank(C) >=2R+2
即各因子矩阵的秩之和大于等于2R+2

求解CP分解一般用的算法是交替最小二乘法(ALS)算法(Alternating Least Squares algorithm)。
这个在后面会详细再写。

二、HOSVD分解
HOSVD分解又称作Tucker分解。由Tucker在1936年提出。
HOSVD全名为high order SVD,即高阶的SVD。所以我们要先了解一下SVD原理,才能更好地了解HOSVD。

1.SVD矩阵分解

该段内容参考自文章:https://blog.csdn.net/shenziheng1/article/details/52916278

  矩阵分解就是将一个较为复杂的矩阵分解成一些小矩阵,而这些小矩阵往往带有原来矩阵的一些特征。矩阵分解有很多种方式,特征值分解,LU分解(三角分解),奇异值分解等等。

特征值分解和奇异值分解两者有着很紧密的关系,特征值分解和奇异值分解的目的都是一样,就是提取出一个矩阵最重要的特征。先谈谈特征值分解吧:
1 特征值
如果说一个向量v是方阵A的特征向量,将一定可以表示成下面的形式:
这时候λ就被称为特征向量v对应的特征值,一个矩阵的一组特征向量是一组正交向量。特征值分解是将一个矩阵分解成下面的形式:
其中Q是这个矩阵A的特征向量组成的矩阵,Σ是一个对角阵,每一个对角线上的元素就是一个特征值。首先,要明确的是,一个矩阵其实就是一个线性变换,因为一个矩阵乘以一个向量后得到的向量,其实就相当于将这个向量进行了线性变换。比如说下面的一个矩阵:
它其实对应的线性变换是下面的形式:
因为这个矩阵M乘以一个向量(x,y)的结果是:
上面的矩阵是对称的,所以这个变换是一个对x,y轴的方向一个拉伸变换(每一个对角线上的元素将会对一个维度进行拉伸变换,当值>1时拉长,当值<1时缩短),当矩阵不是对称的时候,假如说矩阵是下面的样子:
它所描述的变换是下面的样子:
这其实是在平面上对一个轴进行的拉伸变换(如蓝色的箭头所示),在图中,蓝色的箭头是一个最主要的变化方向(变化方向可能有不止一个),如果我们想要描述好一个变换,那我们就描述好这个变换主要的变化方向就好了。反过头来看看之前特征值分解的式子,分解得到的Σ矩阵是一个对角阵,里面的特征值是由大到小排列的,这些特征值所对应的特征向量就是描述这个矩阵变化方向(从主要的变化到次要的变化排列)
当矩阵是高维的情况下,那么这个矩阵就是高维空间下的一个线性变换,这个线性变化可能没法通过图片来表示,但是可以想象,这个变换也同样有很多的变换方向,我们通过特征值分解得到的前N个特征向量,那么就对应了这个矩阵最主要的N个变化方向。我们利用这前N个变化方向,就可以近似这个矩阵(变换)。也就是之前说的:提取这个矩阵最重要的特征。总结一下,特征值分解可以得到特征值与特征向量,特征值表示的是这个特征到底有多重要,而特征向量表示这个特征是什么,可以将每一个特征向量理解为一个线性的子空间,我们可以利用这些线性的子空间干很多的事情。不过,特征值分解也有很多的局限,比如说变换的矩阵必须是方阵。
 2 奇异值:
下面重点谈谈奇异值分解。特征值分解是一个提取矩阵特征很不错的方法,但是它只是对方阵而言的,在现实的世界中,我们看到的大部分矩阵都不是方阵,比如说有N个学生,每个学生有M科成绩,这样形成的一个N * M的矩阵就不可能是方阵,我们怎样才能描述这样普通的矩阵呢的重要特征呢?奇异值分解可以用来干这个事情,奇异值分解是一个能适用于任意的矩阵的一种分解的方法:

假设A是一个N * M的矩阵,那么得到的U是一个N * N的方阵(里面的向量是正交的,U里面的向量称为左奇异向量),Σ是一个N * M的矩阵(除了对角线的元素都是0,对角线上的元素称为奇异值),V’(V的转置)是一个N * N的矩阵,里面的向量也是正交的,V里面的向量称为右奇异向量),如下图所示:

那么奇异值和特征值是怎么对应起来的呢?首先,我们将一个矩阵A的转置 * A,将会得到一个方阵,我们用这个方阵求特征值可以得到:

这里得到的v,就是我们上面的右奇异向量。此外我们还可以得到:

这里的σ就是上面说的奇异值,u就是上面说的左奇异向量。奇异值σ跟特征值类似,在矩阵Σ中也是从大到小排列,而且σ的减少特别的快,在很多情况下,前10%甚至1%的奇异值的和就占了全部的奇异值之和的99%以上了。也就是说,我们也可以用前r大的奇异值来近似描述矩阵,这里定义一下部分奇异值分解:
r是一个远小于m、n的数,这样矩阵的乘法看起来像是下面的样子:
右边的三个矩阵相乘的结果将会是一个接近于A的矩阵,在这儿,r越接近于n,则相乘的结果越接近于A。而这三个矩阵的面积之和(在存储观点来说,矩阵面积越小,存储量就越小)要远远小于原始的矩阵A,我们如果想要压缩空间来表示原矩阵A,我们存下这里的三个矩阵:U、Σ、V就好了。

  个人感觉SVD最重要的一点就是U矩阵中每一行代表着原来矩阵的一个特征,而矩阵Σ中对角线值的大小代表着这些特征的重要程度。此外,奇异值分解缩小了需要的存储空间,原来需要mn的存储空间,奇异值分解之后就只需要mr + r + n*r的存储空间。

2.HOSVD分解
  HOSVD分解将一个张量分解成一个核心张量(core tensor)和三个正交矩阵。
公式以及图示如下:

其中U1,U2,U3分别是张量做1-mode矩阵化,2-mode矩阵化,3-mode矩阵化后分别进行奇异值分解得到的不同的U。
举个例子:
假如张量为:

其进行1-mode matricization后得到结果:

对该矩阵进行奇异值分解得到:

则HOSVD中U1为
U2,U3以此类推……
而HOSVD中的核心张量g可以用原始张量T和U1,U2,U3算得。

跟SVD一样,HOSVD中的核心张量core代表着原始张量的某些特征,而U1,U2,U3代表着这些特征的重要程度。具体的还需要后面进一步研究。

CP分解和HOSVD分解相关推荐

  1. 低秩分解(张量分解)

    低秩分解(张量分解)         神经网络的 filter 可以看作是四维张量:宽度 w高度 h通道数 c卷积核数 n,由于 c 和 n 对网络结构的整体影响较大,所以基于卷积核(w*h)矩阵信息 ...

  2. 3NF分解与BCNF分解

    相关系列: ER图转为关系模式 无损分解和保持依赖 3NF分解与BCNF分解 正则覆盖与候选码 如何设计ER图(弱实体集) 如何设计ER图(映射基数) 1. 3NF分解 先求出正则覆盖Fc 对于Fc里 ...

  3. 三阶矩阵的lu分解详细步骤_数学 - 线性代数导论 - #4 矩阵分解之LU分解的意义、步骤和成立条件...

    线性代数导论 - #4 矩阵分解之LU分解的意义.步骤和成立条件 目前我们用于解线性方程组的方法依然是Gauss消元法.在Gauss消元法中,我们将右侧向量b与A写在一起作为一个增广矩阵进行同步的操作 ...

  4. 机器学习(十一)——机器学习中的矩阵方法(1)LU分解、QR分解

    http://antkillerfarm.github.io/ 因子分析的EM估计(续) 去掉和各参数无关的部分后,可得: ∑i=1mE[logp(x(i)|z(i);μ,Λ,Ψ)]=∑i=1mE[1 ...

  5. java质因数的分解_Java实现分解任意输入数的质因数算法示例

    本文实例讲述了Java实现分解任意输入数的质因数算法.分享给大家供大家参考,具体如下: 分解任意输入数的质因数: 质因数概念:任何一个合数都可以写成几个质数相乘的形式.其中每个质数都是这个合数的因数, ...

  6. 关于软件开发项目任务的横向分解和纵向分解

    转 在一个软件研发项目的管理实践中,项目任务的分解一直是一个很重要的工作,但是不同的项目经理对这个问题的操作方式又常常会千差万别,其中一个很常见的分歧在于,是横向分解还是纵向分解?本文试图对此进行一个 ...

  7. 几种矩阵分解算法: LU分解,Cholesky分解,QR分解,SVD分解,Jordan分解

    目录 1.LU分解 2. LDLT分解法 3. Cholesky分解的形式 4. QR分解 5.SVD分解 5.1 SVD与广义逆矩阵 6. Jordan 分解 参考文章: ---------我只是搬 ...

  8. QR分解、RQ分解与SVD

    QR分解.RQ分解与SVD分解整理 1.QR分解 QR分解将一个m x m的矩阵A分解为一个正交矩阵Q与一个上三角阵R之积.常常利用Householder变换来进行QR分解的计算. Household ...

  9. 代码:matlab求QR分解,QL分解,LQ分解和RQ分解。

    Matlab的命令里只有QR分解,如何求QL分解和LQ,RQ分解? LQ分解:  [Q 1,R 1]= qr (H');  H=(Q 1*R 1)'=R 1' *Q 1'=L*Q;  所以下三角阵L= ...

最新文章

  1. 除了数据,生活中还有这些......
  2. 6-3 求链表的倒数第m个元素
  3. Docker与Kubernetes,是敌是友?
  4. BorderDet论文解读
  5. Detectron-MaskRCnn:Mask判别和获取前向Mask的标签
  6. 打开输入花里胡哨的特殊符号
  7. 9203学生工具页-建议放桌面
  8. hdf5 matlab,通过MATLAB将矩阵数据写入HDF5文件中的每个数据类型成员
  9. JS中元素的属性(class、style)操作
  10. 记一次MySQL中Waiting for table metadata lock的解决方法
  11. [数据仓库]数据仓库和数据库的区别
  12. 5.MySQL优化---索引优化专题
  13. 实习成长之路:操作系统——CPU有哪些工作模式呢?
  14. 开源镜像站最新动态20150626
  15. Echarts显示数据被遮挡了
  16. 为什么要使用异常及java异常的使用--及js、php、golang的异常机制
  17. 竞赛 | 中国健康信息处理大会(CHIP2022)发布评测任务
  18. 在查找预编译头时遇到意外的文件结尾。是否忘记了向源中添加“#include “stdafx.h“”?
  19. p20华为云电脑白屏_华为云电脑让P20如虎添翼,连接键鼠秒变办公利器
  20. 巨坑警告!程序员去银行写代码千万别去分行

热门文章

  1. 八爪鱼怎样导入mysql_网页数据如何导出到数据库 - 八爪鱼采集器
  2. 【Markdown基础教程】Markdown介绍
  3. 建模simulink - xpc自定义模块设置
  4. 黑洞信息悖论:进入黑洞的信息去了哪里
  5. html reset 无效,HTML中的input type=reset标签失效(不起作用)的可能原因
  6. 股票查询接口功能是什么?
  7. 企业微信直播服务器,企业微信直播平台的利用
  8. 【Ios】解决安装iCloud“installer软件包有一个问题”并同时可以适用爱思
  9. google输入法PK搜狗输入法
  10. 2022.05.18-使用Lightroom批量将图像从Raw转换为jpg