SVD的概念以及应用
第十四章 利用SVD简化数据
一.引言
SVD的全称是奇异值分解,SVD的作用是它能够将高维的数据空间映射到低维的数据空间,实现数据约减和去除噪声的功能。
SVD的特点主要有以下几个方面:
1.它的优点:去除噪声,简化数据,提高算法的结果
2.它的缺点:数据的转化难以理解
3.它适用的数据:数值型数据
二.SVD的作用
SVD经常用于信息检索领域,在信息检索中我们将使用了SVD方法的数据文档数据处理方式称之为隐性语义索引。隐性语义索引,它将一个文档分解为了词和词频,能够利用然后分解得到的矩阵进行奇异值分解从而或者文档的主题与概念。同时它还能够实现同义词的概念映射。
SVD也常常用于推荐系统,通过SVD对数据的约减将原始数据进行空间映射,进行降维,得到的数据可以被定义为另一种概念,可以看做是一种概念抽象的过程。
三.矩阵分解
SVD将一个矩阵(m*n)分解成三个矩阵的乘积,第一个矩阵是m*m,第二个矩阵是m*n(它是一个对角矩阵,只有对角线的元素才可能为非零,并且它的值是按照从到排列的),第三个矩阵是n*n;其中的第二个矩阵就是所说的奇异值。奇异值它能够在一定的程度上表现数据的特征,这一点和PCA中所说的特征值的概念很像,实际上奇异值和特征值也确实存在着联系。Data*dataT的特征值的开方就是data的奇异值。我们按照从大到小的顺序对奇异值进行排序,那么有可能出现奇异值为0的情况,那么这时候就说明该行的特征是多余的,我们在计算的时候就可以忽略它,这样就能够实现特征约减。
四.利用python实现SVD
利用Python事项SVD非常的简单,因为Python中的numpy中有现成的库可以调用svd.
以下是python代码:

利用我们在知道奇异值之后,对于保留多少个奇异值,有很多种方法。第一种方法是比较常用的,也就是将所有的奇异值进行平方,然后依次把它们加起来知道它们的和达到总值的百分之九十,那么这些奇异值就是我们想要保留的奇异值,这种方法称之为90%energy save。另一种更加直观的方法是我们保留前若干个特征值,比如我们有一万条数据那么我们就保留前2000到三千个特征值。
五.基于协同过滤的推荐引擎
所谓的协同过滤就是利用用户和其他用户进行对比实现推荐。这个对比我们就需要用到相似度的概念,比如两个人喜欢的电影的相似度很高,那么其中一个人看过的电影就可以推荐给另一个没看过该电影的人看。
相似度的度量方式有三种:一种是1/(1+距离),第二种是皮尔逊相关系数,但是皮尔逊相关系数的值是-1到1,要对它进行0到1的归一化,那么就变成了1/2+1/2*皮尔逊相关系数值。第三种方式是余弦相似度。
以下我们用pytnon了解这三种度量方式的代码实现:

在计算相似度的时候,我们将行向量之间的相似度称之为用户相似度,将列向量之间的额相似度称之为物品相似度,具体使用用户相似度还是物品相似度取决于那个的数量更少。对于一般的推荐系统来说,商品的数量会明显的更少,所以我们倾向于选择使用商品相似度。
六.构建一个食物的推荐系统
要构建一个食物的推荐系统,要分成两步:1.首先我们需要根据相似度用户对于还未吃过的食物的评分; 2.我们选出未评分的食物中,评分靠前的前几个作为我们的推荐。
以下是具体的代码:第一个步骤:

第二个步骤:

