粉丝1214获赞2424

好的朋友们,今天我们就来看一下当前这个解封过滤提前算法的我们一个终极讲解啊, 因为现在的必胜的话,我们只做增商改查的一个管理系统已经很难通过了啊,需要去增加算法,而算法呢,我们百分之八十的一个学生系统呢,他都要加我们的一个推荐, 我们呢也是整理了一把我们的一个终极推荐啊,用我们四种主流的一个技术实践方式,然后可以无缝的去对接到我们的一个管理系统。 那么什么是过滤协通过滤推荐算法呢?他呢是一种我们最常见的一个推荐系统的一个算法,他呢基于我们的一个用户行为,还有我们的一个兴趣的一个相似性来进行一个个性化的一个推荐。这个算法的背景呢,可以追溯到我们的一个 信息过滤,还有我们的一个信息检索的一个领域。传统的我们的一个信息过滤方式,通常去依靠我们的一个人工规则,或者是基于我们内容的一个推荐算法来为用户进行推荐,但这种方式往往无法准确的去捕捉到我们用户的一个实际性使用,还有我们的一个个性化的一个偏好, 因此这个效果有限。所以为了解决这个问题啊,那么研究者们提出了一个协同过滤区间断法 这个思想呢,就是利用我们的一个历史行为数据,我例如我们的一个浏览数据啊,购买的一个数据啊,还有我们的一个评分,来挖掘我们用户的一个潜在兴趣,还有我们的一个行为模式。 具体来讲的话呢,我们的一个协同过滤推荐算法主要分为两种类型,一个是基于我们用户的协同过滤,还有我们基于物品的一个协同过滤 节能过滤推荐算法呢,有很多优点,例如我们可以利用用户行为数据呢,进行一个个性化的一个推荐,不依赖于我们的一个领域知识,适用于我们各种类型的一个物品 算法的话呢,也会存在一些我们的一个挑战,包括我们一个现实啊,例如我们一个冷启动的问题,你对这对于我们的一个新的一个系统的话呢,对我们新用户或者是新物品的一个推荐是比较困难的,因为没有热度。 而数据需求性的问题呢,我们是有一个用户与物品交互数据不够丰富啊,等等等等一系列的一个问题。 那么对于我们能启动的问题呢,我们对新用户或者是新物品的一个推荐困难呢?我们就可以比如说去默认去推荐一些物品啊,然后有了一个推荐表里面之后呢,我们就可以去对我们的数据进行一个行程过滤,提现 推荐算法进行一个计算,然后比如我们吸数据吸附性的一个问题,用户与物品的一个交互数据不够丰富的一个问题,那么这个呢,就需要和参考我们的一个能启动的一个问题,他们的解决方式呢,都是差不多的。 尽管呢我们是存在一些挑战,但协同过滤进行算法目前仍然是我们推荐系统领域当中最常用的一个算法, 他在我们电子商务、社交媒体或者是我们音乐啊,视频等领域都做到了广泛的一个应用啊, 并且呢通过不断的受到我们学术界还有工艺界的一个研究和关注,通过不断的去改进我们的算法,或者是结合其他的我们一些技术手段,然后去让他发挥我们更重要的一个作用。然后我们来看一下我们的一个算法原理, 基于我们用户的一个协同过滤体验算法,因为在基于用户的行动观啊过滤算法中呢,我们会去寻找与目标用户相似的一个其他用户,然后呢将我们这些相似用户的喜欢的物品,然后去推荐给我们一个目标用户。 就比如说,呃,你在刷抖音的时候,你刷抖音的时候呢,你和你朋友同时去喜欢了一个视频,然后呢当你的一个朋友呢去喜欢这个另外的一个视频之后呢,那么算法可以将这个他喜欢的视频可以推荐给你,这个呢就属于我们的一个基于用户的协同规律以上法。 那么什么是基于物品呢?基于物品呢就是会根据我们用物品之间的一个相似性,然后将我们用户喜欢的一个物品呢去推荐给他们。比如说我们用户 a 对我们物品 x 还有 y 他都有兴趣,而 而用户 b 呢,仅对我们的物品 x 感兴趣,那么算法就可以将我们一个物品 y 推荐给我们的一个用户 b, 因为物品 x 和物品 y 具有较高的相似性。那么我们这里来看一下我们当前这个例子啊,以我们课程推荐为例, 用户 a 他喜欢我们的一个课程 a, 还有我们的一个课程 c, 而用户 b 呢,他只喜欢我们的一个课程 b, 用户 c 呢,同时也喜欢我们的一个课程 c, 也喜欢我们的一个课程 d, 那么 a 和 c 他们两个都喜欢我们的一个课程 c, 那么我就可以将他的一个课程 d 推荐给我的一个用户 a, 这个呢就是寻找他们之间的一个相似性实现方式,实现方式呢,我们这里大致分为了一个四大种啊,首先呢我们来看一下我们哈豆腐的一个 实现,基于华豆腐的大数据平台呢,我们需要用到我们的一个 measus 的一个计算框架,实现基于物品的协同规律算法。然后我们需要实现以下步骤,首先第一步,我们输入呢是我们用户的一个评分数据,然后输出呢是我们用户的一个评分项量,然后去计算我们用户的一个评分项量, 然后呢第二步我们需要输入我们用户的一个评分数据,输出呢我们去计算完的一个铜线矩阵,然后去计算铜线次数,然后呢我们第三步,第三步的输入呢是我们的一个评分项量,还有铜线矩阵。最后的输出呢,是我们的一个相声结果,也就是计算我们的一个相似性。 然后第四步呢,就是我们三中的一个输出结果,然后对我们的一个输出呢进行一个排序,然后对结果进行一个排序,最后呢就是我们的一个结果,然后我们来看 看一下我们的一个视力啊, 可以看到我们的这个文件呢,还是比较多的啊,这里我为同学们打开第一个, 我们可以来看一下,这一步呢是得到我们用户评分的一个销量啊,可以看到这里呢对我们的数据呢进行一个读询,然后在 redug 呢对我们的一个数据呢进行一个计算,最后呢去输出到我们的一个 一直 diy 在上面。然后第二步,第二步呢由我们的一个用户评分项量得到我们的一个贡献矩阵,可以看到 一样是图形,注意,然后去对数据进行计算,因为我们的这个代码太多了,这里就给同学们展示前两步,然后我们接 接着往下走,这个呢就是我们 spot 的一个实线。首先呢我们要去加载我们的一个数据集,利用我们的一个 spot circle 去读取数据集,并且创建一个我们的一个 deterform, 其中呢一行代表我们一个用户对于物品的一个评分信息。 第二步呢去计算我们的一个物品相似度,利用我们的一个十八个麦乐博里面的 a, l, s 交替最小乘法,然后对我们的一个输入仪呢进行一个建模,计算物品之间的一个相似度,然后该算法呢现在已经将原始平分矩阵的分解成了两个地叠矩阵, 分别呢表示我们用户和物品的一个特征销量,从而去计算出来我们物品之间的一个相似度,生成我们的一个推荐列表。对于我们每个用户,根据用户的一个历史评分记录和物品的一个相似度信息呢去生成我们 我们的一个推荐列表。最后呢我们的一个评估推荐结果, 企图测试数据级,评估我们推荐系统的一个效果,例如我们可以计算准确率,找回率、覆盖率等我们的一个指标,以评估我们的一个推荐系统的准确程度呢和覆盖面 可以选择呢我们一个账号 spa, 还有我们的一个 py spa, 还有 spa 啦去编写我们的一个 spa, 分别实现我们以上的一个流程,我们可以来看一下, 一共是由我们三个版本,先来看我们的一个 java, 这个呢就是我们账号的一个版本啊,首先呢可以看到去加载我们 swag 的一个环境,利用我们本地的一个 logo 模式,对吧?这个没什么好说的。然后呢去我们去生成我们的一个评分模型, 然后拥护我们一个商品评分,然后将我们的一个输出呢去上传到我们的一个 h d f s 上面,然后读取我们 h d f s 中的一个文件,这个文件呢在我们的一个 这里大家是可以看到的啊,可以看到这个呢就是我们的一个频频接网。 然后呢去读取我们本地生成的一个模型,然后把我们读起的一个数据给它转化成 r、 d、 d。 这里呢我们去对我们的数据模型进行一个训练,生成一个测试模型。 最后呢把我们的结果去推荐给我们的一个用户,每个用户呢推荐我们的一个三个商品就能写的是五啊。然后呢把我们推荐的一个结果呢去给他存入到我们的一个数据库当中,当然这个也不是 我们一个文件就能够去完成的,这里有我们的一个纯数据库,包括我们的一个模型可以看到,还有我们的一个上传 可以看到的啊, 然后呢是我们的一个 p u s vlog 的一个版本,在 p u s s lug 版本当中呢,我们这边就直接去 构建我们的一个 spark 的一个运行环境,然后去下载我们的一个数据集,然后去删除我们的这两行数据啊, 这一步是为了去符合我们的一个数据。最后呢把我们的一个数据呢去给他转化成我们的一个 double 类型,然后去加载我们的模型,如果说我们当前这个模型已经存在,那么我们就直接从模型里面 去加载,不然每次的话呢都需要去建立模型,如果数据量比较大的话呢,这个是比较慢的啊,然后呢生成我们的一个推荐结构列表,最后呢把我们的一个推荐结果去插入到我们的一个买搜索当中,然后进行一个提交,最后呢写出我们的一个慢方法, 这个呢是我们的一个 scarla 版本, skara 的版本呢也是一样。这里呢我们首先去读取设置我们的一个环境,然后这里的话呢我们是配置一下我们的一个 myself 的一个环境, 然后去屏蔽我们的一个日日信息。这里呢我们去构建我们的一个模型,对每个用户呢推荐我们的两个商品,推荐 两个模型,然后我们的一个推荐理由包括我们的一个模型的一个误差计算。最后呢我们这边都会将我们的结果去给他计算出来,否则话我们这边就给他输出一个数据错误的。 然后我们来看一下我们的 zara 实现, zara 实现就是下载我们的营收集,然后去计算我们用户的一个相似度,然后去生成我们的一个推荐列表,然后评估我们的一个推荐结果。 这个的话呢我们也是整理出来了,可以看到去构建,然后这里呢我们去构建一个哈西曼,这里去添加我们一个用户评分,生成我们的一个推荐列表。这里的话呢也是一样,然后根据我们的一个余弦,然后去进行计算。 这里的话呢我们是指定寻找我们用户最相似的一个邻居用户啊,然后计算我们的一个相似组,这个呢是我们的一个测试数据啊,就能打印我们的一个推荐列表。 然后呢是我们的一个 pad 实现, pad 实现的话呢就是我们数据的数据与准备数据,我们用户评分的一个数据可以使用我们数据库里面的数据,包括我们一个日文件啊等等,然后去构建我们的一个评分矩阵,然后计算相似度,然后呢选择我们的一个邻居用户或物品, 然后生成我们的一个 t c 列表,然后评估和优化。 这里的话呢也是一样啊,可以看到添加我们一个用户评分,然后生成我们的一个推荐列表,这一步都是啊, 这个呢是我们计计算我们的一个相似度,然后这里的话也是一样,然后去添加我们的一个用户评分生成力量,最后呢对我们的一个数据进行一个打印。 应用领域呢,像我们电商啊、音乐啊、电影啊、图书啊这些都可以啊,这里呢我们以一个图书推荐为例啊,我们可以直接点七七进行调转,这里因为我的电脑是加载比较慢的啊,这里已经给同学们加载出来了,我给大家看一下。 当前这个呢是我们基于哈德普加 smog 的一个个性化图书推荐的一个系统,可以看到啊, 我们这里的使用推荐的是我们的一个 spa, 然后这个系统呢是我们的一个 september, 对吧?然后数据清楚,我们去把它存放在 h d, f, s 上面,然后后面 我们接着往上走,这里呢不同用户去进行一个登录啊, 可以看到这里的话呢是由我们图书查询,包括我们的一个一届图书,还有我们的一个图书推荐,当我们点击这个图书推荐之后呢,我们这里的数据呢就会从这里显示出来了,我们有所推荐的一个结果,这个就是我们所看到的一个表, 这里是在运行,可以看到啊,像我们推荐完的一个结果呢,就是像这个样子,我们的用户然后给他推荐我们的一个什么图书,然后这里他们相资之间的一个评分是多少, 可以看到图书推荐里面已经有这些数据了,帮他运行完,包括我们这里图书查询,我们首先要有借阅,然后才能够有对他进行一个推荐,这个就是我们前面讲到的一个能启动啊, 这个呢就是我们的一个实行原理,首先呢我们用户在我们的系统当中呢,对我们的图书进行一个借阅,然后或者是查询等操作,然后产生我们的一个记录,然后呢由我们的一个 mystical 去进行一个存储,进行一个记录, 然后呢我们这边去读取我们的一个节约记录,获取到我们用户编号,图书编号,还有我们的一个节约次数,计算我们的一个用户评分,也就是我们的一个项链啊,然后计算我们的一个铜钱次数,计算我们的一个相似度,然后对我们的结果进行一个排序。最后呢把我们的输出输出到我们的一个推荐本信息表,也是成 放在马思考当中的。然后呢在我们的一个图书推荐里面去把结果去给它显示出来,那么就会有同学说了,那么这个资料我该去哪里有领取呢?我们呢可以免费获取到我们更多的一个必须资料啊,这里呢我们有一个二维码,还有我们的一个微信号,同学们可以去自行加一下啊。


