我需要根据用户评分对某些产品进行排序。
假设我们有3种产品{ a , b , c },我们就此产品提供了用户反馈。 哪个用户给我们反馈并不重要(如果你熟悉它,这个问题不是关于相关过滤的问题 - 用户兴趣不是这里的情况)
以下每一行都是用户在尝试比较3种产品时的反馈:
150分 - b 0分(这个用户只是告诉我们他对2个产品a和b的看法以及a和b的对比,尽管如此他得到150分然后b值0分)
150分 - c 20分
c 200分 - 10分(尽管前一个用户认为c比a更好)
200分 - b 40分 - c 100分
150分 - b 50分
150分 - b 20分
(这些评分仅仅是一个样本,在现实世界中,产品和评级的数量远大于此)
现在我需要一种算法来根据用户投票查找产品的排名。在我看来,最好的方法是用相关图描述这个问题,并将所有产品相互连接。
感谢任何形式的帮助或提示。
/ ************* *************** /
您不能只添加积分并计算产品积分的平均值 因为重要的是如何得出他的观点,假设 a 对 b 得到800分 - 然后 c 对 a得到10分喜欢这样:
200 - b 0
200 - b 0
200 - b 0
200 - b 0
c 10 - a 0(这意味着c优于a)
所以肯定 a 优于 b 但是小点10分 c 从 a 得到更好的排名>
/ ********************************************** ********************************** /
答案 0 :(得分:5)
你有一些挑战。添加排名 c 0 - b 20 ,你得到一个圆圈,其中 c< b< a< ç强>
当然,您的订单不仅不是特定的(来自< b< c&c;不遵循< c ),它也不是全部(可能有些元素你不能决定哪个更好,因为没有用户投票,甚至通过其他元素。
你得到的是disconnected, directed, finite graph。 (使用边缘的方向来说明哪个元素(节点更好)。
从某个节点开始,您可以找到更好的节点在图表中行进,也许找到多个不可比较的解决方案。如果再次访问起始节点,请停止处理该路径。
也许数学中的顺序理论可以帮助你:寻找order theory,偏序,Hasse diagram。
使这更加实用:
使用二维数组,每个元素包含一行和一列。在单元格(a,b)中计算评级的总和。从某个元素a开始,遵循所有positiv(> 0)连接,直到您到达没有positiv连接的节点或返回到您已访问过的节点。这些节点是您的解决方案。
答案 1 :(得分:3)
baysean rating system可能是您最好的选择 - 它会考虑一个项目的投票和相对投票数,以便给予加权分数。
答案 2 :(得分:1)
我认为您需要了解每个人对每种产品的投票方式 - 例如:
第1人投票:100表示a,50表示b,0表示c
第2人投票0投0票,投票票数200票,c投票票80票
这应该被翻译成:
person 1投票3投a,2投b,-1投c
人2投票-1为a,3为b,2为c
我正在使用的地方:
3为最高投票
2为第二高的
1表示最低的
和-1如果他们投票0(表示他们不喜欢/没有考虑产品)
我最初的想法无论如何