svd奇异值分解_奇异值分解SVD

3278f1f53260bb44a575a0bd229ae47d.png点击上方蓝字关注我们c873785897227372dcdad2ea0730c5ce.gif

奇异值分解(SVD)在计算机视觉中有着广泛的应用,如数据降维、推荐系统、自然语言处理等。本文是介绍SVD的数学计算过程,并从SVD的性质说明其应用的原理。

630a65915b9dafab207597ed0f38977c.png

01特征值与特征向量

奇异值分解(SVD)与特征分解类似,是将矩阵分解为由奇异值(特征值)和特征向量表示的矩阵之积的方法。因而,在介绍SVD前有必要先介绍特征值、特征向量和特征分解。

由线性代数知识可知特征值与特征向量的定义:

                        Aα = λα                          

其中:A是nxn矩阵,λ是特征值,α是特征值对应的n维特征向量。通过线性代数知识可以求解特征值和特征向量

02特征分解

特征分解是将矩阵分解为由特征值和特征向量表示的矩阵之积的方法。如大小为 nxn 的矩阵 A 可以用如下特征分解表示:

                         A=WΣW-1                               

其中:W是n个特征向量组成的nxn矩阵,Σ是以n个特征值为主对角线的nxn矩阵。一般情况下需要将W矩阵中n个特征向量标准化,即 ||ωi||2=1,或 ωiTωi=1,那么W矩阵为酉矩阵,即 WTW=I,WT=W-1 。则矩阵A的特征分解可以写为:

                        A=WΣWT                              

由此可见,我们只需计算矩阵A的特征值和特征向量就能够实现矩阵分解

03奇异值分解

上述特征分解是对大小为nxn的矩阵(方阵)的分解,对于非方阵的求解则需要采用SVD。假设A是mxn的矩阵,那么其相应的奇异值分解可表示为:

                        A=UΣVT                                   

其中:U是AAT矩阵的特征向量组成的mxm的矩阵,Σ是以奇异值 σ 为主对角线的mxn的矩阵,V是ATA矩阵的特征向量组成的nxn的矩阵,U,V均为酉矩阵,即UUT=I,VVT=I。

由此可以看出SVD分解后的矩阵计算方法与特征分解的计算方法略有不同。对于U、V矩阵可分别计算AAT矩阵的特征向量和 ATA 矩阵的特征向量来实现,但 Σ 矩阵包含奇异值 σ ,那么我们需要说明奇异值的计算。

由SVD分解的定义可知:

                              A=UΣVT                            

因为V为酉矩阵,即:VTV=I,那么:

                      AV=UΣVTV=UΣ                    

定义 V 矩阵由特征向量 νi (称为右奇异向量)组成, U 矩阵由特征向量 μi (称为左奇异向量)组成,那么

                           Aν= σμi                         

因为 νi 和 μi 可以由前述过程得到,所以通过此式能够得到奇异值,从而构建 Σ 矩阵。注意其中 i 的最大值是min( n, m)。

04SVD性质

SVD分解中奇异值 σ 类似于特征分解中的特征值 λ,在 Σ 矩阵中依据 σ 大小排列后,可发现 σ 数值减少趋势明显,通常数值较大的 σ 之和占据了全部奇异值之和的绝大部分比例。因而,我们可以使用前 k 个最大的奇异值和对应的左右奇异向量来近似描述矩阵,即:

     Amn = UmmΣmnVnnT ≅ UmkΣkkVknT     

其中k远小于n,那么矩阵A可以使用小矩阵表示。因为SVD这个性质,因而SVD可用于降维、去噪等。

END

4c0d9095c5d12b36976224b9a5f4aa62.png扫码关注我们臭皮匠快速编程

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/504888.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

python turtle画房子详细解释_[宜配屋]听图阁

我就废话不多说了,直接上代码吧!import turtletturtle.Turtle()turtle.Turtle().screen.delay(0)tleftturtle.Turtle()#第一部分t.penup()t.goto(0,0)t.pendown()t.left(20)t.forward(110)t.left(25)t.forward(40)t.left(100)t.circle(180,20)t.right(12…

简易航空订票系统_四川航空APP全新升级改版,三大亮点提升订票体验

成都2015年10月23日电 /美通社/ -- 四川航空发布手机APP全新的3.0版本,不仅针对界面风格做了全新改变,在iOS9、安卓系统上的展示更加炫丽;而且在机票预订、航班动态、特价机票方面均做了大幅升级,会员服务也更加贴心。对于有机票需…

python可视化分析网易云音乐评论_网易云音乐热门评论api分析

网上有现成的例子我就扒过来了!!title: 网易云评论api分析date: 2018-12-24 20:54:46tags: [python]网易云音乐是个好地方,里面各个都是人才,特别是评论区……所以我就想把评论爬下来看看,下面记录一下分析api的过程与…

python 功能化模块_【软件测试教程】Python模块化以及内置模块的使用

一:什么是模块模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py。模块可以被别的程序引入,以使用该模块中的函数等功能。二:模块类型1:自定义模块由编程人员自己写的模块。自定义模块时要注意命名&#xff0…

spring 上下文_一次性教你彻底理解 Spring容器和应用上下文!

作者:陈本布衣www.cnblogs.com/chenbenbuyi有了Spring之后,通过依赖注入的方式,我们的业务代码不用自己管理关联对象的生命周期。业务代码只需要按照业务本身的流程,走啊走啊,走到哪里,需要另外的对象来协助…