大家好,我是小黑黑,今天我们要讨论的主题是基于用户的协同过滤 user c f 算法。 通过这个视频,希望能够帮助大家理解协同过滤、相似度计算、推荐算法的工作原理等知识点。 user cf 的全称是 user based collaborative filter, 使用了朴素的人与群分的思想。 该算法的原理是先找到相似用户,再找到他们喜欢的物品。例如,用户 a 和用户 b 是相似的,我们现在要给用户 a a 推荐一些他之前没有关注的物品,那么这时就可以将 b 关注了,但 a 没有关注的物品,也就是可乐推荐给 a。 简单来说,基于用户的协同过滤,就是给用户推荐和他兴趣相似的其他用户喜欢的物品。 下面来看一个具体的案例,设有 a、 b、 c 三个用户,葡萄、草莓、西瓜、橘子四种水果。如果某个用户喜欢某个水果, 就将用户向水果连接一条实线箭头。如果要给某个用户推荐某个水果,就从水 水果向用户引一条虚线箭头。这里会发现用户 a 和用户 c 同时喜欢草莓和西瓜,可以认为 a 和 c 的喜好是相似的。另外,由于用户 a 单独喜欢葡萄和橘子, 而如果 c 又没有吃过这两种水果,那么就可以将葡萄和橘子推荐给用户 c。 从上面这个例子中可以看出, user cf 算法主要包含了两个重要的步骤, 第一个步骤是要找到与带推荐用户兴趣相似的用户集合。例如,想要为用户 c 推荐,就要想办法找出 出和 c 相似的其他用户。第二个步骤是选出这些相似用户喜欢的,并且目标用户没有关注的物品,将他们推荐给目标用户。 例如,找出 a 和 c 相似后,再找到 a 关注且 c 没有关注的水果、葡萄和橘子,将它们推荐给 c。 在第一个步骤中,我们需要计算两个用户的兴趣相似度。对于协同过滤算法中的相似度计算主要会基于用户的行为相似度。计算兴趣相似度。具体来说,用户的行为是喜欢某些 物品,将不同用户喜欢的物品列表看作是不同的集合,然后通过集合求相似的方法计算用户行为的相似度。 例如, c 一和 c 二代表了两个用户喜欢的物品, g 和 c 一包含了圆形、三角形、五边形, g 和 c 二包含了圆形、方形和五边形。我们要计算 c 一和 c 二的相似度, 就是 c 一和 c 二两个用户行为的相似度。 集合和集合之间的相似度计算方法有很多种, 比如有 jack 的相似系数、余弦相似度等等计算方法。下面我们就分别介绍这两种计算方法。 jacker 的相似系数可以用来比较有限集合之间的相似性与差异性。 设已至两个集合 a 和 b, jack 的系数等于 a 与 b 交集的大小和 a 与 b 并级的大小的比值。它的取值范围在零到一之间, 越接近一则表示越相似,越接近零则越不相似。其中一代表了两个集合完全重合,零代表了两个集合之间没有交集。 例如有 c 一和 c 二两个集合,我们要计算集合 c 一和 c 二的相似度。 c 一包含了圆形、三角形、五边形, c 二包含了圆形、正方形和五边形。观察 c 一和 c 二的交集是二对应圆形和五边形,并极是四对应圆形、五边形、方形和三角形。 因此, jacker 的相似系数就是二除以二加一,加一等于零点五。 第二种计算集合相似度的方法是基于余弦相似度计算 两个集合之间的口散相似度,计算如下,口散 a、 b 等于 a 和 b 交集的大小除以根号下, a 级 和大小呈 b 级和大小,它的取值范围同样在零到一之间。 例如,如果使用余弦相似度计算 c 一和 c 二的相似度,结果就是二除以根号下三乘三等于零点六六、七。 下面来看用户兴趣相似度的计算案例。设有四个用户,用大写的 a、 b、 c、 d 表示。 五个物品,用小写的 a、 b、 c、 d, e 表示。每个用户对每件物品都有一个评分,这个评分代表了用户对物品的喜好程度, 因此会得到一个四乘五的用户物品评分表。例如,在表格中,用户 a 对物品 a 的评分是三点零, 物品 c 的评分是横线,这说明用户 a 关注过物品 a, 但没有关注过物品 c。 设有两个用户,用户 u 和用户 v, 令 n u 和 n v 分别表示用户 u 和 v 曾经有过正向反馈的物品集合。 这两个集合包含了用户 u 和用户 v 喜欢的物品。例如,根据刚刚的表格, n a 包含了 a、 b, d, n, b 包含了 a、 c、 e。 我们可以基于 jack 的相似 或余弦相似度计算机和 a 和 b 的相似度 w、 a、 b。 结合用户物品的评分表,可以求出每个用户之间的相似度。这里以用户 c 来举例说明。使用余弦相似度计算 c 和 a b, d 的相似度 w, c, a, w, c, b 和 w c, d 在计算 c 和 a 的相似度 w, c, a 时,它等于 n c 与 n a 的交集数量。除以根号下 n, c 的元素数量乘 n a 的元素数量, 其中 n, c 中包含了 b 和 e, n, a 中包含了 a、 b, d。 因此,在结果的分子中, n, c 和 n a 的交集是 b, 对应数量是一。结果的分母是根号下两个集合的元素数量相乘等于根号二乘三,等于根号六,所以 w c, a 就等于根号六分之一。 另外, c 和 b 与 c 和 d 的相似度 w, c, b 和 w c, d。 按照同样的方法可以得到,计算结果是根号六分之一和根号六分之二。 从这个计算结果中可以看出, b 用户与 c 用户的相似度最大,为根号六分之二。 得到用户之间的兴趣相似度 后,我们要继续研究如何对某个用户进行推荐。 user cf 算法会为用户推荐和他兴趣最相似的 k 个用户的感兴趣物品,并且会对推荐的物品呢?做一个排序, 设 p u i 度量了某个用户 u 对某个物品 i 的感兴趣程度,后面要计算出全部带推荐用户和带推荐物品的感兴趣程度 p。 在计算 p u i 的公式中, s u k 代表了和用户 u 兴趣最接近的 k 个用户的集合, n i 是对物品 i 有过行为的用户集合, v 是这两个集合的交集中的用户 v 代表了和 u 最接近且对 i 有过行为的用户 w u, v 是用户 u 和用户 v 的相似度, r v i 是用户 v 对物品 i 的兴趣程度,是一个实数, 将 w u v 和 r v i 相乘,就代表了基于用户 v 对物品 i 打分儿,将全部的用户 v 对 i 的打分儿累加到一起,就得到了用户 u 对物品 i 的感兴趣程度。 接下来我们要根据这个公式计算某个用户 c 的推荐物品列表。 下面我们根据用户物品的评分表计算出用户 c 的推荐方法。 因为这里一共有四个用户,因此令大 k 等于三,也就是直接根据另外三个用户 a、 b、 d 的情况为用户 c 进行推荐。 首先找到 c 还没有关注过的物品,也就是表格中标记为横线的物品 a、 c、 d。 因此公式中的 u 就是 c, a 是 a c d。 我们要计算三个物品的推荐顺序,也就是 p c a, p c c 和 p c d 的大小关系。 首先计算用户 c 对物品 a 的兴趣程度, p c a。 其中用户 a 和 b 对该物品有过评价,分别是三点零和四点零。 用户 c 和用户 a 的相似度是 w c a 与用户 b 的相似度是 w c b。 这两个值在之前已经计算出来了,都是根号六分之一, 所以 p c a 等于 w, c a 乘三加 w, c, b 乘四等于七,除以根号六等于二点八五八同理,可以计算出 p c c 和 p c d。 最后将这三个值从大到小排序,顺序为 d a c i。 物品顺序就是对用户 c 的推荐顺序。 那么到这里,基于用户的协通过滤 user cf 算法就讲完了,感谢大家的观看,我们下节课再会。

