spark基于物品的推荐_Spark(一):基于物品的协同过滤推荐算法原理介绍及Python代码解读-Go语言中文社区...

本文介绍了基于物品的协同过滤推荐算法的原理,该算法通过分析用户行为计算物品相似度,并给出Python代码实现。主要包括计算物品相似度、生成推荐列表的步骤,以及详细解读了代码的功能。
摘要由CSDN通过智能技术生成

基于物品的协同过滤算法的原理:

基于物品的协同过滤算法给用户推荐那些和他们之前喜欢的物品相似的物品。不过ItemCF算法并不利用物品的内容属性计算物品之间的相似度,它主要通过分析用户的行为记录计算用户之间的相似度,也就是说物品A和物品B具有很大的相似度是因为喜欢物品A的用户大都也喜欢物品B(这一点也是基于物品的协同过滤算法和基于内容的推荐算法最主要的区别)。同时,基于物品的协同过滤算法可以利用用户的历史行为给推荐结果提供推荐解释,用于解释的物品都是用户之前喜欢的或者购买的物品。

算法主要分为两步:

一、计算物品之间的相似度;

二、根据物品的相似度和用户的历史行为给用户生成推荐列表;

第一步计算物品相似度根据公式:

N(i)表示喜欢物品i的用户数,N(j)表示喜欢物品j的用户数,两个求交表示同时喜欢i和j的用户数。

上面公式说明如果两个物品同时属于很多用户的兴趣列表,那么它们很有可能属于同一个领域,即具有很大的相似度。

第二步是在生成相似度基础上给用户生成推荐列表,公式为:

Pui表示用户u对物品i的感兴趣程度。求和公式下N(u)表示用户u感兴趣的物品,S(j,k)表示与物品j最相似的物品的集合。Wij表示i与j的相似度。rui表示用户u对物品i的兴趣(对于隐反馈数据集,r=1)。

参考代码:

# -*- coding: utf-8 -*-

'''

Created on 2017年9月18日

@author: Jason.F

'''

import math

import random

import os

from itertools import islice

class ItemBasedCF:

def __init__(self, datafile = None):

self.datafile = datafile

self.readData()

self.splitData()

def readData(self,datafile = None):

self.datafile = datafile or self.datafile

self.data = []

file = open(self.datafile,'r')

for line in islice(file, 1, None): #file.readlines():

userid, itemid, record = line.split(',&#

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值