点击上方“AI有道”,选择“置顶公众号”

关键时刻,第一时间送达!

阅读本文需要 8 分钟

在之前的一篇文章:划重点!通俗解释协方差与相关系数,红色石头为大家通俗化地讲解了协方差是如何定义的,以及如何直观理解协方差,并且比较了协方差与相关系数的关系。

本文红色石头将继续使用白话语言,介绍机器学习中应用十分广泛的矩阵分解方法:奇异值分解(SVD)。本文不注重详细的数学推导,只注重感性的理解以及如何在实际应用中使用它们。

1

普通方阵的矩阵分解(EVD)

我们知道如果一个矩阵 A 是方阵,即行列维度相同(mxm),一般来说可以对 A 进行特征分解:

其中,U 的列向量是 A 的特征向量,Λ 是对角矩阵,Λ 对角元素是对应特征向量的特征值。

举个简单的例子,例如方阵 A 为:

那么对其进行特征分解,相应的 Python 代码为:

运行输出:

特征分解就是把 A 拆分,如下所示:

其中,特征值 λ1=3.41421356,对应的特征向量 u1=[0.81649658 0.57735027];特征值 λ2=0.58578644,对应的特征向量 u2=[-0.81649658 0.57735027],特征向量均为列向量。

值得注意的是,特征向量都是单位矩阵,相互之间是线性无关的,但是并不正交。得出的结论是对于任意方阵,不同特征值对应的特征向量必然线性无关,但是不一定正交。

02

对称矩阵的矩阵分解(EVD)

如果方阵 A 是对称矩阵,例如:

对称矩阵特征分解满足以下公式:

那么对其进行特征分解,相应的 Python 代码为:

运行输出:

特征分解就是把 A 拆分,如下所示:

其中,特征值 λ1=2.61803399,对应的特征向量 u1=[0.85065081 0.52573111];特征值 λ2=0.38196601,对应的特征向量 u2=[-0.52573111 0.85065081],特征向量均为列向量。

注意,我们发现对阵矩阵的分解和非对称矩阵的分解除了公式不同之外,特征向量也有不同的特性。对称矩阵的不同特征值对应的特征向量不仅线性无关,而且是相互正交的。什么是正交呢?就是特征向量内积为零。验证如下:

0.85065081 * -0.52573111 + 0.52573111 * 0.85065081 = 0

重点来了,对称矩阵 A 经过矩阵分解之后,可以写成以下形式:

对上式进行验证:

这种分解形式非常有用,待会红色石头即将介绍。

3

奇异值分解(SVD)

我们发现,在矩阵分解里的 A 是方阵或者是对称矩阵,行列维度都是相同的。但是实际应用中,很多矩阵都是非方阵、非对称的。那么如何对这类矩阵进行分解呢?因此,我们就引入了针对维度为 mxn 矩阵的分解方法,称之为奇异值分解(Singular Value Decomposition)。

假设矩阵 A 的维度为 mxn,虽然 A 不是方阵,但是下面的矩阵却是方阵,且维度分别为 mxm、nxn。

因此,我们就可以分别对上面的方阵进行分解:

其中,Λ1 和 Λ2 是对焦矩阵,且对角线上非零元素均相同,即两个方阵具有相同的非零特征值,特征值令为 σ1, σ2, ... , σk。值得注意的是,k<=m 且 k<=n。

根据 σ1, σ2, ... , σk 就可以得到矩阵 A 的特征值为:

接下来,我们就能够得到奇异值分解的公式:

其中,P 称为左奇异矩阵,维度是 mxm,Q 称为右奇异矩阵,维度是 nxn。Λ 并不是方阵,其维度为 mxn,Λ 对角线上的非零元素就是 A 的特征值 λ1, λ2, ... , λk。图形化表示奇异值分解如下图所示:

举个简单的例子来说明,令 A 为 3x2 的矩阵:

则有:

计算得到特征向量 P 和对应的特征值 σ 为:

然后,有:

计算得到特征向量 Q 和对应的特征值 σ 为:

