目录

特征值与奇异值

1)特征值

2)奇异值

推荐系统中的SVD算法

SVD算法优缺点


通过SVD对数据的处理,我们可以使用小得多的数据集来表示原始数据集,这样做实际上是去除了噪声和冗余信息,以此达到了优化数据、提高结果的目的。

  1. 隐形语义索引:最早的SVD应用之一就是信息检索,我们称利用SVD的方法为隐性语义检索(LSI)或隐形语义分析(LSA)。
  2. 推荐系统:SVD的另一个应用就是推荐系统,较为先进的推荐系统先利用SVD从数据中构建一个主题空间,然后再在该空间下计算相似度,以此提高推荐的效果。

特征值与奇异值

特征值分解和奇异值分解在机器学习领域都是属于常用的方法,两者有着很紧密的关系。特征值分解和奇异值分解的目的都是一样,就是提取出一个矩阵最重要的特征

1)特征值

首先,要明确的是,一个矩阵其实就是一个线性变换。因为一个矩阵乘以一个向量后得到的向量,其实就相当于将这个向量进行了线性变换,举例如下:

矩阵M乘以一个向量(x,y)的结果是

由于矩阵M是对称的,所以矩阵M相当于一个对x、y轴的方向一个拉伸变换。每一个对角线上的元素将会对一个维度进行拉伸变换,当值>1时是拉长,当值<1时是缩短:

当矩阵M不对称时,矩阵M相当于平面上对一个轴进行的拉伸变换:

矩阵M描述的坐标轴变化如下:

在上图中,可以看到可以用多种方式描述变化的方向,但蓝色的箭头是一个最主要的变化方向。如果我们想要描述好一个变换,那我们就描述好这个变换主要的变化方向就好了。

如果说一个向量v是方阵A的特征向量,将一定可以表示成下面的形式:

λ就被称为特征向量v对应的特征值,一个矩阵的一组特征向量是一组正交向量。 特征值分解是将一个方阵A分解成下面的形式:

其中Q是这个矩阵A的特征向量组成的矩阵;Σ是一个对角阵,每一个对角线上的元素就是一个特征值。

在特征值分解的式子,分解得到的Σ矩阵是一个对角矩阵,里面的特征值是由大到小排列的,而这些特征值所对应的特征向量就是描述了这个矩阵从主要到次要的变化排列。

当矩阵是高维的情况下,那么矩阵可以认为是高维空间下的一个线性变换。这个变换也同样有很多的变换方向,我们通过特征值分解得到的前N个特征向量,那么就对应了这个矩阵最主要的N个变化方向。我们利用这前N个变化方向,就可以近似这个矩阵作出的变换,也就是之前说的,提取这个矩阵最重要的特征。

总结一下,特征值分解可以得到特征值与特征向量。特征值表示的是这个特征到底有多重要,而特征向量表示这个特征具体是什么。可以将每一个特征向量理解为一个线性的子空间,我们可以利用这些线性的子空间干很多的事情。不过,特征值分解也有很多的局限,比如说变换的矩阵必须是方阵

2)奇异值

特征值分解是一个提取矩阵特征很不错的方法,但是它只能作用于方阵。在现实的世界中,我们看到的大部分矩阵都不是方阵,比如说有N个学生,每个学生有M科成绩,这样形成的一个N * M的矩阵就不可能是方阵。我们怎样才能描述这样普通的矩阵的重要特征呢?奇异值分解可以用来干这个事情,奇异值分解是一个能适用于任意的矩阵的一种分解的方法。假设A是一个N * M的矩阵:

通过分解得到的U是一个M * M的方阵(里面的向量是正交的,U里面的向量称为左奇异向量),Σ是一个N * M的矩阵(除了对角线,其他元素都是0,对角线上的元素称为奇异值),V’(V的转置)是一个N * N的方阵,里面的向量也是正交的,V里面的向量称为右奇异向量):

那么奇异值和特征值是怎么对应起来的呢?

首先,我们将一个矩阵A的转置乘上A,将会得到一个方阵:

对这个方阵求特征值可以得到:

σ就是奇异值,u就是左奇异向量,v就是右奇异向量 。

