使用SVD++进行协同过滤(算法原理部分主要引用自他人)

SVD++是基于SVD(Singular Value Decomposition)的一种改进算法。SVD是一种常用的矩阵分解技术,是一种有效的代数特征提取方法。SVD在协同过滤中的主要思路是根据已有的评分情况,分析出评分者对各个因子的喜好程度以及电影包含各个因子的程度,最后再反过来分析数据得出预测结果。

其在协同过滤中的具体应用方法是先对user_movie的rating矩阵的缺失值用随机数据予以填充,然后将预处理之后的矩阵作为SVD算法的输入,进行迭代求解。

为了更好的说明SVD算法,需要首先对matrix factorization model和Baseline Predictors进行简单的介绍。

matrix factorization model:

图表 ?SEQ 图表 \* ARABIC 1评分矩阵形式(引用)

评分矩阵U(形式如上图)可被分解为两个矩阵相乘

将这种分解方式体现协同过滤中,即有:

rui=qiTpu          (matrix factorization model )

在这样的分解模型中,Pu代表用户隐因子矩阵(puk表示用户u对因子k的喜好程度),Qi表示电影隐因子矩阵(qik表示电影i在因子k上的程度)。

Baseline
Predictors:

Baseline
Predictors使用向量bi表示电影i的评分相对于平均评分的偏差,向量bu表示用户u做出的评分相对于平均评分的偏差,将平均评分记做μμ。

rui=μ+bi+bu          (Baseline Predictors)

SVD:

SVD就是一种加入Baseline Predictors优化的matrix factorization model。

SVD公式如下:

rui=μ+bi+bu+qiTpu

加入防止过拟合的λ
λ
参数,可以得到下面的优化函数:

min(rui-μ+bi+bu+qiTpu)2+λ(bi2+bu2+qi2+pu2)

对上述公式求导,我们可以得到最终的求解函数:

?????????????? eui=rui-rui

bu??
←bu+γ?(eui-λ?bu)

bi???
←bi +γ?(eui-λ?bi )

pu??
←pu+γ?(eui-λ?pu)

qi???
←qi +γ?(eui-λ?qi )

SVD++:

SVD算法是指在SVD的基础上引入隐式反馈,使用用户的历史浏览数据、用户历史评分数据、电影的历史浏览数据、电影的历史评分数据等作为新的参数。

rui=μ+bi+bu+qiT(pu+1Ruj∈Ruyj)

求解公式如下:

eui=rui-rui

bu??
←bu+γ?(eui-λ?bu)

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

pu??
←pu+γ?(eui?qi -λ?pu)

qi???
←qi +γ?(eui?(pu+1Ruj∈Ruyj)-λ?qi )

【Reference】

【1】从item-base到svd再到rbm,多种Collaborative Filtering(协同过滤算法)从原理到实现http://blog.csdn.net/dark_scope/article/details/17228643

时间: 2024-10-14 08:56:09

使用SVD++进行协同过滤(算法原理部分主要引用自他人)的相关文章

协同过滤算法原理介绍

协同过滤推荐算法是诞生最早,并且较为著名的推荐算法.主要的功能是预测和推荐.算法通过对用户历史行为数据的挖掘发现用户的偏好,基于不同的偏好对用户进行群组划分并推荐品味相似的商品.协同过滤推荐算法分为两类,分别是基于用户的协同过滤算法(user-based collaboratIve filtering),和基于物品的协同过滤算法(item-based collaborative filtering).简单的说就是:人以类聚,物以群分.下面我们将分别说明这两类推荐算法的原理和实现方法. 1.基于用

Mahout 中基于SVD 的协同过滤原理

SVD原理: http://blog.csdn.net/wuyanyi/article/details/7964883Mahout 中基于SVD 的协同过滤原理

基于Spark MLlib平台的协同过滤算法---电影推荐系统

