参考自:http://www.igvita.com/2007/01/15/svd-recommendation-system-in-ruby/

其实说参考也不准确,准确地说应该是半翻译半学习笔记。

仔细整理一遍,感觉还是收获很大的。

线性代数相关知识:

任意一个M*N的矩阵A(M行*N列M>N),可以被写成三个矩阵的乘积:

1. U:(M行M列的列正交矩阵)

2. S:(M*N的对角线矩阵,矩阵元素非负)

3. V:(N*N的正交矩阵的倒置)

即 A=U*S*V'(注意矩阵V需要倒置)

直观地说:

假设我们有一个矩阵,该矩阵每一列代表一个user,每一行代表一个item。

如上图,ben,tom….代表user,season n代表item。

矩阵值代表评分(0代表未评分):

如 ben对season1评分为5,tom对season1 评分为5,tom对season2未评分。

机器学习和信息检索:

机器学习的一个最根本也是最有趣的特性是数据压缩概念的相关性。

如果我们能够从数据中抽取某些有意义的感念,则我们能用更少的比特位来表述这个数据。

从信息论的角度则是数据之间存在相关性,则有可压缩性。

SVD就是用来将一个大的矩阵以降低维数的方式进行有损地压缩。

降维:

下面我们将用一个具体的例子展示svd的具体过程。

首先是A矩阵。

A =5     5     0     55     0     3     43     4     0     30     0     5     35     4     4     55     4     5     5

(代表上图的评分矩阵)

使用matlab调用svd函数:

[U,S,Vtranspose]=svd(A)U =-0.4472   -0.5373   -0.0064   -0.5037   -0.3857   -0.3298-0.3586    0.2461    0.8622   -0.1458    0.0780    0.2002-0.2925   -0.4033   -0.2275   -0.1038    0.4360    0.7065-0.2078    0.6700   -0.3951   -0.5888    0.0260    0.0667-0.5099    0.0597   -0.1097    0.2869    0.5946   -0.5371-0.5316    0.1887   -0.1914    0.5341   -0.5485    0.2429S =17.7139         0         0         00    6.3917         0         00         0    3.0980         00         0         0    1.32900         0         0         00         0         0         0Vtranspose =-0.5710   -0.2228    0.6749    0.4109-0.4275   -0.5172   -0.6929    0.2637-0.3846    0.8246   -0.2532    0.3286-0.5859    0.0532    0.0140   -0.8085

分解矩阵之后我们首先需要明白S的意义。

可以看到S很特别,是个对角线矩阵。

每个元素非负,而且依次减小,具体要讲明白元素值的意思大概和线性代数的特征向量,特征值有关。

但是可以大致理解如下:

在线性空间里,每个向量代表一个方向。

所以特征值是代表该矩阵向着该特征值对应的特征向量的方向的变化权重。

所以可以取S对角线上前k个元素。

当k=2时候即将S(6*4)降维成S(2*2)

同时U(6*6),Vtranspose(4*4)相应地变为 U(6*2),Vtranspose(4*2).

如下图(图片里的usv矩阵元素值和我自己matlab算出的usv矩阵元素值有些正负不一致,但是本质是相同的):

此时我们用降维后的U,S,V来相乘得到A2

A2=U(1:6,1:2)*S(1:2,1:2)*(V(1:4,1:2))' //matlab语句
A2 =5.2885    5.1627    0.2149    4.45913.2768    1.9021    3.7400    3.80583.5324    3.5479   -0.1332    2.89841.1475   -0.6417    4.9472    2.38465.0727    3.6640    3.7887    5.31305.1086    3.4019    4.6166    5.5822

此时我们可以很直观地看出,A2和A很接近,这就是之前说的降维可以看成一种数据的有损压缩。

接下来我们开始分析该矩阵中数据的相关性。

我们将u的第一列当成x值,第二列当成y值。即u的每一行用一个二维向量表示,同理v的每一行也用一个二维向量表示。

