前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >关于SVD的应用详解

关于SVD的应用详解

作者头像
张凝可
发布2019-08-21 22:46:57
1.1K0
发布2019-08-21 22:46:57
举报
文章被收录于专栏:技术圈

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/qq_27717921/article/details/78230699

关于SVD

SVD (Sigular Value Decomposition)奇异值分解,主要用于降维、压缩、隐性语义以及推荐系统上。要了解奇异值分解,首先要了解特征值分解,通过求解一个矩阵的特征值,我们可以把一个矩阵通过映射、拉伸或者压缩投射到一个新的空间中,相对于原空间来讲,投射到的新空间的维度会增加(一般是从一个二维空间向高维空间转换)在高维空间中的维度我们就能提取到一个矩阵的主要特征。奇异值也是这样,只不过特征值的特征提取只能针对与方阵而言,而奇异值并没有这个要求可以获得m*n矩阵的特征(m不等于n)。 特征分解

这里写图片描述
这里写图片描述

满足上式的lambda 为特征值,对应的向量x为特征向量。 A矩阵可以表示为:

这里写图片描述
这里写图片描述

k为A矩阵特征值的个数,U矩阵为正交矩阵。 A可以分解为特征向量加和的形式。最终Ax则演变为

这里写图片描述
这里写图片描述

x则会被经过拉长、压缩等操作映射到一个A的特征向量作为维度方向的空间中。 同样的我们再来看SVD。 SVD的适用性更强,不要求必须为方阵,在日常生活中可能很多情况都不能满足方阵,比如用户对菜品的打分,在一般情况下,菜品的维度要比用户的维度小很多,不能满足特征值分解对矩阵为方阵的条件,在这种情况下一般使用的就是奇异值分解。 奇异值的计算

这里写图片描述
这里写图片描述

为方阵,求这个方阵的特征值的平方根对应为矩阵A的奇异值。 同样的SVD还可以用来求解伪逆,这里推荐一篇博客。 SVD矩阵分解后

这里写图片描述
这里写图片描述

k是一个远小于m,n的整数。 U就是左奇异向量,VT就是右奇异向量。奇异值σ跟特征值类似,在矩阵Σ中也是从大到小排列,而且σ的减少特别的快,在很多情况下,前10%甚至1%的奇异值的和就占了全部的奇异值之和的99%以上了。

SVD的压缩存储

因此SVD可以应用在图片压缩上,原始图像假设为32*32=1024像素的,那么如果我们不进行压缩存储,那么我们就需要存储1024个像素点,但是如果我们采用SVD压缩存储,k=2的时候就能获得图像的90%以上的能量,那么我们只需要存储32*2+32*2+2=130个数字,通过

这里写图片描述
这里写图片描述

就能近似的还原原图像,并且实现了将近十几倍的压缩比。

SVD的隐性语义分析

对文章进行分类可以利用余弦相似度来计算,但是通常我们处理的文章数量十分大,词语非常多,可能会达到百万级别上,如果按照两两文章计算相似度计算量是非常大,而SVD矩阵分解能有效的降低计算复杂度。 首先有一个文章-词的矩阵A,维度为M*N,M为文章的个数,N为M个文章形成的整个语义库的大小。A表示了文章和词的关联程度。Ai,j表示第 j 个词在第 i 篇文章中出现的加权词频(比如,TF/IDF)。 SVD矩阵分解分解为3个矩阵

这里写图片描述
这里写图片描述

SVD分解不仅能减少存储量和计算量,并且这三个矩阵还有着十分明确的物理含义。第一个矩阵X中的每一行表示意思相关的一类词,其中的每个非零元素表示这类词中每个词的重要性(或者说相关性),数值越大越相关。最后一个矩阵Y中的每一列表示同一主题一类文章,其中每个元素表示这类文章中每篇文章的相关性。中间的矩阵则表示类词和文章雷之间的相关性。因此,我们只要对关联矩阵A进行一次奇异值分解,我们就可以同时完成了近义词分类和文章的分类。(同时得到每类文章和每类词的相关性)

SVD 的推荐系统

基于SVD的推荐系统要结合向量相似度的计算度的方法,找到与待推荐用户相似的用户的项目评分情况进行推荐(基于用户的协同过滤方法推荐)或者找到与待推荐用户评分高的项目相似的项目进行推荐(基于内容的协同过滤方法推荐)。所以如果我们要想进行协同过滤,需要经过向量相似度计算,而用户与用户的向量相似度计算或者是项目与项目的向量相似度计算都要涉及到获得用户的潜在特征向量和项目的潜在特征向量,而SVD的矩阵分解获得U矩阵和V矩阵的物理的含义无疑就是这样的。

这里写图片描述
这里写图片描述

U矩阵行向量表示用户u的k维特征表示,V矩阵的行向量表示项目i的k维特征表示。我们可以用U矩阵的任意两行行向量计算用户u1和u2的相似度,或者用V矩阵的任意两行行向量来计算项目i1和i2的相似度。计算向量相似度的公式有很多,这里用的为余弦相似度。 当我们拿到一个新的用户u3时,或许u3并没有对所有的项目打分或者是评价,那么这个行向量就是稀疏的,也就说N个元素的行向量中为0的元素非常多,我们希望能用协同过滤的方法推测出用户u3对这些缺失值的评分情况。 假设u3评分的行向量为w,w是稀疏的,首先我们要把w转换为低维空间

这里写图片描述
这里写图片描述

在U矩阵的m个用户分别与wnew计算余弦相似度,将与用户u3相似度高的用户打分的项目并且用户u3没有打分的项目推荐给用户u3或者作为用户u3对此项目的打分。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017年10月13日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 关于SVD
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档