则我们看可以得到 A 的特征值为:

最后,整合矩阵相乘结果,满足奇异值分解公式。

奇异值分解可以写成以下和的形式:

其中,p1 和 q1 分别为左奇异矩阵和右奇异矩阵的特征向量。

4

如何形象化理解 SVD

奇异值分解到底有什么用呢?如何形象化地理解奇异值?我们一起来看下面的例子。

首先放上男神的照片:

我们对该图片进行奇异值分解,则该图片可写成以下和的形式:

上式中,λ1, λ2, ... , λk 是按照从大到小的顺序的。

首先,若我们只保留最大的奇异值 λ1,舍去其它奇异值,即 A=λ1p1q1T,然后作图:

结果完全看不清楚,再多加几个奇异值,取前 5 个最大的奇异值,然后作图:

现在貌似有点轮廓了,继续增加奇异值,取前 10 个最大的奇异值,然后作图:

又清晰了一些,继续将奇异值增加到 20 个,然后作图:

现在已经比较清晰了,继续将奇异值增加到 50 个,然后作图:

可见,取前 50 个最大奇异值来重构图像时,已经非常清晰了。我们得到和原图差别不大的图像。也就是说,随着选择的奇异值的增加,重构的图像越来越接近原图像。

基于这个原理,奇异值分解可以用来进行图片压缩。例如在本例中,原始图片的维度是 870x870,总共需要保存的像素值是:870x870=756900。若使用 SVD,取前 50 个最大的奇异值即可,则总共需要存储的元素个数为:

(870+1+870)x50=87050

显然,所需存储量大大减小了。在需要存储许多高清图片,而存储空间有限的情况下,就可以利用 SVD,保留奇异值最大的若干项,舍去奇异值较小的项即可。

值得一提的是,奇异值从大到小衰减得特别快,在很多情况下,前 10% 甚至 1% 的奇异值的和就占了全部的奇异值之和的 99% 以上了。这对于数据压缩来说是个好事。

SVD 数据压缩的算法图示如下:

SVD 数据压缩的示例代码为:

from skimage import io
import matplotlib.pyplot as plt
from PIL import Imageimg=io.imread('./ng.jpg')
m,n = img.shape
io.imshow(img)
plt.show()P, L, Q = np.linalg.svd(img)
tmp = np.diag(L)
if m < n:d = np.hstack((tmp,np.zeros((m,n-m))))
else:d = np.vstack((tmp,np.zeros((m-n,n))))# k = 50
img2 = P[:,:50].dot(d[:50,:50]).dot(Q[:50,:])
io.imshow(np.uint8(img2))
plt.show()tmp = np.uint8(img2)
im = Image.fromarray(tmp)
im.save("out.jpg")

现在,你已经完全了解了奇异值分解了吧。是不是挺简单也挺有意思呢?

参考文献

https://zhuanlan.zhihu.com/p/26306568

https://www.zhihu.com/question/22237507/answer/53804902

推荐阅读

【干货】我的机器学习入门路线图

长文!机器学习笔试精选 100 题【附详细解析】

划重点!通俗解释协方差与相关系数

