博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据推荐系统系列 8种方法之一 User-CF 方式
阅读量:5775 次
发布时间:2019-06-18

本文共 3224 字,大约阅读时间需要 10 分钟。

hot3.png

       这是一个系列 数据推荐挖掘 方面 第一章,主要讲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

     181130_FKWi_937000.png

     下面我们来使用它

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
 ratings=context.textFile("c:/u.data").map(new Function
() { @Override public Rating call(String v1) throws Exception { List
 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
() { @Override public Boolean call(Rating v1) throws Exception { return v1!=null; } });    //分割部分用来做测试   //RDD
[] 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 无论是 什么挖掘 ,不一定是推荐,只要是查找相识性的情况,都可以用到它,比如 图像搜索 就可以用到它。一模一样,这种通用算法 也是我一直使用的。

     运行结果

    182301_8kT6_937000.png

     

 

转载于:https://my.oschina.net/yilian/blog/657517

你可能感兴趣的文章
洛谷P2179 骑行川藏
查看>>
暑假周总结三
查看>>
debian stretch + kernel 4.4 固件发布(支持硬件加速),可安装kodi
查看>>
js 小复习2
查看>>
JavaSelenium(1)-selenium简介
查看>>
Genymotion模拟器一滑动页面就跳到搜索003
查看>>
一个td里面怎么让两个div重叠
查看>>
Emacs常用命令
查看>>
在使用angular1.x的时候双向绑定的技巧
查看>>
(十八)js控制台方法
查看>>
VB关键字总结
查看>>
虚拟机类加载机制
查看>>
android代码生成jar包并混淆
查看>>
Java基础2-基本语法
查看>>
SPI总线通信电路设计
查看>>
一个不错的vue项目
查看>>
屏蔽指定IP访问网站
查看>>
[leetcode] 237. Delete Node in a Linked List
查看>>
python学习 第一天
查看>>
根据毫秒数计算出当前的“年/月/日/时/分/秒/星期”并不是件容易的事
查看>>