基于协同过滤的用户推荐的java例子

  • Post author:
  • Post category:java


### 基于协同过滤的用户推荐的java例子

#####  基于用户的协同过滤推荐算法


1. 基于用户的协同过滤推荐算法
2. 基于用户的协同过滤推荐算法通过寻找与目标用户具有相似评分的邻居用户,
通过查找邻居用户喜欢的项目,推测目标用户也具有相同的喜好。
基于用户的协同过滤推荐算法基本思想是:根据用户-项目评分矩阵查找当前用户的最近邻居,
利用最近邻居的评分来预测当前用户对项目的预测值,将评分最高的N个项目推荐给用户,
其中的项目可理解为系统处理的商品。其算法流程图如下图1所示。
3.
4.
![Image text](./image/recommend-process1.png)

#####  基于用户的协同过滤推荐算法实现步骤为

1. 实时统计user对item的打分,从而生成user-item表(即构建用户-项目评分矩阵);
2. 计算各个user之间的相似度,从而生成user-user的得分表,并进行排序;
3. 对每一user的item集合排序;
4. 针对预推荐的user,在user-user的得分表中选择与该用户最相似的N个用户,并在user-item表中选择这N个用户中已排序好的item集合中的topM;
5. 此时的N*M个商品即为该用户推荐的商品集。



##### 基于用户的协同过滤推荐算法实现步骤为

   
  实时统计user对item的打分,从而生成user-item表(即构建用户-项目评分矩阵);
  计算各个user之间的相似度,从而生成user-user的得分表,并进行排序;
SpliteFileAndMakeScoreTable

  对每一user的item集合排序;ReduceFileTest

  针对预推荐的user,在user-user的得分表中选择与该用户最相似的N个用户,并在user-item表中选择这N个用户中已排序好的item集合中的topM;
PredictTest

  此时的N*M个商品即为该用户推荐的商品集。


##### 例子步骤代码讲解


##### 1.SpliteFileAndMakeScoreTable


1. 输入训练数据train.csv。
2. 按照userId生产文件,统计每个用户输出对应的userId,itemId,动作类型(对item操作类型),操作次数。
3. 动作类型对应:包括浏览、收藏、加购物车、购买,对应取值分别是1、2、3、4。
4. 生成用户对item访问权重,动作类型映射权重值 。
5. 根据两用户的相同item的权重矩阵,来求两用户的相似度,生产文件score。
   
##### 2.ReduceFileTest


1. 把用户文件根据点击type,次数得到权重,按照权重值进行排序。
2. 类似上面的步骤3,4。

##### 3.PredictTest

1. 输入ReduceFileTest生成用户排序文件与第一步生成的用户间相似度文件。
2. 循环用户间相似度score文件,每个用户找相似度前5的用户对应权重前5的Items
3. 生成对应的文件predict。




##### 5.MatchTest2

    
    最近读到推荐系统中的TopN推荐,它的预测准确率一般是通过准确率和召回率来进行评估的,那么我们就要理解,什么是准确率,什么是召回率!
    
    准确率,顾名思义,就是准确程度。通过正确数/总数得到。而正确数是什么,总数是什么呢?
    
    召回率,我们可以理解为找到的数目与总的需要我们找到的数目的比,那在推荐系统中,什么是找到的数目,什么是需要我们总的找到的数目呢?
    
    精确率是针对我们 预测结果而言的,它表示的是预测为正的样本中有多少是真正的正样本。
    而 召回率是针对我们 原来的样本而言的,它表示的是样本中的正例有多少被预测正确了。
    
    其实就是分母不同,一个分母是预测为正的样本数,另一个是原来样本中所有的正样本数。但分子都是表示预测的正样本与原来正样本的交集


1. 详细讲解下本例子中的, 分子都是表示预测的正样本与原来正样本的交集;这里统计的是所有用户推荐值与实际值(就是指所有user文件中的items数量)的交集;
2. 统计准确率=上面的分子/预测推荐列表(predict里面的数量)
3. 召回率=上面的分子/真实样本值(所有样本userId对应的items数量)
4. F值
5. 更多关于准确率,召回率 https://blog.csdn.net/u013599298/article/details/60592095

```
推荐用户items:966
真实样本的items数量:30926
统计的真实值:228
precision=23.60248447204969%,recall=0.737243743128759%,f1=1.4298256616079268

```

##### 代码例子

1. https://github.com/andrexuDeveloper/recommendSystem.git
2.
3.



版权声明:本文为xhpscdx原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。