如下图:

从图中可以看出:

Season5,Season6特别靠近。Ben和Fred也特别靠近。

同时我们仔细看一下A矩阵可以发现,A矩阵的第5行向量和第6行向量特别相似,Ben所在的列向量和Fred所在的列向量也特别相似。

所以从直观上我们发现U矩阵和V矩阵可以近似来代表A矩阵,换据话说就是将A矩阵压缩成U矩阵和V矩阵,至于压缩比例得看当时对S矩阵取前k个数的k值是多少。

到这里,我们已经完成了一半。

寻找相似用户:

依然用实例来说明:

我们假设,现在有个名字叫Bob的新用户,并且已知这个用户对season n的评分向量为:[5 5 0 0 0 5]。(此向量为列向量)

我们的任务是要对他做出个性化的推荐。

我们的思路首先是利用新用户的评分向量找出该用户的相似用户。

如上图(图中第二行式子有错误,Bob的转置应为行向量)。

对图中公式不做证明,只需要知道结论,结论是得到一个Bob的二维向量,即知道Bob的坐标。

将Bob坐标添加进原来的图中:

然后从图中找出和Bob最相似的用户。

注意,最相似并不是距离最近的用户,这里的相似用余弦相似度计算。(关于相似度还有很多种计算方法,各有优缺点)

即夹角与Bob最小的用户坐标。

可以计算出最相似的用户是ben。

接下来的推荐策略就完全取决于个人选择了。

这里介绍一个非常简单的推荐策略:

找出最相似的用户,即ben。

观察ben的评分向量为:【5 5 3 0 5 5】。

对比Bob的评分向量:【5 5 0 0 0 5】。

然后找出ben评分过而Bob未评分的item并排序,即【season 5:5,season 3:3】。

即推荐给Bob的item依次为 season5 和 season3。

最后还有一些关于整个推荐思路的可改进的地方:

1.

svd本身就是时间复杂度高的计算过程,如果数据量大的情况恐怕时间消耗无法忍受。 不过可以使用梯度下降等机器学习的相关方法来进行近似计算,以减少时间消耗。

2.

相似度计算方法的选择,有多种相似度计算方法,每种都有对应优缺点,对针对不同场景使用最适合的相似度计算方法。

3.

推荐策略:首先是相似用户可以多个,每个由相似度作为权重来共同影响推荐的item的评分。

