我需要根据用户评级对一些产品进行排序。
假设我们有3个产品{a,b,c},并且我们有用户对该产品的反馈。哪个用户给我们反馈并不重要(如果您熟悉相关过滤,这个问题与相关过滤无关--这里的情况不是用户兴趣)。
以下每一行都是用户在试图比较这3种产品时的反馈:
A 150分-b 0分(这个用户刚刚告诉我们他对2种产品a和b的看法,并将a和b进行比较,他认为如果他给出150分,那么b就等于0)
A 150分-c 20点
C 200分-10分(尽管上一位用户认为c更好于a)
A 200分-b 40分-c 100点
A 150分-b 50点
A 150分-b 20点
(这些评级只是一个样本,在现实世界中,产品和评级的数量远远大于此)
现在,我需要一个基于用户投票的产品排名的算法。在我看来,最好的方法是用一个相关图来描述这个问题,并将所有的产品连接起来。
任何类型的帮助或提示都是值得赞赏的。
/********************************************************************************/
你不能只是加分并计算产品积分的平均值,因为它如何得到他的分数是很重要的。假设a对b获得800分,那么c在a上得到10分,如下所示:
A 200 -b 0
A 200 -b 0
A 200 -b 0
A 200 -b 0
C 10 -a 0(这意味着c优于a)
所以a绝对比b好,但是c得到了a的更好的排名。
/********************************************************************************/
发布于 2009-07-17 12:16:29
你有一些挑战。加上一个排序c 0-b 20,您就得到了一个圆圈,其中c 。
当然,您的顺序不仅仅是不传递(a不跟随< c ),它也不是完全的(可能有一些元素您无法决定哪个更好,因为没有用户投票,即使是通过其他元素。
你得到的是一个断开、有向、有限图。(使用边的方向来说明哪个元素(节点更好)。
从某个节点开始,您可以在图中找到更好的节点,可能会找到多个不可比较的解决方案。如果再次访问起始节点,请停止处理该路径。
也许数学中的有序理论可以帮助你:寻找序论,偏序,Hasse图。
为了使这更切合实际:
使用每个元素有一行和一列的二维数组。在单元格(a,b)中,计算评级的总和。从某个元素a开始,跟踪所有的位置(>0)连接,直到到达一个没有位置连接的节点,或者返回到您已经访问过的节点。这些节点是您的解决方案。
发布于 2009-07-17 11:01:42
一个baysean评级系统可能是你最好的选择--它考虑了一个项目的得票数和相对票数,以便给它一个加权分数。
发布于 2009-07-17 12:28:55
我认为你需要把每个人对每种产品的投票方式联系起来--例如:1人投票:a 100票,b 50票,c 0 2票a,b 200票,c 80票。
这应转化为:
1人投票3票赞成a票,2票赞成b票,1票赞成c票。
第2人投票-1票赞成,3票赞成,2票赞成。
我用的地方:
3票赞成
2位为第二高
最低一名
-1如果他们投0(表示他们不喜欢/不考虑该产品)
不管怎样,我最初的想法是
https://stackoverflow.com/questions/1142556
复制相似问题