如何让奇异值分解(SVD)变得不“奇异”?相关推荐

  1. 奇异值的物理意义是什么?强大的矩阵奇异值分解(SVD)及其应用

    作者:郑宁 链接:https://www.zhihu.com/question/22237507/answer/53804902 来源:知乎 著作权归作者所有.商业转载请联系作者获得授权,非商业转载请 ...

  2. 【机器学习】这次终于彻底理解了奇异值分解(SVD)原理及应用

    奇异值分解(Singular Value Decomposition,以下简称SVD)是在机器学习领域广泛应用的算法,有相当多的应用与奇异值都可以扯上关系,它不光可以用于降维算法中的特征分解,比如做f ...

  3. 矩阵论基础知识4——强大的矩阵奇异值分解(SVD)及其应用

    强大的矩阵奇异值分解(SVD)及其应用 版权声明: 本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用,但请注明出处,如 ...

  4. 关于奇异值以及奇异值分解SVD的思考

    前言: SVD作为一个很基本的算法,在很多机器学习算法中都有它的身影,特别是在现在的大数据时代,由于SVD可以实现并行化,因此更是大展身手.SVD的原理不难,只要有基本的线性代数知识就可以理解,实现也 ...

  5. 矩阵分解 (特征值/奇异值分解+SVD+解齐次/非齐次线性方程组)

    ,#1. 用途# 1.1 应用领域 最优化问题:最小二乘问题 (求取最小二乘解的方法一般使用SVD) 统计分析:信号与图像处理 求解线性方程组: Ax=0或Ax=b Ax = 0 或 Ax =b 奇异 ...

  6. 【AI绘图学习笔记】奇异值分解(SVD)、主成分分析(PCA)

    这节的内容需要一些线性代数基础知识,如果你没听懂本文在讲什么,强烈建议你学习[官方双语/合集]线性代数的本质 - 系列合集 文章目录 奇异值分解 线性变换 特征值和特征向量的几何意义 什么是奇异值分解 ...

  7. 矩阵分解之: 特征值分解(EVD)、奇异值分解(SVD)、SVD++

    目录: 1.矩阵分解 1.1 矩阵分解的产生原因 1.2 矩阵分解作用 1.3 矩阵分解的方法 1.4 推荐学习的经典矩阵分解算法 2. 特征值分解(EVD) 3. 奇异值分解(SVD) 4. SVD ...

  8. 矩阵特征值分解与奇异值分解(SVD)含义解析及应用

    原文链接:http://blog.csdn.net/xiahouzuoxin/article/details/41118351 特征值与特征向量的几何意义 矩阵的乘法是什么,别只告诉我只是" ...

  9. 机器学习-Sklearn(第三版)Day4 主成分分析PCA与奇异值分解SVD

    目录 一.简介 什么是维度 sklearn中的降维算法 二.PCA与SVD 0.如何实现降维算法 思考:PCA和特征选择技术都是特征工程的一部分,它们有什么不同? 1.重要参数n_components ...

最新文章

  1. 深度神经网络中的Inception模块介绍
  2. centos7全离线安装redis3.2.8集群
  3. 数据结构与算法(3)-----队列和栈
  4. 2020-11-13(c++下JNI开发不同点)
  5. Linux面试最常见的5个基本问题
  6. linux 使用buildroot制作文件系统
  7. Ceph Luminous安装指南
  8. 内存和显存_【硬件资讯】显存再升级?Nvidia新卡实锤GDDR6X!显存大升级能否带来性能提升??...
  9. onclick判断组件调用_从子组件Onclick更新状态
  10. Django横向二级导航栏(鼠标悬空事件)
  11. 如何面试一位前端工程师
  12. cookie不正确 请重新登录_小学多陪,初中少陪,高中不陪!小学6年陪孩子写作业的正确方式,请家长收下!...
  13. 一个demo学会java
  14. oracle客户端查看版本号,Oracle 版本查看及版本号说明
  15. 使用Python写的第一个网络爬虫程序
  16. oppo9s刷机教程_OPPOR9S刷机包
  17. ET199加密狗是如何复制
  18. 微信 公众号 网页授权登录(静默授权)
  19. Vue3:基础学习笔记
  20. 计算机网络系统的维护,简论事业单位计算机网络管理系统的维护

热门文章

  1. springboot(七):springboot+mybatis多数据源最简解决方案
  2. 自己生产签名和数字证书的方法
  3. 如何在C/S下打印报表
  4. jQuery EasyUI使用教程之创建可折叠面板
  5. [实战演练]腾讯2013年校招软件开发类笔试题目(选择题部分)
  6. Virtual Machine Manager 2008 2008 R2系列之安装部署
  7. nyoj66分数拆分
  8. System.Object 是 .NET 中所有类型的根吗?
  9. js中直接对字符串转义-用于solr ulr 关键词转义
  10. 通过 .htaccess 实现缓存策略