首页 > 编程知识 正文

协同过滤算法java代码,数据清洗的方法包括

时间:2023-05-03 18:30:33 阅读:20229 作者:4170

在推荐系统的众多方法中,用户协同过滤推荐算法诞生得最早,原理也比较简单。 该算法于1992年提出,用于邮件过滤系统,两年后于1994年被GroupLens用于新闻过滤。 到2000年,该算法是推荐系统领域最有名的算法。

本文简要介绍了基于用户的协同过滤算法的思想和原理,最后基于该算法实现园友推荐。 也就是说,根据你关心的人,推荐博客园里其他你可能感兴趣的人。

基本思想是“物以类聚,人以群分”。 拿看电影的例子来说,如果你喜欢《蝙蝠侠》、《碟中谍》、《星际穿越》、《源代码》等电影,那么别人也喜欢这些电影,而且他也喜欢《钢铁侠》,那么你可能也喜欢《钢铁侠》这部电影。

因此,如果一个用户a需要个性化推荐,他可以首先找到兴趣与他相似的用户组g,然后向a推荐他喜欢g且a从未听说过的项目。 这就是基于用户的系统过滤算法。

原理基于上述基本原理,可以将基于用户的协同过滤推荐算法分为两个步骤。

1 .找到与目标用户兴趣相似的用户集合

2 .找到此收藏中喜欢用户且目标用户从未听说过的内容并推荐给目标用户

1 .发现兴趣相似的用户通常使用Jaccard公式或余弦相似度来计算两个用户之间的相似度。 假设n(u )是用户u喜欢的项目的集合,n(u )是用户v喜欢的项目的集合,那么u和v的相似度是多少呢?

Jaccard公式:

余弦相似度:

假设目前有四个用户: a、b、c和d。 总共有五件物品。 a、b、c、d、e。 用户和物品的关系(用户喜欢物品)如下图所示。

如何一下子计算所有用户之间的相似度? 为了简化计算,通常必须首先创建“项-用户”转置表,如下图所示。

然后,对于每个项目,喜欢他的用户在2、2之间将同一项目加1。 例如,如果喜欢a的用户有a和b,则矩阵中包含2、2和加1。 如下图所示。

计算用户之间的相似度,上面的矩阵只表示式的分子部分。 以余弦相似度为例,进一步计算上图吧。

255);">      到此,计算用户相似度就大功告成,可以很直观的找到与目标用户兴趣较相似的用户。

2. 推荐物品

      首先需要从矩阵中找出与目标用户 u 最相似的 K 个用户,用集合 S(u, K) 表示,将 S 中用户喜欢的物品全部提取出来,并去除 u 已经喜欢的物品。对于每个候选物品 i ,用户 u 对它感兴趣的程度用如下公式计算:

      其中 rvi 表示用户 v 对 i 的喜欢程度,在本例中都是为 1,在一些需要用户给予评分的推荐系统中,则要代入用户评分。

      举个例子,假设我们要给 A 推荐物品,选取 K = 3 个相似用户,相似用户则是:B、C、D,那么他们喜欢过并且 A 没有喜欢过的物品有:c、e,那么分别计算 p(A, c) 和 p(A, e):

      看样子用户 A 对 c 和 e 的喜欢程度可能是一样的,在真实的推荐系统中,只要按得分排序,取前几个物品就可以了。

园友推荐

      在社交网络的推荐中,“物品”其实就是“人”,“喜欢一件物品”变为“关注的人”,这一节用上面的算法实现给我推荐 10 个园友。

1. 计算 10 名与我兴趣最相似的园友

      由于只是为我一个人做用户推荐,所以没必要建立一个庞大的用户两两之间相似度的矩阵了,与我兴趣相似的园友只会在这个群体产生:我关注的人的粉丝。除我自己之外,目前我一共关注了23名园友,这23名园友一共有22936个唯一粉丝,我对这22936个用户逐一计算了相似度,相似度排名前10的用户及相似度如下:

昵称关注数量共同数量相似度蓝枫叶1938540.373001923296126FBI080703330.361157559257308鱼非鱼330.361157559257308Lauce330.361157559257308蓝色蜗牛330.361157559257308shanyujin330.361157559257308Mr.Huang640.340502612303499对世界说你好640.340502612303499strucoder2880.31524416249564Mr.Vangogh430.3127716210856122. 计算对推荐园友的兴趣度

      这10名相似用户一共推荐了25名园友,计算得到兴趣度并排序:

排序昵称兴趣度1wolfy0.3730019232961262Artech0.3405026123034993Cat Chen0.3405026123034994WXWinter(冬)0.3405026123034995DanielWise0.3405026123034996一路前行0.315244162495647Liam Wang0.315244162495648usharei0.315244162495649CoderZh0.3152441624956410博客园团队0.3152441624956411深蓝色右手0.3152441624956412Kinglee0.3152441624956413Gnie0.3152441624956414riccc0.3152441624956415Braincol0.3152441624956416滴答的雨0.3152441624956417jmdjj Gao0.3152441624956418拼搏的钥匙.NET0.3152441624956419lqdhb0.3152441624956420浪端之渡鸟0.3152441624956421hldbd0.3152441624956422阿不0.3152441624956423JK_Rush0.3152441624956424xiaotie0.3152441624956425Leepy0.312771621085612

      只需要按需要取相似度排名前10名就可以了,不过看起来整个列表的推荐质量都还不错!

参考

难过的唇膏:《推荐系统实践》

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。