文档章节

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

zhuyuping
 zhuyuping
发布于 2016/04/12 18:23
字数 1003
阅读 826
收藏 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
粉丝 304
博文 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

没有更多内容

加载失败,请刷新页面

加载更多

下一页

OSChina 周日乱弹 —— 种族不同,禁止交往

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @小小编辑:推荐歌曲《苏菲小姐》- 鱼果 《苏菲小姐》- 鱼果 手机党少年们想听歌,请使劲儿戳(这里) @貓夏:下大雨 正是睡觉的好时候 临睡前...

小小编辑
今天
211
6
Python 搭建简单服务器

Python动态服务器网页(需要使用WSGI接口),基本实现步骤如下: 1.等待客户端的链接,服务器会收到一个http协议的请求数据报 2.利用正则表达式对这个请求数据报进行解析(请求方式、提取出文...

代码打碟手
今天
1
0
Confluence 6 删除垃圾内容

属性(profile)垃圾 属性垃圾的定义为,一个垃圾用户在 Confluence 创建了用户,但是这个用户在自己的属性页面中添加了垃圾 URL。 如果你有很多垃圾用户在你的系统中创建了属性,你可以使用...

honeymose
今天
0
0
qduoj~前端~二次开发~打包docker镜像并上传到阿里云容器镜像仓库

上一篇文章https://my.oschina.net/finchxu/blog/1930017记录了怎么在本地修改前端,现在我要把我的修改添加到部署到本地的前端的docker容器中,然后打包这个容器成为一个本地镜像,然后把这...

虚拟世界的懒猫
今天
1
0
UML中 的各种符号含义

Class Notation A class notation consists of three parts: Class Name The name of the class appears in the first partition. Class Attributes Attributes are shown in the second par......

hutaishi
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部