在机器学习领域,有相当多的应用与奇异值都可以扯上关系,比如做feature reduction的PCA,做数据压缩(以图像压缩为代表)的算法,还有做搜索引擎语义层次检索的LSI(Latent Semantic Indexing)。

奇异值分解是一个有着很明显的物理意义的一种方法,它可以将一个比较复杂的矩阵用更小更简单的几个子矩阵的相乘来表示,这些小矩阵描述的是矩阵的重要的特性。就像是描述一个人一样,给别人描述说这个人长得浓眉大眼,方脸,络腮胡,而且带个黑框的眼镜,这样寥寥的几个特征,就让别人脑海里面就有一个较为清楚的认识,实际上,人脸上的特征是有着无数种的,之所以能这么描述,是因为人天生就有着非常好的抽取重要特征的能力,让机器学会抽取重要的特征,SVD是一个重要的方法。

说起奇异值分解,其一就要了解奇异值分解的计算方式、其二要掌握奇异值的特性。(奇异值分解的目的同特征值分解一样,就是提取出一个矩阵最重要的特征)

--------------首先再回顾一下特征值:

如果说一个向量v是方阵A的特征向量,将一定可以表示成r如下面的形式:A=

这时候λ就被称为特征向量v对应的特征值,一个矩阵的一组特征向量是一组正交向量。特征值分解是将一个矩阵分解成如下面的形式:A=Q

其中Q是这个矩阵A的特征向量组成的矩阵,Σ是一个对角阵,每一个对角线上的元素就是一个特征值。我这里引用了一些参考文献中的内容来说明一下。首先,要明确的是,一个矩阵其实就是一个线性变换,因为一个矩阵乘以一个向量后得到的向量,其实就相当于将这个向量进行了线性变换。比如说下面的一个矩阵:

它其实对应的线性变换是下面的形式:

因为这个矩阵M乘以一个向量(x,y)的结果是:

上面的矩阵是对称的,所以这个变换是一个对x,y轴的方向一个拉伸变换(每一个对角线上的元素将会对一个维度进行拉伸变换,当值>1时,是拉长,当值<1时时缩短),当矩阵不是对称的时候,假如说矩阵是下面的样子:

      它所描述的变换是下面的样子:

这其实是在平面上对一个轴进行的拉伸变换(如蓝色的箭头所示),在图中,蓝色的箭头是一个最主要的变化方向(变化方向可能有不止一个),如果我们想要描述好一个变换,那我们就描述好这个变换主要的变化方向就好了。反过头来看看之前特征值分解的式子,分解得到的Σ矩阵是一个对角阵,里面的特征值是由大到小排列的,这些特征值所对应的特征向量就是描述这个矩阵变化方向(从主要的变化到次要的变化排列)

当矩阵是高维的情况下,那么这个矩阵就是高维空间下的一个线性变换,这个线性变化可能没法通过图片来表示,但是可以想象,这个变换也同样有很多的变换方向,我们通过特征值分解得到的前N个特征向量,那么就对应了这个矩阵最主要的N个变化方向。我们利用这前N个变化方向,就可以近似这个矩阵(变换)。也就是之前说的:提取这个矩阵最重要的特征。总结一下,特征值分解可以得到特征值与特征向量,特征值表示的是这个特征到底有多重要,而特征向量表示这个特征是什么,可以将每一个特征向量理解为一个线性的子空间,我们可以利用这些线性的子空间干很多的事情。不过,特征值分解也有很多的局限,比如说变换的矩阵必须是方阵。

-------------------奇异值-----------------

下面谈谈奇异值分解。特征值分解是一个提取矩阵特征很不错的方法,但是它只是对方阵而言的,在现实的世界中,我们看到的大部分矩阵都不是方阵,比如说有N个学生,每个学生有M科成绩,这样形成的一个N * M的矩阵就不可能是方阵,我们怎样才能描述这样普通的矩阵呢的重要特征呢?奇异值分解可以用来干这个事情,奇异值分解是一个能适用于任意的矩阵的一种分解的方法

假设A是一个M * N的矩阵,那么得到的U是一个M * M的方阵(里面的向量是正交的,U里面的向量称为左奇异向量),Σ是一个M * N的矩阵(除了对角线的元素都是0,对角线上的元素称为奇异值),(V的转置)是一个N * N的矩阵,里面的向量也是正交的,V里面的向量称为右奇异向量),从图片来反映几个相乘的矩阵的大小可得下面的图片:

