- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
我目前正在使用贝叶斯排名算法对网站上的视频进行排名,每个视频都有:
喜欢
不喜欢
View
上传日期
任何人都可以喜欢
或不喜欢
视频,观看视频时总是views + 1
并且所有视频都有唯一的上传日期
。
数据结构
数据格式如下:
| id | title | likes | dislikes | views | upload_date |
|------|-----------|---------|------------|---------|---------------|
| 1 | Funny Cat | 9 | 2 | 18 | 2014-04-01 |
| 2 | Silly Dog | 9 | 2 | 500 | 2014-04-06 |
| 3 | Epic Fail | 100 | 0 | 200 | 2014-04-07 |
| 4 | Duck Song | 0 | 10000 | 10000 | 2014-04-08 |
| 5 | Trololool | 25 | 30 | 5000 | 2014-04-09 |
当前加权排名
以下加权比率算法用于对视频进行排名和排序,以便首先显示评分最高的视频。
此算法考虑了 bayesian average以提供更好的整体排名。
Weighted Rating (WR) = ((AV * AR) + (V * R))) / (AV + V)
AV = Average number of total votes
AR = Average rating
V = This items number of combined (likes + dislikes)
R = This items current rating (likes - dislikes)
当前 MySQL 查询示例
SELECT id, title, (((avg_vote * avg_rating) + ((likes + dislikes) * (likes / dislikes)) ) / (avg_vote + (likes + dislikes))) AS score
FROM video
INNER JOIN (SELECT ((SUM(likes) + SUM(dislikes)) / COUNT(id)) AS avg_vote FROM video) AS t1
INNER JOIN (SELECT ((SUM(likes) - SUM(dislikes)) / COUNT(id)) AS avg_rating FROM video) AS t2
ORDER BY score DESC
LIMIT 10
注意:views
和 upload_date
未考虑在内。
问题
排名目前运行良好,但我们似乎没有充分利用我们掌握的所有数据。
拥有likes
、dislikes
、views
和 upload_date
但只使用两个似乎是一种浪费,因为 views
和 upload_date
没有考虑到每个 like
/dislike
应该有多少权重。
例如在上面的数据结构表中,项目1
和2
都有相同数量的likes
/不喜欢
但是项目 2
是最近上传的,所以它的平均每日浏览量更高。
既然项目 2
在更短的时间内比那些 likes
/dislikes
有更多的喜欢和不喜欢,肯定应该加权更强?
新算法结果
理想情况下,考虑了 views
和 upload_date
的新算法会将数据排序为以下结果:
注意:avg_views
等于(views/days_since_upload)
| id | title | likes | dislikes | views | upload_date | avg_views |
|------|-----------|---------|------------|---------|---------------|-------------|
| 3 | Epic Fail | 100 | 0 | 200 | 2014-04-07 | 67 |
| 2 | Silly Dog | 9 | 2 | 500 | 2014-04-06 | 125 |
| 1 | Funny Cat | 9 | 2 | 18 | 2014-04-01 | 2 |
| 5 | Trololool | 25 | 30 | 5000 | 2014-04-09 | 5000 |
| 4 | Duck Song | 0 | 10000 | 10000 | 2014-04-08 | 5000 |
上面是一个简单的表示,数据越多,它就会变得越复杂。
问题
总而言之,我的问题是如何将 views
和 upload_date
纳入我当前的排名算法以改进视频排名方式?
我认为上面的示例通过计算 avg_views
是一个很好的方法,但是我应该把它添加到我拥有的排名算法中的什么位置呢?
可能存在更好的排名算法,如果是这种情况,请提供一个我可以使用的不同算法的示例,并说明使用它的好处。
最佳答案
直接采用观看百分比也不能准确表示项目的受欢迎程度。虽然 18 个中有 9 个赞比 500 个中有 9 个赞“强”,但一个视频获得 500 次观看而另一个视频只有 18 次的事实更能说明该视频的受欢迎程度。
获得大量观看次数的视频通常意味着它在广泛的观看者中非常受欢迎。它只获得一小部分喜欢或不喜欢通常是次要考虑因素。获得少量观看次数和大量点赞的视频通常表明该视频的定位非常狭窄。
如果您想在等式中加入观看次数,我建议您将从喜欢和不喜欢中得到的贝叶斯平均值乘以观看次数的对数。这应该能很好地解决问题。
除非您想使用多因素排名,否则喜欢、不喜欢和观看次数都会单独计算并赋予单独的权重。数学涉及更多,需要进行一些调整,但往往会给出更好的结果。例如,考虑一下人们通常会“喜欢”他们觉得有点有趣的视频,但只有在他们觉得令人反感时才会“不喜欢”。不喜欢比喜欢更强烈。
关于mysql - 使用喜欢/不喜欢和每天平均观看次数的排名算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22949258/
你好,我有一张 table : from | to | item | count ------- Jack | Danie| food | 10 Danie| Maria| food | 2 Ja
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎偏离主题,因为它缺乏足够的信息来诊断问题。 更详细地描述您的问题或 include a mini
我正在尝试解决以下面试问题 Given two arrays firstDay and lastDay representing the intervals in days of possible m
这个问题已经有答案了: Explanation of a output of a C program involving fork() (2 个回答) 已关闭 9 年前。 这是我从我的研究所去年的试卷
如何在 html 页面上重复一个 div X 次,可以说我想设置方差来声明重复次数。重复这个部分 5 次,我假设它是用 JS 的。 black BLUE WHITE strip 我
我目前使用类中的函数将数据插入数据库,如果每行成功插入(从 csv 文件),则会记录一条消息(logMessage 函数),以显示哪一行成功或失败。但是我想要已导入数据库的成功执行的计数。我遇到了一些
这个问题可能看起来非常基础,但我很难弄清楚如何做。我有一个整数,我需要使用 for 循环来循环整数次。 首先,我尝试了—— fn main() { let number = 10; // An
我正在准备 CS 125 期末考试,其中(简要地)介绍了 Big O Notation。 鉴于: Mergesort 的最佳运行时间为 O(N lg(N)),最坏运行时间为 O(N lg (N)) 有
关闭。这个问题需要更多focused .它目前不接受答案。 想改进这个问题吗? 更新问题,使其只关注一个问题 editing this post . 关闭 3 年前。 Improve this qu
我正在构建一个简单的程序来计算骰子实验中数字的频率,但我尝试扩展它并将最大 throw 次数增加到巨大的数字,通过反复试验,我发现最大限制为519253。 使用这个最大值,我也无法创建任何新数组,它会
这是一道面试题 There is an airline company that wants to provide new updates to all of its flight attendant
我正在尝试以一种可以节省我无数小时的繁琐数据输入的方式实现 Excel 自动化。这是我的问题。 我们需要为所有库存打印条形码,其中包括 4,000 种型号,每种型号都有特定数量。 Shopify是我们
我想根据给定的预定义级别(从级别 1 到级别 6)分离代码中的所有内容,现在我的 JSON 读取 $scope.myJson=[{ id: 1, level: 1, name: "any
我创建了一个菜单,它使用一些 CSS 和 jquery 在悬停时显示其子菜单。事情是,如果用户在菜单项上多次悬停,它会有点滑稽。这是网址:http://91.202.168.37/~ibi/ ,这是
假设我对每小时的事件数进行了如下统计: np.random.seed(42) idx = pd.date_range('2017-01-01', '2017-01-14', freq='1H') df
我想确保我正确理解了这个概念: 在 Hadoop 权威指南中指出:“设计文件系统的目标始终是减少与要传输的数据量相比的查找次数。”在此声明中,作者指的是 Hadoop 逻辑 block 的“seeks
我有一个用 C++11 编写的程序,我想计算 std::vector 的 move 和复制(构造和赋值)次数。对象。有办法吗? 最好的问候 最佳答案 否。 std::vector<>的执行没有办法做到
我们组织的帐户空间不足,我们一直在尝试剔除一些较旧的存储库。问题在于一些较旧的存储库可能仍然是事件服务的依赖项(即使它们多年未更新)。 我知道我们可以跟踪克隆,但据我所知,我们看不到直接下载/pull
我是一名优秀的程序员,十分优秀!