文档章节

数据推荐系统系列 8种方法之一 User-CF 方式

zhuyuping
 zhuyuping
发布于 2016/04/12 18:23
字数 1003
阅读 849
收藏 11

       这是一个系列 数据推荐挖掘 方面 第一章,主要讲8个方面 。1.USER-CF 2.COSIM-CF 3.ITEM-CF 4.RBM /MLP  6.KNNgraph 7.DNN 8.Logistic Regression



这一章我们讲一讲数据推荐系统 ,常用的几种方式 ,本系列全部是采用java来写。虽然 我能看懂scala 但是 scala的 sbt 那个工具 真是有够坑爹的。。。一直不喜欢使用scala ,反正 scala jvm上的语言 最后同java一样 编译成字节码class文件的,而且scala写的  能写的 java一样可以使用 使用java一样可以编写出来。

      这是第一个系列UserCF方面 ,UserCF 故名思意 就是通过 用户进行协同过滤 ,也就是说,加入 有  用户 项目 评分的三类数据, 使用用户项目 评分 2列数据 做相识性比较 比如jacard系数  皮尔逊系数 cos 余弦

然后得到该用户 相识的一些用户。然后把这些相识用户喜欢的项目推荐给他,比较适合找到热门的项目,所以 特别适合新闻这些,就是查看很多人很多人都大概喜欢的东西。

     下面 我们来使用它 。spark中自带有ALS方式 用来直接做User-CF推荐

    这里我就找电影数据来做测试。这里只是举个例子,我以前用来分析微博热门 就是用户 词汇 词频 一样的,其实 数据 无非就是 user item1 item....n  ratting

     

     下面我们来使用它

import java.util.List;

import org.apache.commons.lang3.math.NumberUtils;
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;
import org.apache.spark.api.java.function.Function;
import org.apache.spark.mllib.recommendation.ALS;
import org.apache.spark.mllib.recommendation.MatrixFactorizationModel;
import org.apache.spark.mllib.recommendation.Rating;
import org.apache.spark.rdd.RDD;

public class ALSTestMain {

	
	
	
	  public static void main(String[] args) {
		  System.setProperty("hadoop.home.dir", "C:\\spark\\hadoop-2.6.0");
		  SparkConf conf = new SparkConf().setAppName("ALS").setMaster("local");
		   System.out.println(System.getenv("HADOOP_HOME"));
		  JavaSparkContext context = new JavaSparkContext(conf);
		   JavaRDD<Rating> ratings=context.textFile("c:/u.data").map(new Function<String, Rating>() {

			@Override
			public Rating call(String v1) throws Exception {
				List<String> strs=com.google.common.base.Splitter.on("\t").splitToList(v1);
				//判断长度 就不做了 你们自己加上 返回null filter过滤就行 
				if(strs.size()!=4) return null;
				String uid=strs.get(0);
				String item1=strs.get(1);
				String rating=strs.get(2);
				//.... 这里有多个 我就不一个一个的写了 这里有了一个疑问 ,就是Rating用户product 只有1个 而我们item 却有多个 ,这个后面第二章讲的余弦定理 就很容易直接计算向量余炫,这里因为spark的自带ALS
				//使用它的原因 ,我们智能一个product ,这里 有个方式 就是 讲item1 item2 itemn 清洗一遍,所有的item 变成一个多维向量 LSH hash得到一个数 来代替
				String time=strs.get(3);
				if(!NumberUtils.isNumber(uid)) return null;//排除第一行
				return new Rating(Integer.valueOf(uid), Integer.valueOf(item1),Double.valueOf(rating));
				
			}
		}).filter(new Function<Rating, Boolean>() {
			
			@Override
			public Boolean call(Rating v1) throws Exception {
				
				return v1!=null;
			}
		});
		   //分割部分用来做测试
		  //RDD<Rating>[] splitsdatas = ratings.rdd().randomSplit(new double[]{0.7,0.3}, 123456L);
		  int rank = 10;
	      int numIterations = 10;
	      //取训练数据来做训练 splitsdatas[0] 另外做校验
	      MatrixFactorizationModel model = ALS.train(ratings.rdd(), rank, numIterations, 0.01);
	      //得到模型 model
	      model.save(context.sc(), "c:/als.model");
	      System.out.println("#####################模型ALS保存到als.model中################");
	      //model.load
	      //预测
	      //model.predict(user, product)
	}
	
	
	
	
	
	
	
	
	
}


    这里要说一下mlib 与 ml的区别,ml是机器学习高级的api ,mlib是使用ml包进行边界封装的一个包。使用更方便,但是没有多少类,ml包含所有的类

    这一个ALS 只适合 单项目的情况,多项目情况,要使用我一篇文章写得LSH敏感hash的 得到的integer 。如果要使用多个item  来进行 用户的相识性 判断,下篇文章 就讲一种通用的算法 ,适合 所有的 情况 ,无论是多个item 无论是 什么挖掘 ,不一定是推荐,只要是查找相识性的情况,都可以用到它,比如 图像搜索 就可以用到它。一模一样,这种通用算法 也是我一直使用的。

     运行结果

    

     

 


