2

我一直在考虑构建一个“喜欢 x 的人,也喜欢 y”类型的推荐系统,并且正在考虑使用 Vogoo,但是在查看了他们的代码之后,似乎有很多基于评级的最近邻。

在过去的几周里,我看到一些文章说大多数人要么根本不评分,要么评分 5 http://youtube-global.blogspot.com/2009/09/five-stars-dominate-评级.html

我目前没有实施评级系统,如果所有适用的评级都没有波动,我真的不认为有必要实施它。

这是否意味着 KNN 并不真正有价值?

有没有人有任何建议开发一个系统来根据过去的观看历史(被动过滤)获得相似的推荐?

我正在使用的数据是基于事件的,所以如果你看过男子双打网球、蓝鸟棒球、大学女子篮球等。我会推荐目前在你所在地区的其他活动,其他人看过在整个系统的类似事件中也看过。

我主要使用 PHP,但已经开始学习 Python(如果有帮助,可能还需要学习 Java)。

4

3 回答 3

3

好吧,对您的第一个问题的简短回答是否定的。如果您的数据没有变化(YouTube 明星),则很难做出推荐。

我可能建议的是尝试扩大您拥有的数据量。对于 YouTube 示例,不仅要查看星级,还要考虑观看视频的百分比。大量的暂停、搜索、倒带可能意味着用户喜欢视频并希望更频繁地看到部分内容,因此应该会从中得到提升。

至少在音乐界,进行推荐的标准方法是提出一个您可以使用的距离度量,它可以为您提供任意两首音乐之间的距离。然后,当您找出用户喜欢的音乐类型时,您可以通过根据距离度量选择“接近”的歌曲来选择与他们的口味相似的音乐。它们也称为相似度矩阵,其中距离高的两个项目相似度低。

所以问题归结为你如何产生这些相似性。您可以这样做的一种方法是计算有多少人观看了节目 A 也观看了节目 B。如果您对每一对事件都这样做,您将能够从您分析的语料库中提出建议。不幸的是,这并不能很好地扩展到为您还不知道有多少人观看的活动(现场活动而不是录制的活动)提供建议。

不过,这至少是一个开始。

于 2010-01-10T09:05:02.040 回答
1

在 Andrews 做出巨大反应之后,我决定解释我所做的事情,并希望它可以帮助其他人(尽管它可能特定于我的实现)。

请记住,我有很多事件的数据以及这些事件发生的地点。

我用来构建推荐的脚本就是这个。 http://www.codediesel.com/php/item-based-collaborative-filtering-php/

然而,由于系统中没有任何评级,并且由于基于用户的评级的“可疑”价值,我根据我在数据集中已有的相似性创建了评级。

我基本上是这样组织的

1) 用户一去男子网球比赛。
2) 获取所有其他参加男子网球比赛的用户。
3)对于每个参加男子网球比赛的用户,这些用户还参加了哪些其他运动?
4)对于其他每一项运动,有多少用户参加了这些活动作为计数。
对于第一个用户的运动,我使用该计数作为分数。
5)然后,对于每个打网球的用户,我根据他们参加了多少其他运动以及这些运动与第一位用户的得分建立了“与第一位用户的相似度”。
6)这为每个用户创建了一个距离分数,我将该距离分数应用为次要用户参加的每项运动的分数。
7)所有这些都被放入一个数组并传递给上面链接的推荐

根据我使用的样本量,这实际上比我预期的要好得多。

但是,它运行起来非常缓慢。不知道我将如何从这里取得进展。

于 2010-01-10T18:41:42.850 回答
0

的确,大多数人只评价他们真正喜欢的东西。您的时间数据很幸运,因为您可以免费获得诚实的、基于决策效用的“评级”,具体取决于用户观看这项运动的时长。

我会将他们观看该节目的时间记录为用户的“评分”。您的案例特别容易,因为您可以获得小数位的准确性!

于 2011-03-14T05:53:07.950 回答