1 SVD分解介绍

之前用特征值来进行对角化的时候,被对角化的矩阵一定要是方阵,但是SVD的话,非方阵也是可以的。

矩阵Σ对角线上的元素都是大于等于0的

我们可以改变U,V的一些行和列,来达到Σ对角线上的元素越来越小

 所以rank(A)就是Σ中对角线元素不为零的数量

如果把Σ中全零的部分抹掉,然后U和V中全零对应的行和列也去掉,那么乘积结果还是等于A

如果我们多抹掉一些(比如多抹掉一行),把Σ中非零的一部分也抹掉了,结果肯定不等于A了,但是是所有rank为k-1的部分中最接近于A的,接近的意思是两个矩阵相减的结果拉成一条向量,这个向量的norm最小

2 SVD的应用:图像压缩

2.1可以用小一点的维度来复原一张相似的图

2.1 SVD分解的应用2:文档-词项矩阵的奇异值分解

参考了 奇异值分解的揭秘(二):降维与奇异向量的意义 - 知乎 (zhihu.com)

给定一个大小为7×5的矩阵A,A的前4行表示来源于CS的文档,后3行表示来源于医学(MD)的文档,A的各列分别对应着5个单词,在矩阵中,每个元素的数值表示单词在相应文档中出现的频数。

我们使用numpy 对其进行SVD分解

import numpy as np
A = [[1, 1, 1, 0, 0], [2, 2, 2, 0, 0], [1, 1, 1, 0, 0], [5, 5, 5, 0, 0], [0, 0, 0, 2, 2], [0, 0, 0, 3, 3], [0, 0, 0, 1, 1]]
[U, s, v] = np.linalg.svd(A)
[U, s, v]'''
[[-0.1796053 ,  0.        ,  0.97298719, -0.07270854, -0.05034883,-0.10906282,-0.03635427],[-0.3592106 ,  0.        ,  0.05552004,  0.49265053, -0.13571796,0.73897579,  0.24632526],[-0.1796053 ,  0.        ,  0.02776002,  0.03887713,  0.98065351,0.05831569,  0.01943856],[-0.89802651,  0.        , -0.22235746, -0.19029393, -0.13177375,-0.28544089,-0.09514696],[ 0.        , -0.53452248,  0.        ,  0.71428571,  0.        ,-0.42857143,-0.14285714],[ 0.        , -0.80178373,  0.        , -0.42857143,  0.        ,0.35714286, -0.21428571],[ 0.        , -0.26726124,  0.        , -0.14285714,  0.       ,-0.21428571,0.92857143]]),[9.64365076e+00, 5.29150262e+00, 7.52989891e-16, 0.00000000e+00,0.00000000e+00]),array([[-0.57735027, -0.57735027, -0.57735027, -0.        , -0.        ],[-0.        , -0.        , -0.        , -0.70710678, -0.70710678],[ 0.81649658, -0.40824829, -0.40824829,  0.        ,  0.        ],[ 0.        ,  0.        ,  0.        , -0.70710678,  0.70710678],[ 0.        , -0.70710678,  0.70710678,  0.        ,  0.        ]])]
'''

奇异值主要是前两项,所以我们使用前两项的U,V矩阵和对应的奇异值对齐进行近似

U[:,:2] @ np.diag(s[:2]) @ v[:2,:]
'''
array([[1., 1., 1., 0., 0.],[2., 2., 2., 0., 0.],[1., 1., 1., 0., 0.],[5., 5., 5., 0., 0.],[0., 0., 0., 2., 2.],[0., 0., 0., 3., 3.],[0., 0., 0., 1., 1.]])
'''

近似结果和原来的是一样的

我们可以很明显地发现,左右奇异向量u和v已经有了明显的语义信息:第一行/列 表示的内容是CS 相关的  ,第二行/列 表示的内容是MD相关的。

此时,我们使用第一行V,第一列U和第一个奇异值就可以得到CS相关的特征矩阵;使用第二行V,第二列U和第二个奇异值就可以得到MD相关的特征矩阵

U[:,:1] @ np.diag(s[:1]) @ v[:1,:]
'''
array([[1., 1., 1., 0., 0.],[2., 2., 2., 0., 0.],[1., 1., 1., 0., 0.],[5., 5., 5., 0., 0.],[0., 0., 0., 0., 0.],[0., 0., 0., 0., 0.],[0., 0., 0., 0., 0.]])
'''
U[:,1:2] @ np.diag(s[1:2]) @ v[1:2,:]
'''
array([[0., 0., 0., 0., 0.],[0., 0., 0., 0., 0.],[0., 0., 0., 0., 0.],[0., 0., 0., 0., 0.],[0., 0., 0., 2., 2.],[0., 0., 0., 3., 3.],[0., 0., 0., 1., 1.]])
'''

3 SVD求解

这里中间的可以消掉,是因为V和U是正交矩阵

都是对称矩阵,那么我们就可以对其进行特征值分解(要变成标准正交基的那种,也就是特征值分解了之后,还要对特征空间的基进行施密特正交化)

