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