hi, 大家好,这里是来自数据智能社区的 hopper, 那给大家介绍完了记忆内容的推荐算法的内容呢?那从这个视频开始,我们就开始给大家介绍协同过滤的算法了。那首先给大家讲一讲协同过滤算法的思想和算法原理。 从字面上理解,协同过滤包括协同和过滤两个操作。那所谓的协同呢,就是利用群体的行为来做决策。 生物上有一种协同进化的说法,也就是通过协同的作用,让群体逐步进化到更适应环境的状态。对于推荐系统来说呢,基于用户的持续协同操作,给用户的推荐会越来越准确。 而过滤就是从可行的决策方案中将用户喜欢的方案找出来的过程。那具体来说,协同过滤的思路就是通过群体的行为来找到某种相似性,也就是用户之间的相似性,或者 说标的物之间的相似性,然后通过该相似性来为用户做推荐。因此前通过利用了两个非常朴素的自然哲学思想,也就是群体的智慧和相似的物体具备相似的性质,那群体的智慧从数学上讲,应该满足一定的统计学规律,是一种朝平衡稳定态发展动态过程 越相似的物体,其化学及物理组成越一致,当然表现的外在特性也会更相似。那虽然这两个思想很简单,也很容易,但正是因为思想很朴素,价值呢反而更大。然后协同过滤算法的原理也比较简单,并且效果不错,也非常容易工程实现。 那协同过滤呢?分为基于用户的协同过滤和用于标的物的协同过滤这两类算法,这两类算法的核心呢,是很朴素的物以类聚,人以群分的思想,那关于这 这个思想呢,大家可以参考这本书的第二章的内容,我在之前也详细说过了,这就不再赘述了。那在真实的业务场景中,用户数和标定物数一般都是很大的,而每个用户只会操作有限的标定物,所以用户行为矩阵呢,是稀疏矩阵。 正因为矩阵是稀疏的,所以进行相似度计算以及为用户做推荐会更加简单一点。那相似度的计算呢,可以采用余弦相似度的算法,也就是计算两个向量 v 一 v 二之间的相似度。 那知道了如何来计算用户或者标的物之间的相似度呢?下面我们就来讲一讲如何为用户做个性化的推荐。 对于基于用户的协同规律来说,我们可以将该用户最相似的用户喜欢的标的五推荐给该用户,那用户 u 对标的五 s 的喜好度呢?就可以采用这个公式来计算,其中大 u 是与该用户最相 相似的用户的集合,那 school u i s 是用户 u i 对标题物 s 的喜好度,那 same u u i 是用户 u i 与用户 u 的相似度,那有了用户对每个标题物的评分,基于评分降许排列,就可以取评分最大的 top n 的标题物推荐给用户了。 那类似的基于标地物的协同过滤呢,就是将用户操作过的标地物最相似的标地物推荐给用户,那用户 u 对标地物 s 的喜好度可以采用这个公式来计算,那其中大 s 是所有用户操作过的标地物的列表, score u s i 是用户 u 对标地物 s i 的喜好度, 那 sim s i s 是标的五, s i 与 s 的相似度有了用户对每个标的物的评分,基于评分的降序排列,就可以取相似度最大的 top n 标的五推荐给用户了。 可见协同过滤算法的思路呢,非常直观,计算公式也相对简单一点,并且易于分布式的实现。同时该算法也不依赖于用户及其他的标的物的 mate data 信息。那这类算法呢,被 netflix、 亚马逊等大的互联网公司证明效果非常好, 能够为用户提供吸引性内容,所以一直以来呢,都在工业界有着非常广泛的应用。好,那我们这期视频就先到这里啦,大家可以上京东或者当当购买我们数据智能创始人刘强写的这一本 构建企业级推荐系统算法工程实现与案例分析,我们的视频内容也正是来源于这本书的。那我们下期再见啦!

