Mapreduce之基于内容的电影推荐(一)

Mapreduce之基于内容的电影推荐(一)

背景

你是不是很想知道腾讯或爱奇艺是如何为用户创建推荐电影?或者淘宝京东如何为用户推荐图书?肯定有某种魔法算法生成的这些推荐系统,那么有那些推荐系统呢?

这里介绍基于内容的推荐系统,基于内容的推荐系统会检查项目(如电影)的属性来为用户作出推荐,例如一个用户如果看了很多动作片,那么系统就会为他推荐这一类电影

原理

在基于内容的推荐系统中,我们得到的内容信息(如邻域和元数据)越多,算法就会变得越复杂,不过推荐也会变得更准确,更合理,如,要实现电影推荐,系统应当有一些元数据,如演员,导演和制片人,在这个例子中,算法仅限于对电影评分。接下来使用关联度算法,对Mapreduce处理好的数据来找出每个电影之间的关联,进而进行推荐。

MapReduce解决方案如下:

  • 阶段1:找出各个电影的评分总人数
  • 阶段2:对每个电影对A和B,找出同时对A和B评分的人
  • 阶段3:找出每两个相关的电影之间的关联,在这个阶段使用三个不同的关联度算法(Pearson,Cosine和Jaccard)一般的,要根据具体数据需求来选择关联度算法,不过这个阶段可以使用任何想要的算法作实验

样例输入

输入数据包括用户ID,电影ID,评分。

即< UserID > < MovieID > < rating >
样例生成程序如下:

package com.deng.MovieRecommend;

import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;

public class create {
    public static void main(String[] args) throws IOException, IOException {
        String path="input/movieRecommend.txt";
        File file=new File(path);
        if(!file.exists()){
            file.getParentFile().mkdirs();
        }
        file.createNewFile();
        FileWriter fw=new FileWriter(file,true);
        BufferedWriter bw=new BufferedWriter(fw);

        for(int i=0;i<5000;i++){
            int id=(int)(Math.random()*100)+1;
            int movieId=(int)(Math.random()*300);
            while(id==movieId) movieId=(int)(Math.random()*300);
            bw.write("UserId=User"+id+" Movie=Movie"+movieId+" rating="+(int)(Math.random()*5)+"\n");
        }
        bw.flush();
        bw.close();
        fw.close();
    }
}

程序创建5000行用户对电影评分的信息
在这里插入图片描述

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值