基于Spark MLlib平台的协同过滤算法---电影推荐系统 又好一阵子没有写文章了,阿弥陀佛...最近项目中要做理财推荐,所以,回过头来回顾一下协同过滤算法在推荐系统中的应用. 说到推荐系统,大家可能立马会想到协同过滤算法.本文基于Spark MLlib平台实现一个向用户推荐电影的简单应用.其中,主要包括三部分内容: 协同过滤算法概述 基于模型的协同过滤应用---电影推荐 实时推荐架构分析     一.协同过滤算法概述 本人对算法的研究,目前还不是很深入,这里简单的介绍下其工作原理. 通常,

协同过滤算法 R/mapreduce/spark mllib多语言实现

用户电影评分数据集下载 http://grouplens.org/datasets/movielens/ 1) Item-Based,非个性化的,每个人看到的都一样 2) User-Based,个性化的,每个人看到的不一样 对用户的行为分析得到用户的喜好后,可以根据用户的喜好计算相似用户和物品,然后可以基于相似用户或物品进行推荐.这就是协同过滤中的两个分支了,基于用户的和基于物品的协同过滤. 在计算用户之间的相似度时,是将一个用户对所有物品的偏好作为一个向量,而在计算物品之间的相似度时,是将所有

Collaborative Filtering(协同过滤)算法详解

基本思想 基于用户的协同过滤算法是通过用户的历史行为数据发现用户对商品或内容的喜欢(如商品购买,收藏,内容评论或分享),并对这些喜好进行度量和打分.根据不同用户对相同商品或内容的态度和偏好程度计算用户之间的关系.在有相同喜好的用户间进行商品推荐.简单的说就是如果A,B两个用户都购买了x.y.z三本图书,并且给出了5星的好评.那么A和B就属于同一类用户.可以将A看过的图书w也推荐给用户B. 基于用户协同过滤算法的原理图 所以,协同过滤算法主要分为两个步骤: 1.寻找相似的用户集合: 2.寻找集合中

GBDT(Gradient Boosting Decision Tree)算法&协同过滤算法

GBDT(Gradient Boosting Decision Tree)算法参考:http://blog.csdn.net/dark_scope/article/details/24863289 理解机器学习算法:http://blog.csdn.net/dark_scope/article/details/25485893 协同过滤算法:http://blog.csdn.net/dark_scope/article/details/17228643

Mahout实现基于用户的协同过滤算法

Mahout中对协同过滤算法进行了封装,看一个简单的基于用户的协同过滤算法. 基于用户:通过用户对物品的偏好程度来计算出用户的在喜好上的近邻,从而根据近邻的喜好推测出用户的喜好并推荐. 图片来源 程序中用到的数据都存在MySQL数据库中,计算结果也存在MySQL中的对应用户表中. package com.mahout.helloworlddemo; import java.sql.Connection; import java.sql.DatabaseMetaData; import java.

基于用户的协同过滤算法(UserCF)

基于用户的协同过滤算法: 找到和目标用户相似的用户集合 找到这个集合中用户喜欢的但目标用户没有听过的物品 #encoding: utf-8 from Similarity import Person from Sort import select_sort file=open('user_bookmark','r') filew=open('user_bookRecommend','w') #加载训练集 trainSet={} while True: line=file.readline().s

推荐系统之协同过滤的原理及C++实现

1.引言 假如你经营着一家网店,里面卖各种商品(Items),有很多用户在你的店里面买过东西,并对买过的Items进行了评分,我们称之为历史信息,现在为了提高销售量,必须主动向用户推销产品,所以关键是要判断出用户除了已经买过的商品之外还会喜欢哪些商品,这就需要利用用户购买商品过程产生的历史信息.协同过滤通常分为基于用户的协同过滤和基于商品的协同过滤. 基于用户的协同过滤:利用用户之间的相似度进行推荐 基于物品的协同过滤:利用物品之间的相似度进行推荐 2.原理 关于协同过滤的原理网上到处都有,思想