那么奇异值和特征值是怎么对应起来的呢?首先,我们将一个矩阵A的转置 * A,将会得到一个方阵,我们用这个方阵求特征值可以得到:        这里得到的v,就是我们上面的右奇异向量。此外我们还可以得到:

    这里的σ就是上面说的奇异值,u就是上面说的左奇异向量u。奇异值σ跟特征值类似,在矩阵Σ中也是从大到小排列,而且σ的减少特别的快,在很多情况下,前10%甚至1%的奇异值的和就占了全部的奇异值之和的99%以上了。也就是说,我们也可以用前r大的奇异值来近似描述矩阵,这里定义一下部分奇异值分解

                    r是一个远小于m、n的数,这样矩阵的乘法看起来像是下面的样子:

右边的三个矩阵相乘的结果将会是一个接近于A的矩阵,在这儿,r越接近于n,则相乘的结果越接近于A。而这三个矩阵的面积之和(在存储观点来说,矩阵面积越小,存储量就越小)要远远小于原始的矩阵A,我们如果想要压缩空间来表示原矩阵A,我们存下这里的三个矩阵:U、Σ、V就好了。--------------------其实整个过程就是在对非方阵的矩阵进行特征值分解)

---------------------------奇异值的计算-----------------------------

奇异值的计算是一个难题,是一个O(N^3)的算法。在单机的情况下当然是没问题的,matlab在一秒钟内就可以算出1000 * 1000的矩阵的所有奇异值,但是当矩阵的规模增长的时候,计算的复杂度呈3次方增长,就需要并行计算参与了。Google的吴军老师在数学之美系列谈到SVD的时候,说起Google实现了SVD的并行化算法,说这是对人类的一个贡献,但是也没有给出具体的计算规模,也没有给出太多有价值的信息。

其实SVD还是可以用并行的方式去实现的,在解大规模的矩阵的时候,一般使用迭代的方法,当矩阵的规模很大(比如说上亿)的时候,迭代的次数也可能会上亿次,如果使用Map-Reduce框架去解,则每次Map-Reduce完成的时候,都会涉及到写文件、读文件的操作。个人猜测Google云计算体系中除了Map-Reduce以外应该还有类似于MPI的计算模型,也就是节点之间是保持通信,数据是常驻在内存中的,这种计算模型比Map-Reduce在解决迭代次数非常多的时候,要快了很多倍。

Lanczos迭代就是一种解对称方阵部分特征值的方法(之前谈到了,解A’* A得到的对称方阵的特征值就是解A的右奇异向量),是将一个对称的方程化为一个三对角矩阵再进行求解。按网上的一些文献来看,Google应该是用这种方法去做的奇异值分解的。请见Wikipedia上面的一些引用的论文,如果理解了那些论文,也“几乎”可以做出一个SVD了。

由于奇异值的计算是一个很枯燥,纯数学的过程,而且前人的研究成果(论文中)几乎已经把整个程序的流程图给出来了。更多的关于奇异值计算的部分,将在后面的参考文献中给出,这里不再深入,我还是focus在奇异值的应用中去。

参考连接:https://mp.weixin.qq.com/s/Dv51K8JETakIKe5dPBAPVg

