协同过滤算法在JavaEE项目中应用
2017-08-14 11:47
127 查看
基于用户的协同过滤算法UserCF
基于用户的协同过滤,通过不同用户对物品的评分来评测用户之间的相似性,基于用户之间的相似性做出推荐。简单来讲就是:给用户推荐和他兴趣相似的其他用户喜欢的物品。
举例说明:
基于用户的 CF
的基本思想相当简单,基于用户对物品的偏好找到相邻邻居用户,然后将邻居用户喜欢的推荐给当前用户。计算上,就是将一个用户对所有物品的偏好作为一个向量来计算用户之间的相似度,找到K
邻居后,根据邻居的相似度权重以及他们对物品的偏好,预测当前用户没有偏好的未涉及物品,计算得到一个排序的物品列表作为推荐。图2
给出了一个例子,对于用户A,根据用户的历史偏好,这里只计算得到一个邻居–
用户C,然后将用户C
喜欢的物品D
推荐给用户A。
看一个简单算法应用举例吧
1. 首先建立一个java项目,引入以下mahout对应jar包。如图
2. 新建一个数据测试文件test.txt内容有三列,分别是用户ID,商品ID,兴趣打分。
3. 写一个类进行测试
public
static voidmain (String
args[])throws Exception{
// step:1 构建模型 2
计算相似度 3
查找k紧邻 4
构造推荐引擎
DataModel model =new FileDataModel(newFile("test.txt"));//文件名一定要是绝对路径
UserSimilarity similarity=new PearsonCorrelationSimilarity(model);
UserNeighborhood neighborhood =newNearestNUserNeighborhood(2,similarity,model);
Recommender recommender=new GenericUserBasedRecommender(model,neighborhood,similarity);
List<RecommendedItem>
recommendations=recommender.recommend(1, 2);//为用户1推荐两个ItemID
for(RecommendedItem
recommendation :recommendations){
System.out.println(recommendation);
}
}
详细代码参见mahoutTaste项目。
如果数据来自于数据库,典型的用户表和产品表,订单表等,sql语句如下:
selecta.username,b.productname,count(1) as dafen from t_order a inner joint_orderitem b on a.orderid=b.orderid group by a.username,b.productname;
将查询结果形成list,并循环写入文本文件中test.txt,然后根据test.txt进行分析每个用户的具体感兴趣的2个商品,存储到user_taste表中:user_taste:userID,itemids。后台定时分析。
当然也可以直接连接数据库来进行协同过滤算法数据调用,但目前支持的不是很全,比如Oracle数据库就不支持。
目前支持的基于jdbcDatamodel有:
1. org.apache.mahout.cf.taste.impl.model.file.FileDataModel
2. org.apache.mahout.cf.taste.impl.model.hbase.HBaseDataModel
3. org.apache.mahout.cf.taste.impl.model.cassandra.CassandraDataModel
4. org.apache.mahout.cf.taste.impl.model.mongodb.MongoDBDataModel
5. org.apache.mahout.cf.taste.impl.model.jdbc.SQL92JDBCDataModel
6. org.apache.mahout.cf.taste.impl.model.jdbc.MySQLJDBCDataModel
7. org.apache.mahout.cf.taste.impl.model.jdbc.PostgreSQLJDBCDataModel
8. org.apache.mahout.cf.taste.impl.model.jdbc.GenericJDBCDataModel
9. org.apache.mahout.cf.taste.impl.model.jdbc.*
另外如果是maven项目,只需要在maven项目导入一下gav坐标即可。如果远程仓库无法下载,可以考虑将jar下载下来,手动安装到本地仓库。
pom.xml:
<!-- mahout-->
<dependency>
<groupId>org.apache.mahout</groupId>
<artifactId>mahout-core</artifactId>
<version>${mahout.version}</version>
</dependency>
<dependency>
<groupId>org.apache.mahout</groupId>
<artifactId>mahout-integration</artifactId>
<version>${mahout.version}</version>
</dependency>
<dependency>
<groupId>org.apache.mahout</groupId>
<artifactId>mahout-math</artifactId>
<version>0.9</version>
</dependency>
<dependency>
<groupId>org.apache.mahout</groupId>
<artifactId>mahout-examples</artifactId>
<version>0.9</version>
</dependency>
基于用户的协同过滤,通过不同用户对物品的评分来评测用户之间的相似性,基于用户之间的相似性做出推荐。简单来讲就是:给用户推荐和他兴趣相似的其他用户喜欢的物品。
举例说明:
基于用户的 CF
的基本思想相当简单,基于用户对物品的偏好找到相邻邻居用户,然后将邻居用户喜欢的推荐给当前用户。计算上,就是将一个用户对所有物品的偏好作为一个向量来计算用户之间的相似度,找到K
邻居后,根据邻居的相似度权重以及他们对物品的偏好,预测当前用户没有偏好的未涉及物品,计算得到一个排序的物品列表作为推荐。图2
给出了一个例子,对于用户A,根据用户的历史偏好,这里只计算得到一个邻居–
用户C,然后将用户C
喜欢的物品D
推荐给用户A。
看一个简单算法应用举例吧
1. 首先建立一个java项目,引入以下mahout对应jar包。如图
2. 新建一个数据测试文件test.txt内容有三列,分别是用户ID,商品ID,兴趣打分。
3. 写一个类进行测试
public
static voidmain (String
args[])throws Exception{
// step:1 构建模型 2
计算相似度 3
查找k紧邻 4
构造推荐引擎
DataModel model =new FileDataModel(newFile("test.txt"));//文件名一定要是绝对路径
UserSimilarity similarity=new PearsonCorrelationSimilarity(model);
UserNeighborhood neighborhood =newNearestNUserNeighborhood(2,similarity,model);
Recommender recommender=new GenericUserBasedRecommender(model,neighborhood,similarity);
List<RecommendedItem>
recommendations=recommender.recommend(1, 2);//为用户1推荐两个ItemID
for(RecommendedItem
recommendation :recommendations){
System.out.println(recommendation);
}
}
详细代码参见mahoutTaste项目。
如果数据来自于数据库,典型的用户表和产品表,订单表等,sql语句如下:
selecta.username,b.productname,count(1) as dafen from t_order a inner joint_orderitem b on a.orderid=b.orderid group by a.username,b.productname;
将查询结果形成list,并循环写入文本文件中test.txt,然后根据test.txt进行分析每个用户的具体感兴趣的2个商品,存储到user_taste表中:user_taste:userID,itemids。后台定时分析。
当然也可以直接连接数据库来进行协同过滤算法数据调用,但目前支持的不是很全,比如Oracle数据库就不支持。
目前支持的基于jdbcDatamodel有:
1. org.apache.mahout.cf.taste.impl.model.file.FileDataModel
2. org.apache.mahout.cf.taste.impl.model.hbase.HBaseDataModel
3. org.apache.mahout.cf.taste.impl.model.cassandra.CassandraDataModel
4. org.apache.mahout.cf.taste.impl.model.mongodb.MongoDBDataModel
5. org.apache.mahout.cf.taste.impl.model.jdbc.SQL92JDBCDataModel
6. org.apache.mahout.cf.taste.impl.model.jdbc.MySQLJDBCDataModel
7. org.apache.mahout.cf.taste.impl.model.jdbc.PostgreSQLJDBCDataModel
8. org.apache.mahout.cf.taste.impl.model.jdbc.GenericJDBCDataModel
9. org.apache.mahout.cf.taste.impl.model.jdbc.*
另外如果是maven项目,只需要在maven项目导入一下gav坐标即可。如果远程仓库无法下载,可以考虑将jar下载下来,手动安装到本地仓库。
pom.xml:
<!-- mahout-->
<dependency>
<groupId>org.apache.mahout</groupId>
<artifactId>mahout-core</artifactId>
<version>${mahout.version}</version>
</dependency>
<dependency>
<groupId>org.apache.mahout</groupId>
<artifactId>mahout-integration</artifactId>
<version>${mahout.version}</version>
</dependency>
<dependency>
<groupId>org.apache.mahout</groupId>
<artifactId>mahout-math</artifactId>
<version>0.9</version>
</dependency>
<dependency>
<groupId>org.apache.mahout</groupId>
<artifactId>mahout-examples</artifactId>
<version>0.9</version>
</dependency>
相关文章推荐
- javaSE应用小程序到javaEE企业项目的连接---> javaWeb
- 使用MyEclipse开发Java EE应用:创建一个JavaEE EJB项目(下)
- 使用MyEclipse开发Java EE应用:创建一个JavaEE EJB项目(上)
- javaee综合应用---图书馆系统项目
- 第四周项目3 单链表的应用3)
- Spring在项目中的应用(一)
- django项目培训站-14-xadmin-基础设置主题全局设置站点头脚-应用名称中文
- 第四周项目3 - 单链表应用(2)
- 第八周项目2-对称矩阵压缩存储的实现与应用-
- 框架 day53 BOS项目练习(权限概述,权限数据模型,shiro入门{bos中应用})
- ios屏幕旋转 项目中应用
- JAVAEE——BOS物流项目06:分页查询、分区导出Excel文件、定区添加、分页问题总结
- 转载-项目管理培训及应用感受分析
- 基于Web的企业级应用因用户UI的友好性,导致大量核心企业应用项目失败---我们该如何应对?
- 【转】从一个项目谈XP在国内的应用
- 第九周项目4-广义表算法库及应用
- 第9周项目4-广义表算法库及应用(2)
- 第9周项目2 对称矩阵压缩存储的实现与应用(1)
- Equinox OSGi系列之四 创建自己的OSGi应用项目