然后Σ对角线的值就是的特征值的开方

李宏毅线性代数笔记13:SVD分解相关推荐

  1. 李宏毅线性代数笔记5:线性方程组

    1 线性方程的解 1.1 两维的情况 span of the columns of A--由A的列向量张成的空间 2 线性方程有解的充要条件 线性方程x1a1+x2a2+--+xnan=β有解(con ...

  2. 线性代数导论5——SVD分解

    SVD分解 SVD分解是LSA的数学基础,本文是我的LSA学习笔记的一部分,之所以单独拿出来,是因为SVD可以说是LSA的基础,要理解LSA必须了解SVD,因此将LSA笔记的SVD一节单独作为一篇文章 ...

  3. 【线性代数】6-7:SVD分解(Singular Value Decomposition-SVD)

    原文地址1:https://www.face2ai.com/Math-Linear-Algebra-Chapter-6-7转载请标明出处 Abstract: 本文介绍SVD,奇异值分解,应该可以算是本 ...

  4. 线性代数笔记: Cholesky分解

    1 介绍 当一个实矩阵A是对称正定矩阵的时候,它可以分解成一个下三角矩阵L以及它的转置的乘积,即: 1.1 矩阵半正定的情况 如果矩阵是正定的话,那么L唯一确定:如果矩阵是半正定的话,那么也可以分解, ...

  5. 李宏毅线性代数笔记9:对角化

    1 可对角化 2 特征分解 如果可对角化的话,那么p矩阵的每一列都是特征向量:对角矩阵对角线上的元素都是特征值 如果可对角化的话,那么有n个线性无关的特征向量 3 如何对角化 4 不同特征值对应的特征 ...

  6. 李宏毅机器学习笔记13:Why Deep

    Why Deep? 本文主要围绕Deep这个关键词展开,重点比较了shallow learning和deep learning的区别: shallow:不考虑不同input之间的关联,针对每一种cla ...

  7. 李宏毅线性代数笔记 10: PageRank

    1,pagerank介绍 不依靠网页的内容,依靠网路的结构 2 pagerank举例 举个例子: 每一个状态的变化都是来自于它的入边 经过很多次不同状态信息的传送,最终会达到稳定状态 解得答案为: 3 ...

  8. 李宏毅线性代数笔记9:特征值与特征向量

    1 特征值&特征向量定义 2 特征值&特征向量举例 3 已知特征值,如何求特征向量 其实就是(A-λIn)v的非零解 4 判断一个标量是否是特征值 如果(A-λIn)v=0只有零解,那 ...

  9. 李宏毅线性代数笔记8 :坐标系变换8

    比如,我们要求关于某一条直线的镜面反射: 这个在笛卡尔坐标系里面是很复杂的,但是如果我们换一个坐标系,答案就迎刃而解了 如果两个矩阵,,那么A和B是相似的

最新文章

  1. mahout demo——本质上是基于Hadoop的分步式算法实现,比如多节点的数据合并,数据排序,网路通信的效率,节点宕机重算,数据分步式存储...
  2. python 三维曲线拟合_基于三维数据和参数的Scipy曲线拟合
  3. 解释型语言与编译型语言区别
  4. window创建计划自动启动服务器,WINDOWS2008计划任务无法启动
  5. 手机背景图片在安卓手机上不显示
  6. 每日一题/009/微积分/极限/连续
  7. [ Linux ] 连接FTP及FTP常用配置
  8. 服务器更新维护尚未全部完成,【已开服】11月21日全部服务器更新维护公告
  9. IT基础架构变革,Hitachi Vantara如何解决超融合(HCI)的真正痛点?
  10. Codeforces D. Berserk And Fireball(贪心)
  11. 苹果手表 WatchKit 应用架构简介
  12. w10计算机运行特别卡,win10很卡?教你4大技巧,降低CPU占用,旧电脑运行如飞
  13. 科学计算机的圆周率,科学家用超级计算机计算圆周率,到底有什么意义?真能算出来吗?...
  14. 交换机SVI配置的作用 思科/华为 网络工程
  15. 如何理解接口隔离原则?
  16. Web前端开发之HTML篇
  17. 动态gif图片如何在线做?轻松实现图片在线生成gif
  18. python面试大全 萧井陌_Python就该这么学?!
  19. lettuce MGET性能分析
  20. 用java实现圆柱体体积

热门文章

  1. Python基础(list和tuple)可变集合和‘不可变’集合
  2. android API 参考大全
  3. vectorint[]和vectorint()有什么区别?
  4. python中如果要多次输入文本,关于文本游戏:文本游戏 – 如果语句基于输入文本 – Python...
  5. php in方法,PHP函数in_array()使用详解
  6. 表格某一列不固定其余全固定_如何利用Python一键拆分表格并进行邮件发送~
  7. 为客户端加入输入线程
  8. Qt中的基础图形绘制
  9. python构建网站flask_30分钟搭建Python的Flask框架并在上面编写第一个应用
  10. 2002无法连接mysql阿里云_2002无法登录MySQL服务器