当前位置:文档之家› 基于协同过滤算法的推荐系统设计

基于协同过滤算法的推荐系统设计

基于协同过滤算法的推荐系统设计
基于协同过滤算法的推荐系统设计

基于协同过滤算法的推荐系统设计

一、绪论:

长尾理论。

二、协同过滤算法的定义:

(一)预定义:

要实现协同过滤算法,需要做以下的预定义:

1、邻域:

给定集合X,映射U:X→P(P(X))(其中P(P(X))是X的幂集的幂集),U 将X中的点x映射到X的子集族U(x)),称U(x)是X的邻域系以及U(x)中的元

素(即X的子集)为点x的邻域,当且仅当U满足以下的邻域公理:

U1:若集合A∈U(x),则x∈A。

U2:若集合A,B∈U(x),则A∩B∈U(x)。

U3:若集合A∈U(x),且A ?B ?X,则B∈U(x)。

U4:若集合A∈U(x),则存在集合B∈U(x),使B ?A,且?y∈B,B∈U(y)。

2、皮尔逊相关系数:

皮尔逊相关系数是一种度量两个变量相似程度的一种方法,若变量X和变量Y线性相关,则其皮尔逊系数的z值域为[-1,1]。系数值为1表示完全正相关;

系数值为-1表示完全负相关。

3、曼哈顿距离:

4、欧几里得距离:

5、余弦相似度:

6、 Jaccard相似度:

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

在实际应用中,如果一个用户C需要得到个性化的推荐,那么根据这个用户过去喜欢过的物品,计算出与这个顾客有着相似偏好的用户,继而把这些相似的用户所喜欢的、且C没有喜好过的物品推荐给用户C,这就是基于用户的协同过滤算法的主要思路。

该方法主要包括两个步骤:

1、寻找和查询用户具有相似偏好的用户群体。

2、找到这些用户所喜欢的物品集合,选取其中用户最为感兴趣的子集推荐给

查询用户。

在步骤1中,我们使用相似度来度量两个用户之间的相似度。相似度的计算方法可以调用预定义中的皮尔逊相似度、余弦相似度、曼哈顿距离、欧几里得距离和jaccard相似度。记用户A和用户B之间的相似度为sim

在得到用户的相似度之后,我们需要给查询用户返回根据其兴趣度的T opK结果,我们用如下公式衡量用户的兴趣度:

公式

其中S(u,K)代表相似用户集中的前K个用户,N(i)代表喜欢物品i的用户集合。

R代表用户u对物品i的感兴趣程度。

下图代表基于用户协同过滤算法的主要流程:

(三)基于物品的协同过滤算法:

在基于用户的协同过滤算法的基础上,又发展出了基于物品的协同过滤算法。

这主要是因为在一般的网站应用中,用户的数量往往远远大于物品的数量,这就造

成了计算用户之间的相似度成为一件非常耗时的工作:以余弦相似度为例。设一个

网站中的用户数为N,那么就需要维护一张N*N的矩阵,因而遍历矩阵计算相似

度的时间复杂度为O(N*N),这在用户基数较大时其计算时间会明显增加。

基于物品的协同推荐算法的工作方式是先找到和用户历史上喜好过的物品相似的物品,然后返回这些物品中用户兴趣度最高的前K个物品。

基于物品的协同过滤算法也分为两步:

1、计算物品之间的相似度。

2、根据物品的相似度和用户的历史行为返回给用户的推荐列表。

在步骤1中,与基于用户的推荐算法相似,也使用皮尔逊相关系数、欧几里得距离等预定义中的相似度计算方法来计算物品之间的相似度。记物品A和物品B之间的相似度为sim。

在得到物品间的相似度之后,通过以下公式计算对用户u来说,每个物品的感兴趣程度。

公式

这里N(u)代表某个用户的物品喜好集合,s(j,K)代表相似物品集合中相似度最高的前K个物品组成的子集。

三、SVD推荐算法:

1、矩阵分解和baseline预测

matrix factorization model

把我们的用户评分想象成一个表:

每一行代表一个用户,每一列代表一个物品,这其实就是一个矩形,只是我们拥有的这个矩形可能是非常稀疏的,也就是我们知道的评分占总量很少,,但现在我们知道它是一个矩形,一个矩形自然可以表示为另两个矩形的乘积:

这也就是matrix factorization model的原理了,我们需要做的就是通过已有数据来学习右边的两个矩形,更intuitive的你可以把总的矩形里的每个评分看成是该用户的特征向量与物品特征向量的内积:(这里符号变得有些多,你理解了意思就成)

2.Baseline Predictors

Baseline Predictors就简单多了,我们设定μ是平均值,然后分别用bi和bu来代表具体用户和物品的“偏好”,也就是

这两个参数我们当然可以当成一个优化任务来计算,比如最小二乘:

也可以用比较快的方法来,因为实际上这就是经验似然:

1、SVD算法的原理

SVD(Singular Value Decomposition)的想法是根据已有的评分情况,分析出评分者对各个因子的喜好程度以及电影包含各个因子的程度,最后再反过来根据分析结果预测评分。电影中的因子可以理解成这些东西:电影的搞笑程度,电影的恐怖程度,等等。根据这些因子,将N*M的评分矩阵(R[u][i]代表用户u对电影i的评分)分解成一个N行