oracle plsql 到处dbf_plsql 导出oracle数据库

plsql 导出数据库有两个问题,一个是只导出结构,一个是导出表结构加数据这样的,首先人家让我导成sql语句这不是简单,首先打开PLSQL一、导出结构1、然后tools->Export User Objects..然后出来一片空白2、要选择哪个User3、上面会…

python爬取百度百科搜索结果_用Python抓取百度搜索结果,python,爬取,的

前言前几天爬的今天整理了一下发现就两个需要注意的点一是记得用带cookie的方式去访问,也就是实例化requests.session()二是转化一下爬取到的url,访问爬到的url得到返回的Location值,该值便是真实的地址(如果你不是要爬url当我没说)知道了这两…

spring aop设计模式_Spring框架中设计模式的运用

设计模式大家可能随口就能说出总共有23种,但是具体怎么用,或者在常用的组建中有哪些体现,这时候不一定说的上来了。接下来几篇文章,我们一起深入理解。首先我们一起了解下常用的组建中是怎么运用的,比如 JDK、Sring、M…

使用yum命令安装mysql_Linux Centos 下使用yum 命令安装mysql实现步骤

linux centos 下使用yum 命令安装mysql实现步骤1. 查看服务器中有没有安装过mysql1. 查看有没有安装包:yum list mysql*#移除已经安装的mysqlyum remove mysql mysql-server mysql-libs compat-mysql51rm -rf /var/lib/mysqlrm /etc/my.cnf2. 查看是否还有mysql软件:rpm -qa|gr…

sql unicode转中文_SELECT语句《SQL必知必会》

数据库中有哪些数据类型?数据库中最常用对数据类型有三种:Text(文本)、Number(数字)和 Date/Time。文本类型:即字符串,如“nameasdas”数字类型:十进制数字,如…

mpython 直接访问_如何从python代码中直接访问Android的Service

在Kivy中,通过pyjnius扩展可以间接调用Java代码,而pyjnius利用的是Java的反射机制。但是在Python对象和Java对象中转来转去总让人感觉到十分别扭。好在android提供了binder这个进程间通信的功能,Java中的Service也是基于Binder的C代码封装来实…

python中attr_python中hasattr()、getattr()、setattr()函数的使用

引言:在阅读高手写的代码时,有很多简写的形式,如果没有见过还真的看不太懂是什么意思,其中一个比较常用的就是getattr()用来调用一个类中的变量或者方法,相关联的hasattr()、getattr()、setattr()函数的使用也一并学习…

python前n项和存为一个数组_在Python中存储多个数组

我正在编写一个程序来模拟像Gallup或Rasmussen这样的公司每天发布的实际投票数据:www.gallup.com和www.rassmussenreports.com我正在使用强力方法,计算机生成一些随机的每日轮询数据,然后计算三天平均值,以查看随机数据的平均值是否与民意测验数字相匹配. (大多数公…

织梦数据库改mysql前缀_织梦快速批量修改MYSQL数据库表前缀与表名实例操作

这篇文章主要为大家详细介绍了织梦快速批量修改MYSQL数据库表前缀与表名实例操作,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,有需要的朋友可以收藏方便以后借鉴。我们在安装织梦系统的时候,有一次批量修改mysql数据库表前缀的机会&am…

python实时绘图暂停_Python实时绘图

我在两个数组中获取了一些数据:一个用于时间,一个用于值.当我达到1000点时,我触发一个信号并绘制这些点(x 时间,y 值).我需要在前面的图中保持相同的数字,但只是一个合理的数字,以避免减慢过程.例如,我想在我的图表上保留10,000点.matplotlib交互式绘图工作正常,但我…

python 读文件写数据库_python读文件写数据库

Python 读文件,写数据库Python 读文件打开文件Python读写文件在计算机语言中被广泛的应用,如果你想了解其应用的程序,以下的文章会给你详细的介绍相关内容,会你在以后的学习的过程中有所帮助,下面我们就详细介绍其应用…

python怎么用gamma函数_如何通俗的理解伽马(gamma)函数

如何通俗的理解伽马(gamma)函数 - 直觉,求导和示例我为什么要在乎garmma分布?使用伽马函数定义了许多概率分布,例如伽马分布,Beta分布,狄利克雷分布,卡方分布和学生t分布等。 对于数据科学家,机…

mysql支持表情输入_让MySQL支持Emoji表情 mysql 5.6

在做微信公众号开发过程中,经常碰到用户的昵称中有表情,在MySQL保存时常用的utf8 字符集根本无法存储表情,提示错误如下:java.sql.SQLException: Incorrect string value: \xF0\x9F\x92\x94 for column nick_name at row 1at com.…

graphpad如何检测方差齐_如何选择方差分析的多重比较方法?资料集锦

欢迎订阅SPSS训练营号方差分析时,如果因素主效应有显著影响,则需要对因素水平进行两两比较,以确认因素水平间的具体差异。这个过程也叫作多重比较。SPSS提供14种用于方差齐次的多重比较方法,还有4种方差不齐情况下的多重比较方法&…

编程真好玩python_(两本套)编程真好玩+教孩子学编程(Python语言版)

第1 章 Python 基础:认识环境 1 11 认识Python 3 12 用Python 编写程序 5 13 运行Python 程序 5 14 本章小结 6 15 编程挑战 7 第2 章 海龟作图:用Python 绘图 9 21 **个海龟程序 10 211 程序是如何工作的 10 212 发生了什么 12 22 旋转的海龟 13 23 海龟…