机器学习中的数学基础:(2)矩阵的奇异值分解(SVD)及其应用相关推荐

  1. 【机器学习中的数学基础】矩阵特征值、特征向量和特征值分解的几何意义

    [机器学习中的数学基础]矩阵特征值.特征向量和特征值分解的几何意义 在<机器学习>西瓜书中的第十章提到了"多维缩放"(简称MDS)方法,该方法是一种经典的的降维方法.此 ...

  2. 机器学习中的数学基础怎么学?

    又到了周末了,但小编的周六并不算周末.回到本次的话题上,这次小编给大家分享机器学习中的数学基础该怎么学. 首先给出小编的态度:机器学习中涉及的数学课程比较多,要想一下子去穷尽所有课程显然也不现实,大可 ...

  3. 免费教材丨第51期:数学基础课程----概率论教程、机器学习中的数学基础

    小编说 过去几个月里,有不少人联系我,向我表达他们对人工智能.数据科学.对利用机器学习技术探索统计规律性,开发数据驱动的产品的热情.但是,我发现他们中有些人实际上缺少为了获取有用结果的必要的数学直觉和 ...

  4. 秦曾昌人工智能课程---1、机器学习中的数学基础

    秦曾昌人工智能课程---1.机器学习中的数学基础 一.总结 一句话总结: 函数+线代:了解数学常用函数,了解矩阵,了解线性代数 由浅入深:人工智能需要的高数基础并不多,由浅入深,很简单的 1.机器学习 ...

  5. 机器学习中的数学基础(2)——理解基、线性组合与向量空间

    https://www.toutiao.com/a6668922466275951118/ 这是<机器学习中的数学基础>系列的第2篇. 铺垫 在介绍各种"高大上"的名词 ...

  6. 秦曾昌人工智能课程---2、机器学习中的数学基础2

    秦曾昌人工智能课程---2.机器学习中的数学基础2 一.总结 一句话总结: 概率论在机器学习中比较重要 1.机器学习中最重要的数学基础是什么? 概率和统计:机器学习中很多情况需要处理不确定性, 2.我 ...

  7. 机器学习中的数学基础(一):高等数学

    机器学习中的数学基础(一):高等数学 1 高数 1.1 如何理解方向导数与梯度? 1.2 泰勒公式 1.3 拉格朗日乘子法 1.3.1 理论支持 1.3.2 实例 在看西瓜书的时候有些地方的数学推导( ...

  8. 机器学习中的数学基础--随机变量与概率分布,伯努利分布和泊松分布,贝叶斯定理

    机器学习中的数学基础--第四天 随机变量与概率分布 伯努利分布和泊松分布 贝叶斯定理 随机变量与概率分布 均匀分布:每个事件的概率是一样的,例如骰子的六面,每一面的概率都是1/6 随机变量: 1.离散 ...

  9. 机器学习中的数学基础:(3)主成分分析(PCA)及其应用

    主成分分析主要用于数据的降维?什么是降维? 比如说有如下的房价数据:    这种一维数据可以直接放在实数轴上: 房价样本数据用X表示,则以上数据的均值为: 以均值为原点: 将上述表格以均值,做&quo ...

  10. 机器学习中的数学基础(1)——向量和范数

    https://www.toutiao.com/i6668553958534939144/ 从今天开始,我将开设一个机器学习数学基础的系列.主要介绍机器学习中经常用到的那些数学知识,方便大家入门.一说 ...

最新文章

  1. [KIWI syslog]Install document
  2. mac微软雅黑字体_【字体字重】常见设计稿字体对应字重
  3. 10个随机数相加等于100
  4. [笔试题目] 腾讯2015年9月基础研究笔试题
  5. linux串口编程实例_Linux 网络编程——原始套接字实例:发送 UDP 数据包
  6. thrift介绍及应用(一)—介绍
  7. Error installing bundler:bundler requires Ruby version >= 2.3.0.
  8. 11 个创新的网站滑动效果设计案例展示
  9. SpringBoot番外篇-微服务架构【1.起源与定义】
  10. 润乾报表开源 BI 组件学习
  11. 关于新APP,从交底书入手
  12. 适合于初学者—软路由全探索系列(二):探索群晖 VMM 虚拟机旁路由安装及设置
  13. 畅销书看得不过瘾?KU电子书包月服务了解一下
  14. 如何调研如何写调研报告
  15. java 编写扑克牌洗牌,java斗地主扑克 扑克牌 洗牌 发牌 Collection 集合练习
  16. 华为服务器虚拟kvm退出全屏,kvm虚拟机全屏快捷键
  17. SQL注入大闯关笔记
  18. matlab匿名函数如何写,matlab的匿名函数
  19. 【3小时学会C语言】横向对比/纵向剖析,轻松学习C语言
  20. AE制作粉笔字特效教程 3分钟快速制作Vlog片头

热门文章

  1. 2021年大数据Flink(六):Flink On Yarn模式
  2. python TypeError: ‘module‘ object is not callable
  3. Android Activity从右边到左边跳转(overridePendingTransition)
  4. android接入支付宝提示支付取消的方法处理
  5. org.gradle.api.internal.tasks.DefaultTaskInputs$TaskInput........
  6. Go 学习笔记(24)— 并发(03)[通道特点、通道声明、通道发送/接收/关闭、单向通道]
  7. poj 1679 次小生成树
  8. 12,缓冲运动。匀速运动停止条件
  9. JavaScript时间日期格式化
  10. SQL2000联机丛书:使用和维护数据仓库