那咱们终于啊要讲到这个协同过滤的一些细节了,嗯,咱们先来讲,就是说协同过滤啊,是分成两种, 一种呢叫做一个基于用户的行动过滤,另一种呢叫做一个基于物品的一个行动过滤啊,咱们一个个来说,先说啊,这样一个基于用户的,其实啊,就是说行动过滤啊,这两种啊,他都是类似的,也都比较简单哦, 据用户的行为过滤啊,假如说我现在有这么一个事吧,嗯,现在我有用户 a、 b、 c, 然后呢分别啊,对我这样一个 a、 b、 c, d 三啊四个物品进行了一个打分,然后呢,我想给 a 用户啊,就是给用 a a 用户啊推荐一些东西,怎么办呢? 是不是说按照咱们之前的一个思路啊,嗯,先把这个用户拿来,拿过来之后看一下我谁跟这个用户比较类似吧。那现在只有两个人,我拿这个 a 先跟 b 比了一下,比如说我可以把,到时候可以把这样一个啊,矩阵,矩阵截止啊,我都可以拿出来当成一个项链,有了项链之后就是 a 用户可以组成一个 a 用户的一个项链,平分项链啊,购买项链啊,都是可以的, b 用户有个 b 用户的项链, c 用户有 c 用户的项链, 比如像量之后啊,我们是不是可以计算他的相似度了?按照咱们之前给定的一些相似度的计量方式, a 和 b 能算相似度, a 和 c 呢也能算相似度。那现在啊,是不是说我算完相似度之后一看,哎呀,这个 c 离我 a 最近,那我就来找一下吧。 对于 c 来说啊,我 c 买了,买啊, c 买了这个 a 物品,那 a 也买了啊,我先不管了,这个 c 呢?买了物品 c 啊, a 也买了,也不管了, c 买物品, daa 还没买,是不是说我就可以把这个 d 物品推荐给 a 啦?这就是一个基于用户的一个行动过滤, 很简单吧,就是用户的行动过滤,就是说首先呢在用户当中去找这样一个相似度,找相似度之后,哎,再然后呢进行一个推荐,看你没买过什么,没买过当中选一个推荐过去不就 ok 了吗?这就是我们基于用户的一个行动过滤啊,主要的一个思想。 然后呢,咱们据用户的一个行动过滤啊,要解决什么样的一个问题啊?首先呢我们要把这样一个矩阵拿出来,这个矩阵呢就是说,比如说我们的一个这块一个列是表示一个, 就是比如说我的一个列,它是表示一个 user, 咱们的一个行呢,是表示一个 at 某,在这里啊,是不是说每个用户都对我的一个物品有一个打分呐?那现在我就得到了咱们的一个用户评分矩阵啊,这比如说用一个 r 来表示,但是啊这个 r 矩阵啊,有一个问题,就是说 通常情况下咱们的一个数据都是非常非常稀疏的,那对于这样一个矩阵来之后我们要做什么呢? 我们要做的就是说要推断一下,对于我们的一个矩阵当中来说,嗯,他不是有很多的一些空格值吗?比如说这个,哎,用户来说啊,第一用户零代表什么?零没买过,这个零也没买过,没买过怎么办呢?我要不要给他推荐他呀?要不要给推荐这个物品就找呗,找回,那最 找找跟他最相似的用户,看一下最相似的用户啊,买没买过这个东西?买过了给他推荐,买没买过暂时先不管,这就是我们要做的事, 我们要推断出,推断出来啊,矩阵当中的这个空格的一个值是什么?这就是我们基于用户的一个行动过滤啊,要找的一个,嗯,要做的一件事。刚才怎么做?给大家说过了,咱们 可以基于这样相似度,然后找用户,然后再进行一个推荐吧。那咱们基于用户的一个相同过滤啊,存在的一个问题是什么呢?最大的一个问题啊,就是说假设说我现在来了一个新用户, 来了一个新用户之后啊,这个用户还没买过任何,因为啊,对于这个新用户来说,他所有的一个项链都是零吧。 这个时候啊,你说我们能找到一个跟他类似的吗?这个时候就很难去找了吧。所以说呢,在咱们这个,嗯,咱们就是据用户的这样一个行动过程当中啊,一个很大的问题,新用户我们该怎么办呢? 还有一个问题啊,就是说,嗯,对一个物品,哎呀,假设说这个物品其实还蛮好的,只不过说离他最近的这些邻居啊,他可能就恰巧都没买过这个东西,但是恰巧这个物品蛮好的,然后也是这用户需要的。那是不是说基于邻居的来 说,邻居没买过东西啊,永远不会给他推荐啊?那这个时候怎么办?这个物品不就废了吗?把这样一个好东西啊给他放废掉了。这个就是说在咱们继续用户的协同过滤当中啊,出现的一些问题,那咱们该怎么样去解决这个问题呢啊?咱们有一些基础解决方案哦, 这些基础的解决方案就是一些大牛啊,他们在一些会议啊,或者说在一些报告上说了一下啊,对于这个吞咽系统来说呀, user base 的咱们的一个性能过滤,他出现问题的时候该怎么解决呢? 普遍来说啊,咱们相似度的计算,最好是用这个皮尔森的一个相似度啊,这是咱们一个通用的一个考量。然后呢,咱们可以考量就是另外一个指标,叫做一个共同打分的一个物品的数目。比如说啊,现在啊,我有两个值,一个是一个小恩,一个是一个大恩。小恩啊,就是说对于两 用户来说,嗯,他们共同打分的是有多少个?比如说大恩呢?大恩啊,我可以指定一个值,比如说指定个五十了吧。那假设说这个小恩啊,比如说,假如说 ab 两个用户啊, ab 两个用户来说,他们共同打分的有三十个,那是不是说这块我要乘上个五十分之三十, 那共同打分的有十个呢?那是不是乘上一个五十分之十啊?乘上十,五十分之十的,得出来数较小,五十分之三十呢,得出来数较大吧。 那这个时候我们就想,嗯,你是三十的,是说 a 和 b 更相似,还是十的时候说 a 和 b 更相似啊?肯定是越多越好吧, 只有两个用户啊,他们共同打分的东西越多越好才说,哎,他们关注的点是类似的吧。这个时候呢,我们也可以继续这样一种考量啊,加上这样一个量,对打分啊,进行这样一个规划处理, 可能呢零到五的一个取值范围啊,偏差有些大,咱们可以要给他规划成零到一的一个区间上归到零到一啊,我们可以更好的看出来,嗯,这个用户之间他喜欢东西的一个, 就比如说,嗯,归一化完之后啊,咱们就可以更清晰的对比一下两个用户之间啊,他们的一个相似度,这个呢主要是方便于咱们进行一个计算的,防止啊,咱们计算的一个偏差较大,因为可能就是说,呃,一个从一到一百分的一个评分系统来说,这个归一化完之后是零到一的吧, 那这个跟咱们传统积蓄做法是一样的,为了使得啊,咱们特征之间偏差没有那么大,让他们都是比较小的一个数,这样呢计算出来结果啊可能更可靠一些。嗯,这是一个像做一个玉值啊,玉值是比较常见的,咱们刚才说了可以用玉值啊做 这样一个半径,然后在这样一个半径上呢,我们可以找出来啊,哪些预值范围内是我可喜可以选择的一个这样的方案。 然后咱们还得讨论一个问题,就是说,嗯,基于用户的循行过滤啊,没流行起来,为什么呢?咱们刚才讲了这么多,是给大家讲这样一个算法 实际的用的过程当中啊,一基于用户的这种行动过滤用的非常非常少,为什么呢?首先第一个问题啊,咱们的数据是非常稀疏的,我们可以想啊,就是说 对于这个京东来说呀,京东来说,比如说啊,别说京东了,咱们说一个小点电商吧,随便举个例子吧,这个电商来说,他就有一万个客户,然后呢,他有一百万个商品,就通常来说啊,商品的个数是要大于用户的数量吧,这个,这个还不太好 去说,反正现在可能有些电商就是这些东西啊,已经相反了。咱们先来说这样一个问题啊,就是假设说咱们现在有这样一个稀疏的,嗯,对于一个用户来说,他能买的物品是有限的吧, 因为他呢就是即便的物品是很多很很多很多的,但是他能买的只有几个吧,可能只买了十个,只买了十个是不是说,但是呢,虽然说你买了十个,我这个表还是很大一张表吧, 因为你要把所有的咱们的一个物品都统一进来吧,表是很大的一个长度,是一百万的一个表,但是呢,我买的东西很少,哎呀,是不是大部分都是零,只有一小部分是一啊? 咱们这里就是说啊,非常稀疏的一个问题,这么稀疏的一个问题怎么办呢?不太好解决吧,是吧?所以说啊,咱们有这样一个稀疏的问题,你往往这么稀疏的表当中无论是计算还是填充都是一个非常大 大的一个难题。还有咱们要计算一个相似度。假设说啊,对于这个京东来说,有一千万个用户,一千万个用户啊,我在进行一个计算的时候怎么计算?咱们之前是不是说过了?嗯,这个切动过滤方法是基于中统计的方法去计算的吧? 据统计啊,咱们想,那要统计多少东西啊?两两个去计算相似度,两个两个算这两个算那两个算那两个,算后两个,算两个,两个去算这量怎么样?这个量非常大吧,有这么大的一个数据量啊, 这个计算起来不太好去算吧,所以说咱们这个计算量简直太大了。还有一个最大的问题是什么人是善变的吧?这点是一个客观的评价,就是说一个人喜欢什么,可能就是啊,今天我喜欢,明天我就不 喜欢了。推荐东西是不是可以产生一些误差呀?比如说今天这么说,今天我打王者,打王者荣耀,我去给他推荐王者荣耀这款产品,明天我就戒了,我能不能能把这个事戒了吧?那所以说啊,人是善变的,就是说,嗯,咱们在经营统计的时候,后台是怎么做到 后台这个大表得给维护好吧?基于实时的这个东西能做吗?现在基于实时的量太大了吧,很难去做。据后台我们要维护这样一个表,那维护这样一个表啊,这么庞大一个表,我要给他维护好了,是不是说不太容易啊? 那你这个人在这善变呢?你今天变完明天变,明天变完后天变,我时不常的更新一下这个表,难度大不大?是不是计算量很大呀?所以说啊,咱们这个基于用户的一个行动过滤啊。哎呀,现在不太流行,主要原因啊,就是一个计算量,还有就是说人是容易变的,还有这这样一个稀疏的问题。