© 著作权归作者所有

共有 人打赏支持
zhuyuping
粉丝 307
博文 36
码字总数 51047
作品 0
徐汇
程序员
数据推荐系统系列 8种方法之一 CosSim余弦相识性方式

首先 我们来讲讲 余弦 ,如果两个向量 越相识 那么 他们的余弦 A*B的内积 除掉 A B的积 那么 余弦的夹角越小 也就趋近于1 也就是说 如果两个向量的余弦 越小 。余弦值越接近1,就表明夹角越接...

zhuyuping
2016/05/06
82
0
实时推荐系统的3种方式

推荐系统介绍 自从1992年施乐的科学家为了解决信息负载的问题,第一次提出协同过滤算法,个性化推荐已经经过了二十几年的发展。1998年,林登和他的同事申请了“item-to-item”协同过滤技术的...

-_-一条狗
2016/02/24
102
0
[论文学习]RecSys’16 Workshop on Deep Learning for Recommender Systems (DLRS)

cited: Karatzoglou A, Hidasi B, Tikk D, et al. RecSys' 16 Workshop on Deep Learning for Recommender Systems (DLRS)[C]//Proceedings of the 10th ACM Conference on Recommender Syst......

somTian
2017/06/19
0
0
探索推荐引擎内部的秘密,第 2 部分: 深入推荐引擎相关算法 - 协同过滤(一)

集体智慧和协同过滤 什么是集体智慧 集体智慧 (Collective Intelligence) 并不是 Web2.0 时代特有的,只是在 Web2.0 时代,大家在 Web 应用中利用集体智慧构建更加有趣的应用或者得到更好的用...

东方神剑
2014/11/13
0
0
探索推荐引擎内部的秘密,第 2 部分: 深入推荐引擎相关算法 - 协同过滤

集体智慧和协同过滤 什么是集体智慧 集体智慧 (Collective Intelligence) 并不是 Web2.0 时代特有的,只是在 Web2.0 时代,大家在 Web 应用中利用集体智慧构建更加有趣的应用或者得到更好的用...

Endeavour
2015/08/12
0
0

没有更多内容

加载失败,请刷新页面

加载更多

spring只

一、IOC(Inversion of Control)或者依赖注入(Dependency Injection) 1、底层实现原理:反射 2、三大核心接口: BeanFactory:简单容器系列,只是实现了容器最基本的功能。 ApplicationC...

狠一点
8分钟前
0
0
缓存架构SpringBoot集成Curator实现zookeeper分布式锁

一、分布式锁简介 1、什么是锁 在单机环境下,当存在多个线程可以同时改变某个共享变量时,就需要同步来实现该功能,使其线程安全。 而同步就是通过锁来实现的。锁保证了同一时刻只有一个线程...

架构师springboot
10分钟前
0
0
11《Java核心技术》之Java提供了哪些IO方式? NIO如何实现多路复用?

一、提出问题 IO 一直是软件开发中的核心部分之一,伴随着海量数据增长和分布式系统的发展,IO 扩展能力愈发重要。幸运的是,Java 平台 IO 机制经过不断完善,虽然在某些方面仍有不足,但已经...

飞鱼说编程
17分钟前
0
0
简单介绍Java 的JAR包、EAR包、WAR包区别

WAR包 WAR(Web Archive file)网络应用程序文件,是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件。War专用于Web方面。大部分的JAVA WEB工程,都是打成WAR包进行发布的。 War是...

linuxprobe16
17分钟前
0
0
55:Mysql用户管理|常用sql语句|mysql数据库备份恢复

1、Mysql用户管理; 场景,为了安全,新建的站点,创建新的用户,或者给已有用户授权,对某个库或者某个表有权限; 语法: grant all on *.* to 'user'@'127.0.0.1' identified by 'password'; g...

芬野de博客
21分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部