F列的用户因子矩阵P(P[u][k]表示用户u对因子k的喜好程度)和一个M行F列的物品因子矩阵Q(Q[i][k]表示第i个物品的因子k,具体见下述公式:

公式

下面是将评分矩阵R分解成用户因子矩阵P与物品因子矩阵Q的一个例子。R的元素数值越大,表示用户越喜欢这部电影。P的元素数值越大,表示用户越喜欢对应的因子。Q的元素数值越大,表示物品对应的因子程度越高。分解完后,就能利用P,Q来预测用户A对《等风来》的评分了。按照这个例子来看,用户A应该会给《等风来》较低的分数。因为他不喜欢幽默片。

表1

表3

实际上,我们给一部电影评分时,除了考虑电影是否合自己口味外,还会受到自己是否是一个严格的评分者和这部电影已有的评分状况影响。例如:一个严格评分者给的分大多数情况下都比一个宽松评分者的低。你看到这部电影的评分大部分较高时,可能也倾向于给较高的分。在SVD 中,口味问题已经有因子来表示了,但是剩下两个还没有相关的式子表示。因此有必要加上相关的部分,提高模型的精准度。改进后的SVD的公式如下:

R = OverallMean + biasU + biasI + P * T(Q)(1)

其中OverallMean表示所有电影的平均分,biasU表示用户评分偏离OverallMean的程度,biasI表示电影评分偏离OverallMean的程度,P,Q意思不变。特别注意,这里除了OverallMean之后,其它几个都是矩阵。

分解完后,即(1)式中的五个参数都有了正确的数值后,就可以用来预测分数了。假设我们要

预测用户u对电影i的评分:

bu表示第u个用户的偏离程度,bi表示第i部电影的偏离程度,pu表示第u个用户的因子爱好程度,qi表示第i部电影的因子程度。

2、参数学习:

为了得到用户因子P和物品因子Q,需要通过学习来得到矩阵的参数。SVD使用随机梯度下降(stochastic gradient descent)学习(1)式中除了OverallMean之外的参数。

学习过程可以概括成这样:先给各个参数一个初值,然后利用这些参数进行预测,并将预测结果与已知评分进行对比,最后根据对比结果修正各个参数。更准确点的说法是调整参数的值,使得以下式子能取到最小值:

ALPHA表示所有训练样本。被第一个圆括号括着的部分表示当前的预测结果与实际值的偏差。被第二个圆括号括着的部分是为了防止过拟合(overfitting)。

四、基于MovieLens数据集的推荐系统设计

1、选取数据集:

为了实现协同过滤算法和SVD算法,需要选取一个合适的数据集来分析。本文研

究了以下数据集:

1、BookCrossing:

这个数据集是网上的Book-Crossing图书社区的278858个用户对271379本书进行的评分,包括显式和隐式的评分。这些用户的年龄等人口统计学属性

(demographic feature)都以匿名的形式保存并供分析。这个数据集是由Cai-Nicolas

Ziegler使用爬虫程序在2004年从Book-Crossing图书社区上采集的。

2、JesterJoke:

Jester Joke是一个网上推荐和分享笑话的网站。这个数据集有73496个用户对100个笑话作的410万次评分。评分范围是-10~10的连续实数。这些数据是由

加州大学伯克利分校的Ken Goldberg公布的。

3、Netflix:

这个数据集来自于电影租赁网址Netflix的数据库。Netflix于2005年底公布此数据集并设立百万美元的奖金(netflix prize),征集能够使其推荐系统性能上升10%

的推荐算法和架构。这个数据集包含了480189个匿名用户对大约17770部电影

作的大约lO亿次评分。

4、Usenet Newsgroups:

这个数据集包括20个新闻组的用户浏览数据。最新的应用是在KDD2007上的论文。新闻组的内容和讨论的话题包括计算机技术、摩托车、篮球、政治等。用

户们对这些话题进行评价和反馈。

5、MovieLens:

MovieLens数据集中,用户对自己看过的电影进行评分,分值为1~5。

MovieLens包括两个不同大小的库,适用于不同规模的算法.小规模的库是943个独立用户对1682部电影作的100000次评分的数据;大规模的库是6040个独立用户对3900部电影作的大约100万次评分。

在分析、比较各数据集的特性之后,发现MovieLens的数据集所涉及的主题—电影较为贴近我们的日常生活,因而具有较大的实用价值,且该数据库数据较为规范、不存在空值等需要进行数据清洗的情况,因而选择MovieLens作为分析实用的数据集。在MovieLens中,有大、中、小三个不同大小的数据集,因为本项目是个人开发,所以选择规模最小的“MovieLens-100K”数据集,其中包含了943个独立用户对1682部电影作的100000次评分的数据。

2、数学建模:

在数据集“MovieLens-100k”中,需要用到三个数据文件,分别是“u.data”、“u.item”、“https://www.doczj.com/doc/7114293093.html,er”。

“user.data”中包含943个独立用户对1682部电影作的100000次评分的数据。每个用户都至少对20部进行了打分。我们将其分为用户编号、电影编号、打分分值、打分之间等4个属性,以下述的形式存入数组:

user id | item id | rating | timestamp.

其中timestamp为用户评分的时间戳。

“u.item”保存了电影的信息,我们讲其分为电影编号、电影标题、上映时间、视频发行时间、IMDB链接、类别等属性,表示为下述的数组:

movie id | movie title | release date | video release date | IMDb URL | category |

“https://www.doczj.com/doc/7114293093.html,er”保存了评分人的信息,将其分类为用户编号、年龄、性别、职业、解压密码等属性,以下述数组的形式储存:

user id | age | gender | occupation | zip code

将u.data按7:1分为训练集和测试集,具体方法见下述伪代码:

def dataSplit(data,M,k,seed)

test = empty

train = empty

for user ,item in data:

if random(0,M)==k:

test.append(user,item)

else

train.append(user,item)

return test,train

3、算法实现:

对于数据集“MovieLens-100k”调用载第二章所属的基于用户协同过滤算法、基于物品的协同过滤算法和SVD算法,其中相似度的计算方法调用预定义中的皮尔逊相关系数等6中方法。

下面给出个算法的伪代码:

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

def UserSimilarity(train):

item_user = dict()

for u ,items in train.items:

for i in item.keys()

if i in item.keys():

item_user[i].add(u)

C= empty

N =empty

for i ,users in item_users.items():

for u in users:

N(u) +=1

for v in users:

if u == v:

continue

C[u][v]+=1

W=empty

for u.related_users in C.items():

for v.cuv in related_users.items():

W[u][v] = cuv / math.sqrt(N(u)*N(v))

return W

def Recommand(user ,train, W):

rank = empty dict

interacted_items = train[user]

for v,wuv in sorted(W[u].items, key =itemgetter(1),\reverse=true) for i rvi in train[v].item():

if i in interacted_items[v].items():

continue

rank[i] += wuv*rvi

return rank

(2)基于物品的协同过滤算法:

def UserSimilarity(train):

item_user = dict()

for u ,items in train.items:

for i in item.keys()

if i in item.keys():

item_user[i].add(u)

C= empty

N =empty

for i ,users in item_users.items():

for u in users:

N(u) +=1

for v in users:

if u == v:

continue

C[u][v]+=1

W=empty

for u.related_users in C.items():

for v.cuv in related_users.items():

W[u][v] = cuv / math.sqrt(N(u)*N(v))

return W

def Recommand(user ,train, W):

rank = empty dict

interacted_items = train[user]

for v,wuv in sorted(W[u].items, key =itemgetter(1),\reverse=flase)

for i rvi in train[v].item():

if i in interacted_items[v].items():

continue

rank[i] += wuv*rvi

return rank

(3)SVD算法:

from __future__ import division

import numpy as np

import scipy as sp

from numpy.random import random

class SVD_C:

def __init__(self,X,k=20):

'''

k is the length of vector

'''

self.X=np.array(X)

self.k=k

self.ave=np.mean(self.X[:,2])

print "the input data size is ",self.X.shape

self.bi={}

self.bu={}

self.qi={}

self.pu={}

self.movie_user={}

https://www.doczj.com/doc/7114293093.html,er_movie={}

for i in range(self.X.shape[0]):

uid=self.X[i][0]

mid=self.X[i][1]

rat=self.X[i][2]

self.movie_user.setdefault(mid,{})

https://www.doczj.com/doc/7114293093.html,er_movie.setdefault(uid,{})

self.movie_user[mid][uid]=rat

https://www.doczj.com/doc/7114293093.html,er_movie[uid][mid]=rat

self.bi.setdefault(mid,0)

self.bu.setdefault(uid,0)

self.qi.setdefault(mid,random((self.k,1))/10*(np.sqrt(self.k)))

self.pu.setdefault(uid,random((self.k,1))/10*(np.sqrt(self.k)))

def pred(self,uid,mid):

self.bi.setdefault(mid,0)

self.bu.setdefault(uid,0)

self.qi.setdefault(mid,np.zeros((self.k,1)))

self.pu.setdefault(uid,np.zeros((self.k,1)))

if (self.qi[mid]==None):

self.qi[mid]=np.zeros((self.k,1))

if (self.pu[uid]==None):

self.pu[uid]=np.zeros((self.k,1))

ans=self.ave+self.bi[mid]+self.bu[uid]+np.sum(self.qi[mid]*self.pu[uid]) if ans>5:

return 5

elif ans<1:

return 1

return ans

def train(self,steps=20,gamma=0.04,Lambda=0.15):

for step in range(steps):

print 'the ',step,'-th step is running'

rmse_sum=0.0

kk=np.random.permutation(self.X.shape[0])

for j in range(self.X.shape[0]):

i=kk[j]

uid=self.X[i][0]

mid=self.X[i][1]

rat=self.X[i][2]

eui=rat-self.pred(uid,mid)

rmse_sum+=eui**2

self.bu[uid]+=gamma*(eui-Lambda*self.bu[uid])

self.bi[mid]+=gamma*(eui-Lambda*self.bi[mid])

temp=self.qi[mid]

self.qi[mid]+=gamma*(eui*self.pu[uid]-Lambda*self.qi[mid])

self.pu[uid]+=gamma*(eui*temp-Lambda*self.pu[uid]) gamma=gamma*0.93

print "the rmse of this step on train data is ",np.sqrt(rmse_sum/self.X.shape[0])

#self.test(test_data)

def test(self,test_X):

output=[]

sums=0

test_X=np.array(test_X)

#print "the test data size is ",test_X.shape

for i in range(test_X.shape[0]):

pre=self.pred(test_X[i][0],test_X[i][1])

output.append(pre)

#print pre,test_X[i][2]

sums+=(pre-test_X[i][2])**2

rmse=np.sqrt(sums/test_X.shape[0])

print "the rmse on test data is ",rmse

return output

4、评分标准:

对于系统返回的推荐结果,需要对推荐的结果做出评价。一个完整的推荐系统一般存在3个参与方:用户、物品提供者和提供推荐的网站,因此在测评一个推荐系统时,需要同时考虑三方的利益,一个好的推荐系统可以使三方收益。

好的推荐系统不仅可以准确预测用户的行为,而且可以拓展用户的视野,帮助用户发现可能的潜在兴趣。同时,推荐系统还要帮助商家将被埋没在长尾中的物品推荐给可能感兴趣的用户。

本着这样的目的,本文使用了以下几种测评标准来衡量推荐结果的好坏:

1、预测准确度:

预测准确度度量一个推荐系统预测用户行为的能力。这个指标是最重要的系统离线测评指标。在训练集training set中建立用户行为和兴趣模

型,预测用户在测试集上的行为,并将预测行为和测试行为的重合度作为

预测的准确度。

对于MovieLens这种打分型的数据集,一般使用均方根误差(RMSE)来作为预测准确度的测评标准。对于测试集中的一个用户u和物品i,令

Rui是用户对物品的实际评分,而Rui是推荐算法给出的预测评分,则

RMSE的定义为:

公式

下面给出计算RMSE的伪代码:

def RMSE(records):

return math.sqrt(

sum([(rui)])

)

对于T opN型的推荐,一般是为用户给出一个个性化的推荐列表。这种推荐的预测准确率一般通过准确率(precision)/召回率(recall)度量。

推荐结果的召回率定义为:

推荐结果的准确率定义为:

下面的伪代码显示了TopN推荐中的预测准确度计算过程:

2、覆盖率:

3、多样性:

基于用户的协同过滤算法 UserCF流程图

UserCF算法主要流程: 主要全局变量: const int usersum = 6040; //用户总数 const int itemsum =3952; //项目总数 const int N =10; //为用户推荐前N个物品 int trainuser[usersum][itemsum]={0}; //训练集合user item rate矩阵 int test[usersum][itemsum]={0}; //测试集合user item rate矩阵 struct _simi { double value; //相似值 int num; //相似用户号 }; _simi simiUser[usersum][usersum]; //排序后的相似性矩阵double trainuserItem[usersum][itemsum]={0.0}; // user item 兴趣程度矩阵int recommend[usersum][N]={0}; //为每个用户推荐N个物品

拆分数据集函数int SplitData(int m, int k) 主要流程: 将数据集拆分为测试集test和训练集trainuser,其中1/m为测试集,取不同的k<=m-1值在相同的随即种子下可得到不同的测/训集合

计算用户之间相似度函数double Simility(int* Ua, int*Ub)主要流程:计算用户Ua和Ub的相似性,返回值为Ua和Ub的相似度

用户相似性矩阵排序函数int sort(double *simArr,_simi *simStruct)主要流程:根据相似性由高到低排序,每行第一个是自己

改进了协同过滤推荐算法的推荐系统的制作流程

图片简介:

本技术介绍了一种改进了协同过滤推荐算法的推荐系统,属于推荐系统技术相关领域。该推荐系统包括输入模块、推荐算法和输出模块三个部分,输入模块用于输入用户个人基本信息、用户对项目的评分和用户历史信息等;推荐算法根据输入信息分析用户兴趣爱好,寻找最相似用户和项目,给出预测的评分结果;输出模块依据用户输入请求,输出相应的推荐项目。其中改进部分是对推荐算法中冷启动问题进行优化。针对新用户、新项目和新系统不同的冷启动问题,提出了优化解决方法。 技术要求 1.一种改进了协同过滤推荐算法的推荐系统,其特征在于,包括输入模块、推荐算法和输出模块;输入模块用于输入用户个人基本信息、用户对项目的评分、用户历史信息和当 前的点击操作;推荐算法根据输入信息分析用户兴趣爱好,寻找最相似用户和项目,给 出预测的评分结果;输出模块依据用户输入请求,输出相应的推荐项目到客户端。 2.如权利要求1所述的一种改进了协同过滤推荐算法的推荐系统,其特征在于,所述推荐算法为协同过滤推荐算法,所述协同过滤推荐算法冷启动实现方式为:一、提供非个性 化的推荐,非个性化推荐的最简单例子就是热门排行榜,可以给用户推荐热门排行榜, 然后等到用户的反馈足够多,数据收集到一定的时候,再转换为个性化推荐;二、利用 用户的注册信息,提供的年龄、性别、职业等数据做粗粒度的个性化;三、利用用户的 社交网络账号登录,导入用户在社交网站上的好友信息,然后给用户推荐其好友喜欢的 物品;四、利用物品的内容信息计算物品相关表,利用专家进行标注。 3.如权利要求2所述的一种改进了协同过滤推荐算法的推荐系统,其特征在于,在所述推荐算法中,用户点击商品链接后,推荐系统会记录用户的点击行为,然后系统计算用户 间相似度,找出与当前用户最相似的前N个用户,接着在这前N个用户中找出当前用户没有点击的商品,将点击率最高的几个商品加入推荐列表,最后将推荐列表发往客户端向 用户展示推荐的商品。

基于协同过滤的推荐算法及代码实现

基于协同过滤的推荐算法与代码实现 什么是协同过滤? 协同过滤是利用集体智慧的一个典型方法。要理解什么是协同过滤(Collaborative Filtering, 简称CF),首先想一个简单的问题,如果你现在想看个电影,但你不知道具体看哪部,你会怎么做?大部分的人会问问周围的朋友,看看最近有什么好看的电影推荐,而我们一般更倾向于从口味比较类似的朋友那里得到推荐。这就是协同过滤的核心思想。 协同过滤一般是在海量的用户中发掘出一小部分和你品位比较类似的,在协同过滤中,这些用户成为邻居,然后根据他们喜欢的其他东西组织成一个排序的目录作为推荐给你。当然其中有一个核心的问题: 如何确定一个用户是不是和你有相似的品位? 如何将邻居们的喜好组织成一个排序的目录? 简单来说: 1. 和你兴趣合得来的朋友喜欢的,你也很有可能喜欢; 2. 喜欢一件东西A,而另一件东西B 与这件十分相似,就很有可能喜欢B; 3. 大家都比较满意的,人人都追着抢的,我也就很有可能喜欢。 三者均反映在协同过滤的评级(rating)或者群体过滤(social filtering)这种行为特性上。 深入协同过滤的核心 首先,要实现协同过滤,需要一下几个步骤: 1. 收集用户偏好 2. 找到相似的用户或物品 3. 计算推荐 (1)收集用户偏好 要从用户的行为和偏好中发现规律,并基于此给予推荐,如何收集用户的偏好信息成为系统推荐效果最基础的决定因素。用户有很多方式向系统提供自己的偏好信息,而且不同的应用也可能大不相同,下面举例进行介绍:

以上列举的用户行为都是比较通用的,推荐引擎设计人员可以根据自己应用的特点添加特殊的用户行为,并用他们表示用户对物品的喜好。 在一般应用中,我们提取的用户行为一般都多于一种,关于如何组合这些不同的用户行为,基本上有以下两种方式: 将不同的行为分组:一般可以分为“查看”和“购买”等等,然后基于不同的行为,计算不同的用户/物品相似度。类似于当当网或者Amazon 给出的“购买了该图书的人还购买了...”,“查看了图书的人还查看了...”

基于项目的协同过滤算法 ItemCF流程图

ItemCF算法主要流程: 主要全局变量: const int usersum = 6040; //用户总数 const int itemsum =3952; //项目总数 const int N =10; //为用户推荐前N个物品 int trainuser[usersum][itemsum]={0}; //训练集合user item rate矩阵 int test[usersum][itemsum]={0}; //测试集合user item rate矩阵 struct _simi { double value; //相似值 int num; //相似物品号 }; _simi simiItem[itemsum][itemsum]; //排序后的相似性矩阵double trainuserItem[usersum][itemsum]={0.0}; // user item 兴趣程度矩阵int recommend[usersum][N]={0}; //为每个用户推荐N个物品

拆分数据集函数int SplitData(int m, int k) 主要流程: 将数据集拆分为测试集test和训练集trainuser,其中1/m为测试集,取不同的k<=m-1值在相同的随即种子下可得到不同的测/训集合

计算项目之间相似度函数double Simility(int* ItemA, int* ItemB)主要流程:计算用户ItemA和ItemB的相似性,返回值为ItemA和ItemB的相似度

用户i对物品j预测兴趣程度函数double getUserLikeItem(int i,int j,int k)主要流程: 利用k个最近邻来计算

基于用户评分Kmeans聚类的协同过滤推荐算法实现

基于用户评分Kmeans聚类的协同过滤 推荐算法实现 一:基于用户评分Kmeans聚类的协同过滤推荐算法实现步骤 1、构建用户-电影评分矩阵: public Object readFile(String fileName){ List user = new ArrayList(); double[][] weight = new double[user_num][keyword_num]; List obj = new ArrayList(); try { File file = getFile(fileName); FileReader fr = new FileReader(file); BufferedReader br = new BufferedReader(fr); String line = ""; while (br.ready()) { line = br.readLine(); String[] data = line.split(" "); String[] str = data[1].split(";"); user.add(data[0]); for (int i = 0; i < str.length; i++) { String[] s = str[i].split(":");

weight[Integer.parseInt(data[0])-1][Integer.par seInt(s[0])-1] = Double.parseDouble(s[1]); } } obj.add(user); obj.add(weight); br.close(); } catch (Exception e) { e.printStackTrace(); } return obj; } 2、根据用户评分聚类: public class GenerateGroup implements Base{ private List initPlayers;//初始化,一个随机聚类中心 private List players;//每个用户实体类 public static List clusterHeart; public GenerateGroup(List list) { players = list;

一种改进的协同过滤推荐算法

种改进的协同过滤推荐算法 摘要:协同过滤算法自提出以来便得到了广泛运用,但 协同过滤算法本身具有的数据稀疏性及冷启动问题也制约了算法的性能。通过分析协同过滤算法的原理和不足,提出了一种改进协同过滤算法的思路,并在MovieLens 数据集上进行了验证,一定程度上提高了 算法性能。 关键词关键词:推荐系统;协同过滤;数据稀疏性文献标识码:A 文章编号:1672-7800(2016)004-0063-03 0 引言网络技术的 迅猛发展使得互联网上的信息呈现爆炸式 中图分类号:TP312 增长,为人们的生活和学习提供了便利,与此同时,海量的数据也带来了一些问题,其中最主要的就是“信息过载”问题。所谓信息过载问题,是指由于不相关的垃圾数据过多从而导致用户无法准确找到自己想要信息的问题。 为应对信息过载问题,人们提出了各种解决方案,其中 最为用户所熟悉的无疑是搜索引擎技术。但搜索引擎的服务是被动的,它要求使用者必须先给出一个搜索关键字,然后才能提供与该关键字相关的信息。这种完全依赖于关键字的服务模式要求用户能用关键字准确描述自己所需信息,否则

无法提供服务,但是现实中用户很多时候并不能精确描述自己的需求信息。这种情况下,以推荐系统为代表的技术可以较好地解决该问题,提高用户的使用体验。 1 协同过滤算法 1.1算法介绍 “协同过滤”技术最早由GlodBerg等于20世纪90年代 提出,该技术最初被用来过滤电子邮件[1],此后这种技术取得了商业上的巨大成功,得到了广泛使用[2-3] 。协同过滤的基本思想是,如果两个用户在一些项目上具有相似的评价信息,包括显示的直接评分信息或者点击、购买等隐式评价信息,则这两个用户具有相似兴趣。一般而言,协同过滤需要使用到的用户评价信息会被存储在一个数据表中,该表可以被称为用户评分矩阵。 协同过滤技术的关键在于计算两个用户或者项目的相 似度,然后根据相似的用户或者项目进行推荐。其中如果根据某一用户的评分数据寻找到与其相似的用户,并依据相似用户的爱好对活动用户进行推荐的思想被称为基于用户的协同过滤。如果知道用户对某一项目评分较高,则可以根据评分矩阵寻找与这一项目相似的项目推荐给用户,这种思想被称为基于项目的协同过滤。 两种协同过滤算法的基本步骤比较相似。首先,依据用 户对物品的评分建立用户评分矩阵,矩阵的行数为系统中用

基于协同过滤算法的电影推荐系统设计

高级数据挖掘期末大作业

基于协同过滤算法的电影推荐系统 本电影推荐系统中运用的推荐算法是基于协同过滤算法(Collaborative Filtering Recommendation)。协同过滤是在信息过滤和信息系统中正迅速成为一项很受欢迎的技术。与传统的基于内容过滤直接分析内容进行推荐不同,协同过滤分析用户兴趣,在用户群中找到指定用户的相似(兴趣)用户,综合这些相似用户对某一信息的评价,形成系统对该指定用户对此信息的喜好程度预测。 电影推荐系统中引用了Apache Mahout提供的一个协同过滤算法的推荐引擎Taste,它实现了最基本的基于用户和基于内容的推荐算法,并提供了扩展接口,使用户方便的定义和实现自己的推荐算法。 电影推荐系统是基于用户的推荐系统,即当用户对某些电影评分之后,系统根据用户对电影评分的分值,判断用户的兴趣,先运用UserSimilarity计算用户间的相似度.UserNeighborhood根据用户相似度找到与该用户口味相似的邻居,最后由Recommender提供推荐个该用户可能感兴趣的电影详细信息。将用户评过分的电影信息和推荐给该用户的电影信息显示在网页结果页中,推荐完成。 一、Taste 介绍 Taste是Apache Mahout 提供的一个个性化推荐引擎的高效实现,该引擎基于java实现,可扩展性强,同时在mahout中对一些推荐算法进行了MapReduce 编程模式转化,从而可以利用hadoop的分布式架构,提高推荐算法的性能。 在Mahout0.5版本中的Taste,实现了多种推荐算法,其中有最基本的基于用户的和基于内容的推荐算法,也有比较高效的SlopeOne算法,以及处于研究阶段的基于SVD和线性插值的算法,同时Taste还提供了扩展接口,用于定制化开发基于内容或基于模型的个性化推荐算法。 Taste 不仅仅适用于Java 应用程序,还可以作为内部服务器的一个组件以HTTP 和Web Service 的形式向外界提供推荐的逻辑。Taste 的设计使它能满足企业对推荐引擎在性能、灵活性和可扩展性等方面的要求。 下图展示了构成Taste的核心组件:

基于在线评论情感分析的改进协同过滤推荐算法

第45卷 第6A 期 2018年6月 计算机科学COMPUTER SCIENCE Vol.45No.6A June 2018 本文受国家自然科学基金项目(71671121,11471152)资助.孙丽华(1979-),女,博士生,主要研究方向为个性化推荐算法,E-mail :sunlh68@t j u.edu.cn ;张兴芳(1957-) ,女,教授,主要研究方向为不确定性的数学理论与应用. 基于在线评论情感分析的改进协同过滤推荐算法 孙丽华1 张兴芳2 (天津大学管理与经济学部 天津300072)1 ( 聊城大学数学科学学院 山东聊城252000)2 摘 要 针对在线中文评论中用户主观意见的不确定性,提出了一种基于不确定理论的情感分析模型,并结合情感分析模型设计了一种个性化推荐算法.首先,采用分词工具ICTCLAS 和IKAnal y zer 预处理在线中文评论,并基于情感词典(HowNet )计算特征词的点互信息值;然后,应用不确定变量与不确定集设计情感分析模型;最后,根据情感分析模型设计搜索K 最近邻居的新方法,并产生推荐.实验结果表明,该方法能够有效提高推荐的准确率,缓解数据稀疏问题. 关键词 推荐算法,不确定统计,在线评论,情感分析中图法分类号 TP391 文献标识码 A Im p roved Collaborative Filterin g Recommendation Al g oritbm Based on Sentiment Anal y sis of Online Review SUN Li-hua 1 ZHANG Xin g -fan g 2 (Colle g e of Mana g ement and Economics ,Tian j in Universit y ,Tian j in 300072,China ) 1(School of Mathematical Sciences ,Liaochen g Universit y ,Liaochen g ,Shandon g 252000,China ) 2 Abstract Aimin g at the uncertaint y of users sub j ect o p inions in online Chinese review ,a sentiment anal y sis model based on uncertaint y theor y was p ro p osed.An individual recommendation al g orithm was desi g ned on the basis of the p ro p osed sentiment anal y sis model. First ,the tokenizers of ICTCLAS and IKAnal y zer was used to p re p rocess online Chinese review to g enerate characteristic words ,and the p oint mutual information value of characteristic words accoun-tin g for the sentiment direction were com p uted based on HowNet dictionar y .Then ,the sentiment anal y sis model was established via uncertaint y theor y of uncertain variables and uncertain sets.In addition ,the new similarit y formula based on the p ro p osed model was used to search the K-nearest nei g hbors.Finall y ,the recommendation lists were g iven.Ex p eri- mental results show that the p ro p osed method can effectivel y im p rove the accurac y of recommendation and alleviate the s p arse data p roblem. Ke y words Recommendation al g orithm ,Uncertain statistics ,Online review ,Sentiment anal y sis 1 引言 随着互联网的发展,电子商务逐步进入社会化商务时代,用户可以发布和获得网络信息的渠道日益增多. 以 协同过 滤 思想为基础的推荐技术[1] 很好地帮助用户提高了信息利 用率.基于用户或项目的协同过滤推荐算法,无论是在实际应用领域还是理论发展方面,都取得了丰富的成果.但是,在电子商务网站中,普遍存在数据稀疏问题,国内外一些学者通 过改进推荐算法来提高推荐精度[2-3] ,从而满足用户的需求. 然而,随着用户需求的不断细化,学者们发现评分数据中包含的信息量有限,不可避免地忽略了用户的某些特征信息,限制了推荐的精度. 在线评论是用户对项目使用经验的具体反馈,从评论信息中挖掘用户意见,无疑能完善用户偏好模型,提高推荐精度.由于自然语言本身具有不确定性,使得用户反馈的体验信息具有不确定性.为解决这类问题,现有文献多采用概率 [2] 或模糊 [4-5] 的方法.例如,Dra g oni 等 [6] 利用模糊的方法 刻画情感倾向,并将该方法应用到不同的领域来分析评论中的情感倾向性.Ha q ue 等 [7] 基于模糊逻辑的方法分析用户正 面或者负面的情绪来判断用户对产品的兴趣.Loia 等[8] 和 Wan g 等[9] 利用模糊的方法来识别文本中用户的情感倾向. Fu 等[12] 利用模糊方法从句子级别来研究情感分类, 提高了情感分类的准确性.因此,情感分析技术很快被应用到推荐 系统中[10-11].Fu 等[13] 结合评论信息来丰富用户的偏好信 息,利用HowNet 情感词典分析评论中用户的情感倾向,挖 掘用户情感倾向来提高推荐结果的准确性.De 等[2] 利用概率推断的方法从模糊观测的结果中改进协同过滤推荐算法, 提高推荐结果的精度. 然而,概率论和模糊数学中并没有涵盖所有的非确定性,例如,在情感分析过程中,分析用户的情感倾向是正向的程度或者是负向的程度;类似地,分析用户的情感强度是无法用工 具测量的.不确定理论[14]对这些问题给出了合理的解释,并对其做了进一步的完善[ 15] .可以利用不确定理论来更好地描述这些既不是随机也不是模糊的非确定问题. 本文针对在线中文评论中用户主观意见的不确定问题,建立了一种基于不确定理论的情感分析模型,并在此基础上设计了个性化推荐算法,以提高推荐结果的精度和缓解数据稀疏问题.最后,在Java 环境下,利用两个真实数据集验证 了该算法的有效性. 万方数据

浅谈基于协同过滤的个性化推荐算法

浅谈基于协同过滤 算法的个性化推荐 姓名: 学号: 班级: 学院: 年月日

摘要 协同过滤是如今推荐系统中最为成熟的的一个推荐算法系类,是利用群体的喜好来推测使用者的喜好,从而向用户产生推荐的算法。当前协同过滤算法大致可以分为基于用户的协同过滤算法和基于项目的协同过滤算法。协同过滤为主要算法的推荐系统的应用领域日益广泛,电子商务是其应用的最主要和最成功的领域。但协同过滤算法仍具有很多不足之处,最突出的不足分别是数据稀疏性问题,冷启动问题和系统延伸性问题。在已有的理论和实践研究基础上,个人提出了协同过滤推荐值得深入研究的方向应包括多维数据的交叉利用,从而提高协同过滤推荐的精准度。 关键字:协同过滤推荐,基于用户,基于项目,数据稀疏,冷启动,系统延 伸性,多维数据的交叉利用 正文 一、协同过滤推荐的基本定义 (一)协同过滤推荐的概念 协同过滤是如今推荐系统中最为成熟的的一个推荐算法系类,简单来说是利用某兴趣相投、拥有共同经验之群体的喜好来推荐使用者感兴趣的资讯,个人透过合作的机制给予资讯相当程度的回应(如评分)并记录下来以达到过滤的目的进而帮助别人筛选资讯,回应不一定局限于特别感兴趣的,特别不感兴趣资讯的纪录也相当重要。 (二)协同过滤推荐的主要算法概述 当前协同过滤算法大致可以分为两类,一类是基于用户的协同过滤算法,一类是基于项目的协同过滤算法。 基于用户的协同过滤推荐根据相似用户群的观点来产生对目标用户的推荐。基本思想是如果某些用户对部分项目的评分趋于一致或是很接近,可以认为他们对其它项目的评分差异就比较小,进一步,可以使用这些相似用户的项目评分值对目标用户的未评分项目进行估计。基于用户的协同过滤使用数理统计的方法来寻找与目标用户有相似兴趣偏好的最近邻居用户集合,再以最近邻居用户对特定项目的评分为基础使用一定的数学方法来预测目标用户对该特定项目的评分,而预测评分最高的前N个商品可以看作是用户最有可能感兴趣top-N商品返回给目标用户(这就是所谓的top-N推荐)。基于用户的协同过滤推荐算法的核心思想是利用数理统计的方法为目标用户寻找他的最近邻居用户集,再以最近邻居用户对特定项目的评分为基础使用一定的数学方法来预测目标用户对该特定项目的评分,最终产生最后的推荐结果。通过最近邻居用户对目标用户未评分项目的评分值进行加权平均来逼近,这是该算法思想的关键。基于用户的协同过滤推荐算法的主要工作有:用户之间相似性的衡量、最近邻居集的查找和评分预测值的计算。 和基于用户的协同过滤相比,基于项目的协同过滤推荐算法的思想出发点是完全相反的,但是计算方法一致。基于项目的协同过滤推荐算法是根据用户对与

协同过滤推荐算法与应用

机器学习算法day03_协同过滤推荐算法及应用课程大纲 课程目标: 1、理解协同过滤算法的核心思想 2、理解协同过滤算法的代码实现 3、掌握协同过滤算法的应用步骤:数据处理、建模、运算和结果判定

4、 1. CF协同过滤推荐算法原理 1.1 概述 什么是协同过滤(Collaborative Filtering, 简称CF)? 首先想一个简单的问题,如果你现在想看个电影,但你不知道具体看哪部,你会怎么做? 大部分的人会问问周围的朋友,看看最近有什么好看的电影推荐,而我们一般更倾向于从口味比较类似的朋友那里得到推荐。这就是协同过滤的核心思想。 协同过滤算法又分为基于用户的协同过滤算法和基于物品的协同过滤算法 1.2 案例需求 如下数据是各用户对各文档的偏好: 现在需要基于上述数据,给A用户推荐一篇文档

1.3 算法分析 1.3.1 基于用户相似度的分析 直觉分析:“用户A/B”都喜欢物品A和物品B,从而“用户A/B”的口味最为相近 因此,为“用户A”推荐物品时可参考“用户B”的偏好,从而推荐D 这种就是基于用户的协同过滤算法UserCF指导思想 1.3.2 基于物品相似度的分析 直觉分析:物品组合(A,D)被同时偏好出现的次数最多,因而可以认为A/D两件物品的相似度最高,从而,可以为选择了A物品的用户推荐D物品

这种就是基于物品的协同过滤算法ItemCF指导思想 1.4 算法要点 1.4.1、指导思想 这种过滤算法的有效性基础在于: 1、用户偏好具有相似性,即用户可分类。这种分类的特征越明显,推荐准确率越高 2、物品之间具有相似性,即偏好某物品的人,都很可能也同时偏好另一件相似物品 1.4.2、两种CF算法适用的场景 什么情况下使用哪种算法推荐效果会更好? 不同环境下这两种理论的有效性也不同,应用时需做相应调整。 a.如豆瓣上的文艺作品,用户对其的偏好程度与用户自身的品位关联性较强;适合UserCF b.而对于电子商务网站来说,商品之间的内在联系对用户的购买行为影响更为显著。 1.5 算法实现 总的来说,要实现协同过滤,需要一下几个步骤: 1.收集用户偏好 2.找到相似的用户或物品 3.计算推荐

基于用户的协同过滤推荐算法原理和实现

在推荐系统众多方法中,基于用户的协同过滤推荐算法是最早诞生的,原理也较为简单。该算法1992年提出并用于邮件过滤系统,两年后1994年被GroupLens 用于新闻过滤。一直到2000年,该算法都是推荐系统领域最著名的算法。 本文简单介绍基于用户的协同过滤算法思想以及原理,最后基于该算法实现园友的推荐,即根据你关注的人,为你推荐博客园中其他你有可能感兴趣的人。 基本思想 俗话说“物以类聚、人以群分”,拿看电影这个例子来说,如果你喜欢《蝙蝠侠》、《碟中谍》、《星际穿越》、《源代码》等电影,另外有个人也都喜欢这些电影,而且他还喜欢《钢铁侠》,则很有可能你也喜欢《钢铁侠》这部电影。 所以说,当一个用户A 需要个性化推荐时,可以先找到和他兴趣相似的用户群体G,然后把G 喜欢的、并且A 没有听说过的物品推荐给A,这就是基于用户的系统过滤算法。 原理 根据上述基本原理,我们可以将基于用户的协同过滤推荐算法拆分为两个步骤: 1. 找到与目标用户兴趣相似的用户集合 2. 找到这个集合中用户喜欢的、并且目标用户没有听说过的物品推荐给目标用户1. 发现兴趣相似的用户 通常用Jaccard 公式或者余弦相似度计算两个用户之间的相似度。设N(u) 为用户u 喜欢的物品集合,N(v) 为用户v 喜欢的物品集合,那么u 和v 的相似度是多少呢: Jaccard 公式: 余弦相似度:

假设目前共有4个用户:A、B、C、D;共有5个物品:a、b、c、d、e。用户与物品的关系(用户喜欢物品)如下图所示: 如何一下子计算所有用户之间的相似度呢?为计算方便,通常首先需要建立“物品—用户”的倒排表,如下图所示: 然后对于每个物品,喜欢他的用户,两两之间相同物品加1。例如喜欢物品a 的用户有A 和B,那么在矩阵中他们两两加1。如下图所示:

基于用户-项目特征的协同过滤推荐改进算法

基于用户-项目特征的协同过滤推荐改进算法 朱 珠,辜丽川,舒贵阳,冯娟娟,王 超,陈 卫 ( 安徽农业大学 信息与计算机学院,安徽 合肥 230036 ) 摘 要:基于用户的协同过滤推荐算法是当前使用范围最广的推荐算法之一。传统的协同过滤推荐算法仅依靠用户对项目的打分记录,数据稀疏度高而且来源单一,对用户间相似度测算的可信度影响较大。针对这一问题,引入用户画像信任度和类别评分差异度两个概念,对传统基于用户的协同过滤推荐算法进行改进,提出一种多维用户相似性计算方法,该算法通过调节用户画像信任度和类别评分差异度在用户相似性计算中的贡献系数,进而影响推荐算法评价指标MAE 的变化,实验结果表明,新算法较原算法在命中率和准确率上有较大提高。 关键词:用户画像; 项目类别; 相似性; 协同过滤 中图分类号:TP399 文献标识码:A 文章编号:1673-9639 (2017) 09-0015-05 协同过滤推荐算法[1-2]是应用最为广泛的推荐方法之一,在亚马逊网、Netflix 、YouTube 等在线电子商务[3]、移动应用[4]等领域作为个性化信息服务的解决方案,都有较为成功的应用。随着数据量增大,用户对项目的打分数量有限,每个用户的打分数量通常小于整体待评分项目的1‰,用户-项目打分矩阵数据稀疏等级高,数据重叠性低,严重制约了用户间相似度测算的可信度,降低了推荐算法的性能。因此,如何通过用户相似性计算为目标用户过滤出可靠的邻居用户成为算法亟待解决的关键问题。 为解决数据稀疏性问题,赵琴琴等[3]依据用户-项目评分矩阵,通过相似度传播,为目标用户寻找更多、更可靠的邻居,并分别从用户和项目两方面寻找用户、项目的相似性。胡勋等[5]为提高基于共同评分项目的用户相似度计算精度,使用推土机距离实现跨项目的移动用户相似度计算,提出一种将移动用户信任关系与项目评分特融合的协同过滤推荐算法; 贾冬艳等基于用户相似度计算的结果,动态选取目标用户的兴趣相似集,并依据用户评分信息计算目标用户与兴趣相似用户的信任度,实现双重邻居选取[1]。 以上处理方式在一定程度上缓和了数据稀疏性问题,但这些方式的数据来源单一,仅依赖于用户对项目的行为记录,没有考虑用户和项目自身特征差异对相似性的影响,用户信任度稳定性较低,往往导致推荐结果的准确率和命中率降低。为解决上述问题,本文引入“用户画像”和“用户对同一类别项目的评分量”两个度量因子,提出一种改进相似度的协同过滤推荐算法,实验结果证明该方法在准确度等方面有较大改善。 1.相关概念 1.1.度量相似性 1.1.1.余弦相似性 将用户i 和用户j 的评分向量视为n 维空间向 收稿日期:2017-03-22 基金项目:国家自然科学基金项目(31371533);安徽省重大科技专项(16030701092);安徽农业大学2015年度教育改革与发 展研究项目(18)。 作者简介:朱 珠(1992-),女,安徽六安人,硕士,研究方向:数据挖掘、机器学习等。 第19卷 第9期 铜仁学院学报 V ol. 19, No. 92017年 9 月 Journal of Tongren University Sep. 2017

基于协同过滤算法的电影推荐系统

基于协同过滤算法的电影推荐系统

————————————————————————————————作者:————————————————————————————————日期:

高级数据挖掘期末大作业

基于协同过滤算法的电影推荐系统 本电影推荐系统中运用的推荐算法是基于协同过滤算法(Collaborative Filtering Recommendation)。协同过滤是在信息过滤和信息系统中正迅速成为一项很受欢迎的技术。与传统的基于内容过滤直接分析内容进行推荐不同,协同过滤分析用户兴趣,在用户群中找到指定用户的相似(兴趣)用户,综合这些相似用户对某一信息的评价,形成系统对该指定用户对此信息的喜好程度预测。 电影推荐系统中引用了Apache Mahout提供的一个协同过滤算法的推荐引擎Taste,它实现了最基本的基于用户和基于内容的推荐算法,并提供了扩展接口,使用户方便的定义和实现自己的推荐算法。 电影推荐系统是基于用户的推荐系统,即当用户对某些电影评分之后,系统根据用户对电影评分的分值,判断用户的兴趣,先运用UserSimilarity计算用户间的相似度.UserNeighborhood根据用户相似度找到与该用户口味相似的邻居,最后由Recommender提供推荐个该用户可能感兴趣的电影详细信息。将用户评过分的电影信息和推荐给该用户的电影信息显示在网页结果页中,推荐完成。 一、Taste 介绍 Taste是Apache Mahout 提供的一个个性化推荐引擎的高效实现,该引擎基于java实现,可扩展性强,同时在mahout中对一些推荐算法进行了MapReduce 编程模式转化,从而可以利用hadoop的分布式架构,提高推荐算法的性能。 在Mahout0.5版本中的Taste,实现了多种推荐算法,其中有最基本的基于用户的和基于内容的推荐算法,也有比较高效的SlopeOne算法,以及处于研究阶段的基于SVD和线性插值的算法,同时Taste还提供了扩展接口,用于定制化开发基于内容或基于模型的个性化推荐算法。 Taste 不仅仅适用于Java 应用程序,还可以作为内部服务器的一个组件以HTTP 和Web Service 的形式向外界提供推荐的逻辑。Taste 的设计使它能满足企业对推荐引擎在性能、灵活性和可扩展性等方面的要求。 下图展示了构成Taste的核心组件:

基于用户的协同过滤算法

基于用户的协同过滤算法 作者:罗沐阳(2012101020028) 指导教师:张勇 【摘要】:随着网络技术的应用和普及、电子商务的迅猛发展,越来越多的信息充斥在网络之上。如何在众多的资源中找到适合自己需求的信息,成为众多学者、专家和网络用户火心的核心问题之一。个性化推荐技术在这样的背景下应运而生。协同过滤技术是个性化推荐技术最为核心的技术之一,也是目前应用最为广泛和成功的技术。本文主要研究的是基于用户的协同过滤推荐算法的实现。 【关键词】:协同过滤,相似度,个性化推荐 1.电子商务个性化推荐技术 1.1个性化推荐技术 电子商务对传统的商务交易产生了革命性的变化,从而要求“以产品为中心”向“面向客户”、“以客户为中心”的新的商业模式的转变,要求电子商务网站按客户群划分产品,围绕客户进行服务,为客户提供所需要的东西,所以对每个顾客提供个性化的服务成为必要。在这种背景下,推荐系统(Recommender System)应运而生,它是根据用户个人的喜好、习惯来向其推荐信息、商品的程序。电子商务网站可以使用推荐系统分析客户的消费偏好,向每个客户具有针对性地推荐产品,帮助用户从庞大的商品目录中挑选真正适合自己需要的商品,尽可能为每个顾客提供个性化的服务。 个性化推荐(personalized recommendation)技术通过研究不同用户的兴趣,主动为用户推荐最需要的资源,从而更好地解决互联网信息日益庞大与用户需求之间的矛盾。目前,推荐技术被广泛应用到电子商务、数字图书馆、新闻网站等系统中。因此,各种适用于推荐系统的技术应运而生,如协同过滤技(CF)、bayesian网技术、聚类分析技术、关联规则技术、神经网络技术和图模型技术等,其中,协同过滤是应用最为广泛的个性化推荐技术。协同过滤推荐又分为基于模型(Model-based)的协同过滤和基于用户的协同过滤。后来,sarwr 教授在2001年提出基于项目的协同过滤算法 1.2协同过滤 协同过滤推荐技术是用“相似统计”的方法发现具有相似偏好或是兴趣特征的“相邻用户”。“协同过滤”的思想最早由美国明尼苏达州大学的学者Paul Resnick在1994年,发表的《GroupLens: AnOpen Architecture for Collaborative Filtering of Netnews》一文中提出的。迄今为止, 协同过滤是在个性化推荐系统中应用最广泛和最被人们所认可的一种推荐技术。 协同过滤的基本原理是:根据用户对信息产品的评分情况,对其他用户进行检索, 找出与该用户“品味”相似的一小群人, 也就是“邻居”,然后再基于这些相似性进行信息产品评分预测,产生Top-N的推荐结果。

基于协同过滤算法的推荐系统设计

基于协同过滤算法的推荐系统设计 一、绪论: 长尾理论。 二、协同过滤算法的定义: (一)预定义: 要实现协同过滤算法,需要做以下的预定义: 1、邻域: 给定集合X,映射U:X→P(P(X))(其中P(P(X))是X的幂集的幂集),U 将X中的点x映射到X的子集族U(x)),称U(x)是X的邻域系以及U(x)中的元 素(即X的子集)为点x的邻域,当且仅当U满足以下的邻域公理: U1:若集合A∈U(x),则x∈A。 U2:若集合A,B∈U(x),则A∩B∈U(x)。 U3:若集合A∈U(x),且A ?B ?X,则B∈U(x)。 U4:若集合A∈U(x),则存在集合B∈U(x),使B ?A,且?y∈B,B∈U(y)。 2、皮尔逊相关系数: 皮尔逊相关系数是一种度量两个变量相似程度的一种方法,若变量X和变量Y线性相关,则其皮尔逊系数的z值域为[-1,1]。系数值为1表示完全正相关; 系数值为-1表示完全负相关。 3、曼哈顿距离: 4、欧几里得距离: 5、余弦相似度: 6、 Jaccard相似度: (二)基于用户的协同过滤算法: 在实际应用中,如果一个用户C需要得到个性化的推荐,那么根据这个用户过去喜欢过的物品,计算出与这个顾客有着相似偏好的用户,继而把这些相似的用户所喜欢的、且C没有喜好过的物品推荐给用户C,这就是基于用户的协同过滤算法的主要思路。 该方法主要包括两个步骤: 1、寻找和查询用户具有相似偏好的用户群体。 2、找到这些用户所喜欢的物品集合,选取其中用户最为感兴趣的子集推荐给 查询用户。 在步骤1中,我们使用相似度来度量两个用户之间的相似度。相似度的计算方法可以调用预定义中的皮尔逊相似度、余弦相似度、曼哈顿距离、欧几里得距离和jaccard相似度。记用户A和用户B之间的相似度为sim 在得到用户的相似度之后,我们需要给查询用户返回根据其兴趣度的T opK结果,我们用如下公式衡量用户的兴趣度: 公式 其中S(u,K)代表相似用户集中的前K个用户,N(i)代表喜欢物品i的用户集合。 R代表用户u对物品i的感兴趣程度。 下图代表基于用户协同过滤算法的主要流程: (三)基于物品的协同过滤算法: 在基于用户的协同过滤算法的基础上,又发展出了基于物品的协同过滤算法。 这主要是因为在一般的网站应用中,用户的数量往往远远大于物品的数量,这就造 成了计算用户之间的相似度成为一件非常耗时的工作:以余弦相似度为例。设一个

基于项目的协同过滤推荐算法

基于项目的协同过滤推荐算法采用统计技术来寻找与目标项目有相似评分的邻居项目,再基于邻居项目的评分数据预测目标项目的评分,从而选择预测评分最高的前若干项推荐给目标用户。整个算法基于用户一项目评分矩阵R ( m, n}进行。R( m, n}是一个mxn阶矩阵,m行表示m个用户,n列表示n个项目,矩阵,表示用户i对项目j的评分数据。 元素值R i ,j 一般情况下,网站用户数量增长比较快,而待评价项目比较稳定,因此计算出的项目相似度矩阵的更新频率比较低,所以此矩阵可以使用较长时间。基于项目的协同过滤推荐算法认为,用户对不同项目的评分具有相似性,先计算项目之间的相似性,当需要估计用户对某一项目的评分时,可以参照用户对其他项目的评分来进行判断[11]。 和基于用户的协同过滤推荐算法相似,该算法也分为三步: (1)建立用户—项目矩阵 M表示有m个用户,n为项目数量,矩阵中的R ij表示用户i对项目j的评价,可选取一定的范围数字表示。 (2)获取目标用户邻居 根据用户—项目矩阵,计算目标项目与其他项目的相似度,获得目标项目的项目邻居列表,其中,项目的相似度可根据上文提到的余弦相似性,皮尔森相似系数以及修正的余弦相似系数计算出来,从而采用TOP-N算法产生最近邻居集[2]。 (3)进行推荐 根据邻居对项目的评分来预测目标用户对项目的评分,可采用下面的一个公式:

U为邻居用户集,sim(T,n)表示目标项目与最近邻居的相似性,Ru, n表示用户u 对项目n 的评分; RT 和Rn 分别表示对项目T 和项目n的平均评分[11]。 基于项目的协同过滤推荐技术可以对基于一些复杂的,难以表达的概念(信息质量、品位)进行过滤,同时也可以推荐一些新特性。 但是,由于大型电子商务站点用户及商品项的数量庞大且不断增加,使得R ( m, n}成为高维矩阵,’用户给予评分的商品项很少,通常在1%以下[3j,导致R ( m, n}中的评分数据极端稀疏。因此,基于项目的协同过滤推荐算法面临严峻的用户评分数据稀疏性的挑战[m。文献[8了在其提出的优化算法中考虑到了项目的类别相似性,但只涉及项目的第1层分类,而未能扩展到实际商品在多类别多层次上的相似性。本文提出了计算项目类别相似性的方法,并将其与传统的项目评分相似性相结合,进一步求得项目综合相似性,从而提高最近邻居项目的搜寻准确度,同时也缓解了用户评分数据稀疏性问题。 2 基于项目的协同过滤推荐算法的不足 对于项目i、j之间的评分相似性simR(i,j),基于项目的协同过滤推荐算法主要采用以下3种方法进行度量:

基于协同过滤算法的电影推荐系统

高级数据挖掘期末大作业基于协同过滤算法的电影推荐系统

本电影推荐系统中运用的推荐算法是基于协同过滤算法(Collaborative Filtering Recommendation)。协同过滤是在信息过滤和信息系统中正迅速成为一项很受欢迎的技术。与传统的基于内容过滤直接分析内容进行推荐不同,协同过滤分析用户兴趣,在用户群中找到指定用户的相似(兴趣)用户,综合这些相似用户对某一信息的评价,形成系统对该指定用户对此信息的喜好程度预测。 电影推荐系统中引用了Apache Mahout提供的一个协同过滤算法的推荐引擎Taste,它实现了最基本的基于用户和基于内容的推荐算法,并提供了扩展接口,使用户方便的定义和实现自己的推荐算法。 电影推荐系统是基于用户的推荐系统,即当用户对某些电影评分之后,系统根据用户对电影评分的分值,判断用户的兴趣,先运用UserSimilarity计算用户间的相似度.UserNeighborhood根据用户相似度找到与该用户口味相似的邻居,最后由Recommender提供推荐个该用户可能感兴趣的电影详细信息。将用户评过分的电影信息和推荐给该用户的电影信息显示在网页结果页中,推荐完成。 一、Taste 介绍 Taste是Apache Mahout 提供的一个个性化推荐引擎的高效实现,该引擎基于java实现,可扩展性强,同时在mahout中对一些推荐算法进行了MapReduce 编程模式转化,从而可以利用hadoop的分布式架构,提高推荐算法的性能。 在版本中的Taste,实现了多种推荐算法,其中有最基本的基于用户的和基于内容的推荐算法,也有比较高效的SlopeOne算法,以及处于研究阶段的基于SVD和线性插值的算法,同时Taste还提供了扩展接口,用于定制化开发基于内容或基于模型的个性化推荐算法。 Taste 不仅仅适用于Java 应用程序,还可以作为内部服务器的一个组件以HTTP 和Web Service 的形式向外界提供推荐的逻辑。Taste 的设计使它能满足企业对推荐引擎在性能、灵活性和可扩展性等方面的要求。 下图展示了构成Taste的核心组件:

文本预览
相关文档 最新文档