通过以上两个步骤,我们就可以得到推荐的食物的编号,和用户对它的可能评分。
这个算法还存在着一些不足,首先在实际中并不需要在每次计算得分的时候计算一次SVD;其次在计算物体相似度的时候,有很多结果是重复的,因此我们可以在计算的时候保存计算的结果,以便下一次直接调用;最后就是它可能遇到冷启动的问题。所谓的冷启动,指的是当我们新加入一个物品时,因为之前没有任何人为他评过分,因此没有物品和它相似,所以就没有办法让这个物品成为有效的物品推荐给可能喜欢它的用户。解决冷启动的问题很难,我们现在可以用基于内容的推荐来规避这个问题。
六.总结
SVD是一种去除噪声和降维的实用方法,我们可以通过SVD获取数据中的重要特征,通过保留矩阵百分之八十到百分之九十的能量,我们就可以保存重要的特征和去除噪声。SVD可以用于搜索引擎,它能够基于用户和行为数据进行协同过滤。协同过滤的核心是相似度计算,相似度的度量方式有很多种,这里列举了常用的三种。
在大数据中应用SVD技术有点困难,我们可以使用离线处理的方式,在本地先进行SVD计算,然后再应用它。
SVD的概念以及应用的更多相关文章
- 从矩阵(matrix)角度讨论PCA(Principal Component Analysis 主成分分析)、SVD(Singular Value Decomposition 奇异值分解)相关原理
0. 引言 本文主要的目的在于讨论PAC降维和SVD特征提取原理,围绕这一主题,在文章的开头从涉及的相关矩阵原理切入,逐步深入讨论,希望能够学习这一领域问题的读者朋友有帮助. 这里推荐Mit的Gilb ...
- 数据科学中需要知道的5个关于奇异值分解(SVD)的应用
介绍 "Another day has passed, and I still haven't used y = mx + b." 这听起来是不是很熟悉?我经常听到我大学的熟人抱怨 ...
- Notes About Singular Value Decomposition
A brief summary of SVD: An original matrix Amn is represented as a muliplication of three matrices: ...
- SVD奇异值分解的基本原理和运用
SVD奇异值分解: SVD是一种可靠的正交矩阵分解法.可以把A矩阵分解成U,∑,VT三个矩阵相乘的形式.(Svd(A)=[U*∑*VT],A不必是方阵,U,VT必定是正交阵,S是对角阵<以奇异值 ...
- Matrix Factorization SVD 矩阵分解
Today we have learned the Matrix Factorization, and I want to record my study notes. Some kownledge ...
- PCA本质和SVD
一.一些概念 线性相关:其中一个向量可以由其他向量线性表出. 线性无关:其中一个向量不可以由其他向量线性表出,或者另一种说法是找不到一个X不等于0,能够使得AX=0.如果对于一个矩阵A来说它的列是线性 ...
- 数值分析之奇异值分解(SVD)篇
在很多线性代数问题中,如果我们首先思考若做SVD,情况将会怎样,那么问题可能会得到更好的理解[1]. --Lloyd N. ...
- 强大的矩阵奇异值分解(SVD)及其应用
版权声明: 本文由LeftNotEasy发布于http://leftnoteasy.cnblogs.com, 本文可以被全部的转载或者部分使用,但请注明出处,如果有问题,请联系wheeleast@gm ...
- 利用奇异值分解(SVD)简化数据
特征值与特征向量 下面这部分内容摘自:强大的矩阵奇异值分解(SVD)及其应用 特征值分解和奇异值分解在机器学习领域都是属于满地可见的方法.两者有着很紧密的关系,在接下来会谈到,特征值分解和奇异值分解的 ...
随机推荐
- C语言的布尔类型(_Bool)
也许很多人都和我一样,不知道现在的C语言已经有了布尔型:从C99标准开始,类型名字为"_Bool". 在此之前的C语言中,使用整型int来表示真假.在输入时:使用非零值表示真:零值 ...
- Struts Chain ClassCastException Aop
我们知道struts的restult type 有很多,但主要就是四种 dispatch,rediret,chain,drdirectaction 要让数据从一个action传到另一个action,就 ...
- (三十四)NavigationController初步
为了了解底层,首先不基于UIWindow而基于UIWindow来创建App. 由于Xcode6没有以前的基于UIWindow的空项目,所以选择SingleView,然后删除storyboard,移除B ...
- python爬虫 - Urllib库及cookie的使用
http://blog.csdn.net/pipisorry/article/details/47905781 lz提示一点,python3中urllib包括了py2中的urllib+urllib2. ...
- JAVA之旅(一)——基本常识,JAVA概念,开发工具,关键字/标识符,变量/常量,进制/进制转换,运算符,三元运算
JAVA之旅(一)--基本常识,JAVA概念,开发工具,关键字/标识符,变量/常量,进制/进制转换,运算符,三元运算 Android老鸟重新学一遍JAVA是什么感觉?枯燥啊,乏味啊,而且归纳写博客,都 ...
- (五)超级猜图Demo引出的细节
第一部分: 1.按钮的细节,设置背景和前景图片后,要使得背景显示出来,可以设置内边距,影响内部内容. 显示 图片+文字,用button更简单. 问题是,如果不想按钮被点击,在属性面板取消勾选User ...
- 自己动手写web框架----1
本文可作为<<自己动手写struts–构建基于MVC的Web开发框架>>一书的读书笔记. 一个符合Model 2规范的web框架的架构图应该如下: Controller层的Se ...
- Java进阶(五十一)Could not create the view: An unexpected exception was thrown
Java进阶(五十一)Could not create the view: An unexpected exception was thrown 今天打开Myeclipse10的时候,发现server ...
- mongodb系列之--mongodb 主从配置与说明
一.为什么要配置mongodb的主从: 1.做主从,可以说是做数据的备份,有利于故障的恢复 2.做主从,可以做到读写分离,主节点负责写操作,从节点负责读操作,这样就把读写压力分开,保证系统的稳定性. ...
- LeetCode之“链表”:Linked List Cycle && Linked List Cycle II
1.Linked List Cycle 题目链接 题目要求: Given a linked list, determine if it has a cycle in it. Follow up: Ca ...