SVD在推荐系统中的应用【推荐】相关推荐

  1. SVD在推荐系统中的应用详解以及算法推导

    转载请声明出处http://blog.csdn.net/zhongkejingwang/article/details/43083603 前面文章SVD原理及推导已经把SVD的过程讲的很清楚了,本文介 ...

  2. NMF和SVD在推荐系统中的应用(实战)

    本文以NMF和经典SVD为例,讲一讲矩阵分解在推荐系统中的应用. 数据 item\user Ben Tom John Fred item 1 5 5 0 5 item 2 5 0 3 4 item 3 ...

  3. 《推荐系统笔记(六)》svd在推荐系统中的应用推广(FunkSVD,BiasSVD以及SVD++)及简单实战(surprise库)

    前言 奇异值分解(SVD)可以将任意矩阵分解成两个方阵和一个对角矩阵的乘积.借助于SVD,我们可以将推荐系统中的用户-评分矩阵进行分解,通过推广的SVD方法(FunkSVD,BiasSVD和SVD++ ...

  4. SVD在推荐系统中的应用

    http://yanyiwu.com/work/2012/09/10/SVD-application-in-recsys.html 10 Sep 2012 参考自:http://www.igvita. ...

  5. 【转载】SVD在推荐系统中的应用

    原文链接:https://yanyiwu.com/work/2012/09/10/SVD-application-in-recsys.html 转载于:https://www.cnblogs.com/ ...

  6. 自己动手写一个推荐系统,推荐系统小结,推荐系统:总体介绍、推荐算法、性能比较, 漫谈“推荐系统”, 浅谈矩阵分解在推荐系统中的应用...

    自己动手写一个推荐系统 废话: 最近朋友在学习推荐系统相关,说是实现完整的推荐系统,于是我们三不之一会有一些讨论和推导,想想索性整理出来. 在文中主要以工程中做推荐系统的流程着手,穿插一些经验之谈,并 ...

  7. 推荐系统中的前沿技术研究与落地:深度学习、AutoML与强化学习 | AI ProCon 2019...

    整理 | 夕颜 出品 | AI科技大本营(ID:rgznai100) 个性化推荐算法滥觞于互联网的急速发展,随着国内外互联网公司,如 Netflix 在电影领域,亚马逊.淘宝.京东等在电商领域,今日头 ...

  8. 自然语言处理技术(NLP)在推荐系统中的应用 原2017.06.29人工智能头条 作者: 张相於,58集团算法架构师,转转搜索推荐部负责人,负责搜索、推荐以及算法相关工作。多年来主要从事推荐系统以及机

    自然语言处理技术(NLP)在推荐系统中的应用 原2017.06.29人工智能头条 作者: 张相於,58集团算法架构师,转转搜索推荐部负责人,负责搜索.推荐以及算法相关工作.多年来主要从事推荐系统以及机 ...

  9. 推荐系统系列教程之十一:那些在Netflix Prize中大放异彩的推荐算法

    编者按:之前推出了<推荐系统系列教程>,反响不错,前面已经推出了十期,今天按约推出第十一期:那些在Netflix Prize中大放异彩的推荐算法.希望朋友们多点"在看" ...

  10. 【推荐实践】腾讯推荐系统中的深度匹配模型

    省时查报告-专业.及时.全面的行研报告库 省时查方案-专业.及时.全面的营销策划方案库 [免费下载]2022年6月热门报告合集从零开始了解推荐系统全貌机器学习在B站推荐系统中的应用实践微信视频号实时推 ...

最新文章

  1. 模型-视图-提供器 模式
  2. 3班的第一次模拟面试
  3. centos下CMAKE源码安装MYSQL5.5.23
  4. torchtext用法
  5. mac nginx映射ip和端口_南京课工场IT培训:Nginx虚拟主机 (基于域名 基于端口 基于ip)...
  6. 1%大气密度也能飞?NASA把无人机送上火星,最具野心探测计划启动
  7. Maya粒子消散特效制作(一)
  8. 2022-01-05 网工基础(十九)NAT基本原理与配置
  9. 圆形区域函数可视化和泊松方程求解
  10. 【案例分析-初探】美国有多少家加油站?
  11. Telegram皮肤
  12. 火山PC(火山视窗)图形按钮制作器教程
  13. 教程:这两个小妙招手把手教会你白底图片怎么抠图
  14. Week8 作业 C - 班长竞选 SCC Kosaraju HDU - 3639
  15. DSP中定点与浮点运算
  16. paho mqtt不定时抛出Connection reset异常导致客户端掉线
  17. 网站建设的整体项目三步骤
  18. 经营网站需要办理哪些牌照资质
  19. 解决中国大学MOOC遮挡字幕问题
  20. 非洲瓜哇JAVA布的特点_非洲文化令人好奇,非洲人的服装及着装有什么特点?...

热门文章

  1. HCIE-Security Day17:防火墙双机热备实验(五):防火墙旁挂交换机,交换机静态路由引流
  2. CICD详解(一)——概念和原理
  3. Tomcat详解(三)——tomcat多实例
  4. Java中字符串的几个实例
  5. 自定义办法设置 localStorage 过期时间
  6. mysql备份之lvm
  7. iframe高度自适应 1
  8. Java8初体验(一)lambda表达式语法
  9. jQuery具体实例介绍什么时候用ajax,ajax应该在什么地方使用
  10. 居中百分比宽高的元素