奇异值σ跟特征值类似,在矩阵Σ中也是从大到小排列。而且σ的减少特别的快,在很多情况下,前10%甚至1%的奇异值的和就占了全部的奇异值之和的99%以上了。

也就是说,我们也可以用前r大的奇异值来近似描述矩阵。这里定义一下部分奇异值分解:

其中,r是一个远小于m、n的数。矩阵的乘法看起来如下图所示:

右边的三个矩阵相乘的结果将会是一个接近于A的矩阵,在这儿,r越接近于n,则相乘的结果越接近于A。而这三个矩阵的面积之和要远远小于原始的矩阵A,在存储观点来说,矩阵面积越小,存储量就越小。如果想要压缩空间来表示原矩阵A,通过存下这里的三个矩阵:U、Σ、V就好了。

因为U 和V 向量都是单位化的向量, U的列向量U1,...,Um组成了K空间的一组标准正交基。同样,V的列向量V1,...,Vn也组成了K空间的一组标准正交基。

因此奇异值分解几何意义是:将一个向量从V这组正交基向量的空间旋转到U这组正交基向量的空间,并且按照Σ在各个方向做了缩放,其中缩放的倍数就是奇异值。

推荐系统中的SVD算法

这是一个极其稀疏的矩阵,这里把这个评分矩阵记为R。其中的数值表示user对item的打分,“?”表示未知的需要去预测的分数。SVD在推荐系统中起到的作用就是去预测未知的评分值。

对任意一个矩阵A,都存在它的满秩分解。评分矩阵R也存在这样一个分解,所以可以用两个矩阵P和Q的乘积来表示评分矩阵R:

上个等式中的,U表示用户数,I表示商品数。利用R中的已知评分训练P和Q,使得P和Q相乘的结果最好的拟合已知评分。

那么未知的评分也就可以用P的某一行乘上Q的某一列得到了:

这是预测用户u对商品i的评分,它等于P矩阵的第u行乘上Q矩阵的第i列,这个是最基本的SVD算法。

如何通过已知评分训练得到P和Q的具体数值呢?

首先计算出真实值与测试值的误差:

总的误差平方和为SSE,只要通过训练把SSE降到最小,那么P、Q就能最好地拟合R了:

那又如何使SSE降到最小呢?下面介绍一个常用的局部优化算法:梯度下降法。

如果要最小化目标函数,必须往其负梯度方向搜索,这就是梯度下降法。注意到梯度下降法是一个局部优化算法,也就是说有可能落到局部最优解而不是全局最优解。

SVD两个最重要的计算步骤:

  1. 数据集降维:这里的sigma为对角矩阵(需要利用原来svd返回的sigma向量构建矩阵,构建需要使用count这个值)。U为svd返回的左奇异矩阵,count为我们指定的多少个奇异值,这也是sigma矩阵的维数。
  2. 重构数据集:这里的sigma同样为对角矩阵(需要利用原来svd返回的sigma向量构建矩阵,构建需要使用count这个值),VT为svd返回的右奇异矩阵,count为我们指定的多少个奇异值(可以按能量90%规则选取)。

SVD算法优缺点

SVD算法优点:

1)算法稳定;

2)适用面广;

3)简化数据,减小处理量;

4)去除噪声;

5)算法效果好。

SVD算法缺点:

1)计算代价很大,时间复杂度是3次方的,空间复杂度是2次方的;

2)不能共享内存;

3)很难并行计算;

4)数据转换可能难以理解。

