参考自:http://blog.csdn.net/wjmishuai/article/details/71191945

http://www.cnblogs.com/Xnice/p/4522671.html

基于潜在(隐藏)因子的推荐,常采用SVD或改进的SVD++

奇异值分解(SVD)

考虑CF中最为常见的用户给电影评分的场景,我们需要一个数学模型来模拟用户给电影打分的场景,比如对评分进行预测。

将评分矩阵U看作是两个矩阵的乘积:

其中,uxy 可以看作是user x对电影的隐藏特质y的热衷程度,而iyz可以看作是特质 y 在电影 z中的体现程度。那么上述模型的评分预测公式为:

q 和 p 分别对应了电影和用户在各个隐藏特质上的特征向量。

以上的模型中,用户和电影都体现得无差别,例如某些用户非常挑剔,总是给予很低的评分;或是某部电影拍得奇烂,恶评如潮。为了模拟以上的情况,需要引入 baseline predictor.

其中 μ 为所有评分基准,bi 为电影 i 的评分均值相对μ的偏移,bu 类似。注意,这些均为参数,需要通过训练得到具体数值,不过可以用相应的均值作为初始化时的估计。

模型参数bi,bu,qi,pu通过最优化下面这个目标函数获得:

可以用梯度下降方法或迭代的最小二乘算法求解。在迭代最小二乘算法中,首先固定pu优化qi,然后固定qi优化pu,交替更新。梯度下降方法中参数的更新式子如下(为了简便,把目标函数中的μ+bi+bu+q⊤ipu整体替换为r^ui):

其中α是更新步长。

SVD++

某个用户对某个电影进行了评分,那么说明他看过这部电影,那么这样的行为事实上蕴含了一定的信息,因此我们可以这样来理解问题:评分的行为从侧面反映了用户的喜好,可以将这样的反映通过隐式参数的形式体现在模型中,从而得到一个更为精细的模型,便是 SVD++.

其中 I(u) 为该用户所评价过的所有电影的集合,yj为隐藏的“评价了电影 j”反映出的个人喜好偏置。收缩因子取集合大小的根号是一个经验公式,并没有理论依据。

模型参数bi,bu,qi,pu,yj通过最优化下面这个目标函数获得:

与SVD方法类似,可以通过梯度下降算法进行求解。

使用用户的历史评价数据作为隐式反馈,算法流程图如下:

SVD与SVD++的更多相关文章

  1. 推荐系统 SVD和SVD++算法

    推荐系统 SVD和SVD++算法 SVD:   SVD++: [Reference] 1.SVD在推荐系统中的应用详解以及算法推导 2.推荐系统——SVD/SVD++ 3.SVD++ 4.SVD++协 ...

  2. SVD和SVD++

    参考自:http://blog.csdn.net/wjmishuai/article/details/71191945 http://www.cnblogs.com/Xnice/p/4522671.h ...

  3. 奇异值分解(SVD)和简单图像压缩

    SVD(Singular Value Decomposition,奇异值分解) 算法优缺点: 优点:简化数据,去除噪声,提高算法结果 缺点:数据的转换可能难于理解 适用数据类型:数值型数据 算法思想: ...

  4. paper 128:奇异值分解(SVD) --- 线性变换几何意义[转]

    PS:一直以来对SVD分解似懂非懂,此文为译文,原文以细致的分析+大量的可视化图形演示了SVD的几何意义.能在有限的篇幅把这个问题讲解的如此清晰,实属不易.原文举了一个简单的图像处理问题,简单形象,真 ...

  5. R 操作矩阵和计算SVD的基本操作记录

    在R中可以用函数matrix()来创建一个矩阵,应用该函数时需要输入必要的参数值. > args(matrix) function (data = NA, nrow = 1, ncol = 1, ...

  6. Machine Learning in Action – PCA和SVD

    降维技术, 首先举的例子觉得很好,因为不知不觉中天天都在做着降维的工作 对于显示器显示一个图片是通过像素点0,1,比如对于分辨率1024×768的显示器,就需要1024×768个像素点的0,1来表示, ...

  7. 转载:奇异值分解(SVD) --- 线性变换几何意义(上)

    本文转载自他人: PS:一直以来对SVD分解似懂非懂,此文为译文,原文以细致的分析+大量的可视化图形演示了SVD的几何意义.能在有限的篇幅把这个问题讲解的如此清晰,实属不易.原文举了一个简单的图像处理 ...

  8. 关于SVD(Singular Value Decomposition)的那些事儿

    SVD简介 SVD不仅是一个数学问题,在机器学习领域,有相当多的应用与奇异值都可以扯上关系,比如做feature reduction的PCA,做数据压缩(以图像压缩为代表)的算法,还有做搜索引擎语义层 ...

  9. SVD神秘值分解

    SVD分解 SVD分解是LSA的数学基础,本文是我的LSA学习笔记的一部分,之所以单独拿出来,是由于SVD能够说是LSA的基础,要理解LSA必须了解SVD,因此将LSA笔记的SVD一节单独作为一篇文章 ...

随机推荐

  1. vs 基本验证控件使用

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.c ...

  2. Visual Studio VS使用freopen调试控制台闪退

    解决方法 freopen("CON", "r", stdin);    system("pause>nul"); 暂停函数之前,使用f ...

  3. java基础知识总结--继承和接口

    什么是继承?什么是接口?他们之间的区别和联系是什么? 什么是继承? 继承是使用已存在的类的定义作为基础建立新类的技术,新类的定义可以增加新的数据或新的功能,也可以用父类的功能.多个类中存在相同属性和行 ...

  4. Vue(一)创建第一个Vue程序

    一.下载安装nodeJs 基于node.js,利用淘宝npm镜像安装相关依赖.由于国内使用npm会很慢,这里推荐使用淘宝NPM镜像 -- npm install -g cnpm --registry= ...

  5. a^b%p and a*b%p快速幂

    #include<cstdio> int power(int a, int b, int p) { %p; ) { ) ans=(long long)ans*a%p; a=(long lo ...

  6. ASP.NET WebApi 基于分布式Session方式实现Token签名认证

    一.课程介绍 明人不说暗话,跟着阿笨一起学玩WebApi!开发提供数据的WebApi服务,最重要的是数据的安全性.那么对于我们来说,如何确保数据的安全将会是需要思考的问题.在ASP.NETWebSer ...

  7. Glide4 用法总结 MD

    Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...

  8. sql注入工具:sqlmap命令

    sqlmap是一款专业的sql注入工具, 让你告别人工注入, 程序高效自动注入 前提是你有找到注入点 , 工具的官方网站:http://sqlmap.org/ kali系统默认安装sqlmap, 不需 ...

  9. linux性能压测工具

    http://benjr.tw/532 http://blog.yufeng.info/archives/2023 https://www.cnblogs.com/zhoujinyi/archive/ ...

  10. 每天一个linux命令(13):less命令

    1.命令简介 less(less)  命令可以对文件或其它输出进行分页显示,与moe命令相似,但是比more命令要强大许多.应该说是linux正统查看文件内容的工具. 2.用法 less [选项].. ...