diff --git a/1675760919069.jpg b/1675760919069.jpg new file mode 100644 index 0000000..cd89cc3 Binary files /dev/null and b/1675760919069.jpg differ diff --git a/README.md b/README.md index aacddf2..ee1a129 100644 --- a/README.md +++ b/README.md @@ -37,10 +37,68 @@ 0.2-0.4 弱相关 0.0-0.2 极弱相关或无相关 +#### UserCF基于用户的协同过滤 + **算法思想** +![输入图片说明](userCF.png) +当一个用户A需要个性化推荐的时候,我们可以先找到和他有相似兴趣的其他用户,然后把那些用户喜欢的,而用户A没有听说过的物品推荐给A。 + **步骤** +所有基于用户的协同过滤算法步骤为: + +1. 找到和目标用户兴趣相似的其他用户集合 +2. 找到这个集合中的用户喜欢的,且目标用户没有听说过的物品推荐给目标用户 + + **缺点** +1.数据稀疏性 +一个大型的电子商务推荐系统一般有非常多的物品,用户可能买的其中不到1%的物品,不同用户之间购买的物品重叠性较低,导致算法无法找到一个用户的偏好相似的用户。这导致UserCF不适用与那些正反馈获取较困难的应用场景(如酒店预订,大件商品购买等低频应用) + +2.用户相似度矩阵维护度大 +UserCF需要维护用户相似度矩阵以便快速的找出Topn相似用户,该矩阵的存储开销非常大,存储空间随着用户数量的增加而增加,不适合用户数据量大的情况使用。 + +在互联网应用场景中,绝大多数产品的用户数都要远大于物品数,因此维护用户相似度矩阵的难度要大很多。 + +其适用于用户少,物品多,时效性较强的场合如新闻推荐场景。 + +#### ItemCF基于物品的协同过滤 + **算法思想** +![输入图片说明](itemCF.png) +由于UserCF的缺陷,导致很多电商平台并没有采用这种算法,而是采用了ItemCF算法实现推荐系统。基于物品的协同过滤基本思想是预先根据所以用户的历史偏好数据计算物品之间的相似度,然后把与用户喜欢的物品相类似的物品推荐给用户。ItemCF算法并不利用物品的内容属性计算物品间的相似度,主要通过分析用户的行为记录计算物品之间的相似度。 + **步骤** +基于物品的协同过滤算法步骤: + +1.计算物品之间的相似度 +2.根据物品的相似度和用户的历史行为给用户生成推荐列表(购买了该商品的用户也经常购买的其他商品) + + **缺点** +1.数据稀疏性 +![输入图片说明](1675760919069.jpg) +表中数据0代表用户没有商品打分,1代表用户对商品打分了 +想要计算物品相似度矩阵,则两个物品的向量需要满足至少同一行有2个1才能计算,即使有,如果行数过少,得出来得数据就不可靠。 +因而ItemCF算法使用与电商平台等User数量远大于Item数量得应用场景 + +2.物品相似度矩阵维护难度大 +对于有m个用户,n个物品,m>>n +则user相似度矩阵维度为:m*m +item相似度矩阵维度为:n*n +在user数量远远高于item数量时,维护item相似度矩阵要比user相似度矩阵容易。 +所以ItemCF适用于兴趣变化较为稳定,更接近与个性化的推荐。适合物品少,用户多,用户兴趣固定持久,物品更新速度不是太快的场合。如推荐艺术品,音乐电影等. + +#### UserCF和ItemCF的对比 +| | UserCF | ItemCF | +|---|---|---| +| 场景 | 适用于用户较少的场合,如果用户很多,计算用户相似度矩阵代价很大 | 适用于物品数量明显少于用户数的场合,如果物品很多,计算物品相似度矩阵难度很大 | +| 领域 | 时效性较强,用户个性化兴趣不太明显的领域,强调人与人之间的共性(微博热搜) | 长尾物品(小众物品)丰富,用户个性化需求强烈的领域,强调人的个性 | +| 实时性 | 在用户有新行为,不一定造成推荐结果的立即变化 | 用户有新行为,一定会导致推荐结果的实时变化 | +| 冷启动 | 在新用户对很少的物品产生行为后,不能立即对他进行个性化推荐,因为用户相似度表是每隔一段时间离线计算的(只要用户有新行为,那么相似用户就很有可能发生变化,需要更新相似用户,才能做出准确的推荐) | 新用户只要对一个物品产生行为,就可以给他推荐和该物品相关的其他物品 | +| 新物品 | 新物品上线一段时间后,一旦有用户对物品产生行为,就可以将新物品推荐给和对它产生行为的用户兴趣相似的其他用户 | 没有办法再不离线更新物品相似度表的情况下将新物品推荐给用户,因为新物品跟其他物品的相似度还没有计算,不能从相似性矩阵中找到对于的相似物品| +| 推荐理由| 很难提供令用户信服的推荐解释 | 利用用户的历史行为给用户做推荐解释,可以令用户比较信服 | + + #### 代码实现 ![输入图片说明](1675752085157.jpg) + + #### 软件架构 Spring boot单项目 diff --git a/itemCF.png b/itemCF.png new file mode 100644 index 0000000..c08bf8c Binary files /dev/null and b/itemCF.png differ diff --git a/userCF.png b/userCF.png new file mode 100644 index 0000000..b1330e7 Binary files /dev/null and b/userCF.png differ