推荐算法之SVD算法相关推荐

  1. 基于音乐/电影/图书的协同过滤推荐算法代码实现(基于用户推荐、基于项目推荐、基于SlopeOne算法推荐、基于SVD算法推荐、混合加权推荐)

    基于音乐/电影/图书的协同过滤推荐算法代码实现(基于用户推荐.基于项目推荐.基于SlopeOne算法推荐.基于SVD算法推荐.加权混合推荐) 一.开发工具及使用技术 MyEclipse10.jdk1. ...

  2. ML之DR之SVD:SVD算法相关论文、算法过程、代码实现、案例应用之详细攻略

    ML之DR之SVD:SVD算法相关论文.算法过程.代码实现.案例应用之详细攻略 目录 SVD算法相关论文 SVD算法过程 1.公式的推导 2.SVD算法两步过程 SVD代码实现 SVD的案例应用 1. ...

  3. 基于SVD算法的电影推荐系统实验

    基于SVD算法的电影推荐系统实验 推荐系统发展简单思维导图 电影推荐系统最初思路 程序实现的功能 程序整体框架 基于关键字搜索推荐模块 搜索推荐模块代码 基于电影名称关键字的推荐模块 基于电影类型搜索 ...

  4. 计算机系统应用的书,基于个性化图书推荐的协同过滤算法

    摘 要本文对基于个性化图书推荐的协同过滤算法的设计方案进行实验,目的是为证实在真实用户的多标准评估过程中怎样产生数据集,从而找到一种科学的算法.并通过图书推荐的应用案例来说明算法,以验证其是否有效. ...

  5. 推荐算法面试集锦--算法模型

    youtubeNet和sdm对比 两者均是基于用户历史行为序列进行召回,均采用ANN向量检索的方式.YoutubeNet网络结构更简单,SDM使用长短期兴趣网络结合的方式,采用多头attention机 ...

  6. 机器学习入门:第十二章 svd算法

    机器学习系列-SVD篇 SVD全称Singular value decomposition,奇异值分解. 线性代数里重要的一种分解形式,其矩阵的特殊含义可以用来做处理线性相关.如在自然语言处理中,对新 ...

  7. svd文章分类 c语言,推荐系统相关算法:SVD

    假如要预测Zero君对一部电影M的评分,而手上只有Zero君对若干部电影的评分和风炎君对若干部电影的评分(包含M的评分).那么能预测出Zero君对M的评分吗?答案显然是能.最简单的方法就是直接将预测分 ...

  8. 【数学和算法】SVD奇异值分解原理、以及在PCA中的运用

    详细的介绍请参考这篇博客:SVD奇异值分解 SVD奇异值分解是用来对矩阵进行分解,并不是专门用来求解特征值和特征向量. 而求解特征值和求解特征向量,可以选择使用SVD算法进行矩阵分解后,再用矩阵分解后 ...

  9. 推荐几个机器学习算法及应用领域相关的中国大牛:

    推荐几个机器学习算法及应用领域相关的中国大牛: 作者: just1do1it (站内联系TA)    发布: 2012-08-15 李航:http://research.microsoft.com/e ...

最新文章

  1. String.Format()方法
  2. 基于asp.net + easyui框架,一步步学习easyui-datagrid——界面(一)
  3. 记一次 webpack 打包体积优化
  4. 【数据结构】之算法效率的度量
  5. Flex 按钮添加图标
  6. 确认要从桌面删除计算机,确定要从界面上删除 我的电脑 ...
  7. centos6.5下的mysql5.6.30安装
  8. 建议把英语改成选修的计算机老师,中小学“变动”,英语改为副科?老师没意见家长却愁眉不展...
  9. 广实1592: 1.6-06:校门外的树
  10. layer右下脚弹窗
  11. 写一简单kernel心得
  12. 在校生如何做一个可以让简历有亮点的java项目?
  13. 安川焊接机器人做圆弧运动编程_安川机器人示教器编程插补方式详细介绍--安川机器人...
  14. 携程机票业务数据仓库实践
  15. 一生要看的50部经典电影
  16. 百度 android 笔试题库,百度科目一考试题库
  17. WPS公式编辑器的MTExtra字体无效,将无法显示和打印某些字符
  18. linux中的nobody
  19. How to deal with blurred picture
  20. android 中文开发文档

热门文章

  1. ASP.NET Core MVC 项目 Autofac
  2. 小程序源码:独家修复登录接口社区论坛微信小程序源码下载-支持多种发帖模式超强社区
  3. Python解决数学建模问题:赛程安排
  4. ui界面自动生成标注html,UI自动标注神器--标记狮导出自动标注教程
  5. IDEA实现SpringBoot自定义Starters
  6. Kaldi语音识别技术(五) ----- 特征提取
  7. HashMap源码和并发异常问题分析
  8. 2023高薪前端面试题(一、前端基础——HTTP/HTML/浏览器)
  9. 月入5万,计算机专业提升就靠它了
  10. dropzone上传插件详细教程,含demo