package com.lt.hadoop.step2;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.text.DecimalFormat;
import java.util.ArrayList;
import java.util.List;
/**
* Created by taoshiliu on 2017/10/8.
*/
public class Mapper2 extends Mapper<LongWritable,Text,Text,Text> {
private Text outKey = new Text();
private Text outvalue = new Text();
private List<String> cacheList = new ArrayList<String>();
private DecimalFormat df = new DecimalFormat("0.00");
protected void setup(Context context) throws IOException,InterruptedException {
super.setup(context);
//通过输入流将全局缓存中的matrix2读入List<String>中
FileReader fr = new FileReader("itemUserScore");
BufferedReader br = new BufferedReader(fr);
String line = null;
while ((line = br.readLine()) != null) {
cacheList.add(line);
}
fr.close();
br.close();
}
protected void map(LongWritable key,Text value,Context context) throws IOException,InterruptedException {
String row_matrix1 = value.toString().split("\t")[0];
String[] column_value_array_matrix1 = value.toString().split("\t")[1].split(",");
double denominator1 = 0;
//计算左矩阵行的空间距离
for(String column_value : column_value_array_matrix1) {
String score = column_value.split("_")[1];
denominator1 += Double.valueOf(score) * Double.valueOf(score);
}
denominator1 = Math.sqrt(denominator1);
for(String line : cacheList) {
String row_matrix2 = line.toString().split("\t")[0];
String[] column_value_array_matrix2 = line.toString().split("\t")[1].split(",");
double denominator2 = 0;
//计算右矩阵行的空间距离
for(String column_value : column_value_array_matrix2) {
String score = column_value.split("_")[1];
denominator2 += Double.valueOf(score) * Double.valueOf(score);
}
denominator2 = Math.sqrt(denominator2);
int numerator = 0;
for(String column_value_matrix1 : column_value_array_matrix1) {
String column_matrix1 = column_value_matrix1.split("_")[0];
String value_matrix1 = column_value_matrix1.split("_")[1];
for(String column_value_matrix2:column_value_array_matrix2) {
if(column_value_matrix2.startsWith(column_matrix1 + "_")) {
String value_matrix2 = column_value_matrix2.split("_")[1];
numerator += Integer.valueOf(value_matrix1) * Integer.valueOf(value_matrix2);
}
}
}
//余弦相似度
double cos = numerator / (denominator1 * denominator2);
if(cos == 0) {
continue;
}
outKey.set(row_matrix1);
outvalue.set(row_matrix2 + "_" + df.format(cos));
context.write(outKey,outvalue);
}
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
ItemCF(基于物品的协同过滤推荐算法).zip
共20个文件
java:16个
xml:2个
properties:1个
需积分: 5 0 下载量 128 浏览量
2024-05-19
21:56:23
上传
评论
收藏 16KB ZIP 举报
温馨提示
协同过滤算法(Collaborative Filtering)是一种经典的推荐算法,其基本原理是“协同大家的反馈、评价和意见,一起对海量的信息进行过滤,从中筛选出用户可能感兴趣的信息”。它主要依赖于用户和物品之间的行为关系进行推荐。 协同过滤算法主要分为两类: 基于物品的协同过滤算法:给用户推荐与他之前喜欢的物品相似的物品。 基于用户的协同过滤算法:给用户推荐与他兴趣相似的用户喜欢的物品。 协同过滤算法的优点包括: 无需事先对商品或用户进行分类或标注,适用于各种类型的数据。 算法简单易懂,容易实现和部署。 推荐结果准确性较高,能够为用户提供个性化的推荐服务。 然而,协同过滤算法也存在一些缺点: 对数据量和数据质量要求较高,需要大量的历史数据和较高的数据质量。 容易受到“冷启动”问题的影响,即对新用户或新商品的推荐效果较差。 存在“同质化”问题,即推荐结果容易出现重复或相似的情况。 协同过滤算法在多个场景中有广泛的应用,如电商推荐系统、社交网络推荐和视频推荐系统等。在这些场景中,协同过滤算法可以根据用户的历史行为数据,推荐与用户兴趣相似的商品、用户或内容,从而提高用户的购买转化率、活跃度和社交体验。 未来,协同过滤算法的发展方向可能是结合其他推荐算法形成混合推荐系统,以充分发挥各算法的优势。
资源推荐
资源详情
资源评论
收起资源包目录
ItemCF(基于物品的协同过滤推荐算法).zip (20个子文件)
content
pom.xml 3KB
src
main
resources
log4j.properties 417B
java
com
lt
hadoop
step3
MR3.java 2KB
Reducer3.java 804B
Mapper3.java 1KB
step5
MR5.java 3KB
Reducer5.java 806B
Mapper5.java 2KB
step1
MR1.java 2KB
Mapper1.java 765B
Reducer1.java 2KB
step4
Reducer4.java 817B
MR4.java 3KB
Mapper4.java 2KB
job
JobRunner.java 2KB
step2
MR2.java 3KB
Mapper2.java 3KB
Reducer2.java 818B
webapp
WEB-INF
web.xml 1KB
.gitignore 251B
共 20 条
- 1
资源评论
生瓜蛋子
- 粉丝: 3828
- 资源: 5678
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- 程氏舞曲V4.2程氏舞曲V4.2程氏舞曲V4.2程氏舞曲V4.2
- FPGA读写 AD9708+ AD9280 ADDA实验Verilog逻辑源码Quartus工程文件+文档说明+硬件参考原理图
- 基于CH340C设计USB转TLL串口通信模块PADS 9.5设计硬件(原理图+PCB)文件.zip
- 信号与系统大作业-图像处理 实现了直接滤波法维纳滤波法最小二乘滤波法LR递归法matlab源码.zip
- php-leetcode题解之最小栈.zip
- php-leetcode题解之最长不含重复字符的子字符串.zip
- php-leetcode题解之最长公共前缀.zip
- php-leetcode题解之最小差值.zip
- php-leetcode题解之最小基因变化.zip
- php-leetcode题解之最小路径和.zip
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功