我正在研究评分算法。我有一套练习。它们都按级别进行分类(1 =最简单,5 =最困难)。
向用户展示了两个练习,应该确定哪个难度更大或者两者是否相等。根据用户的评分,应该调整级别。
我所做的: 我尝试了Elo等级。
我的问题: 是否有更好的算法来处理此用例? (到目前为止什么都没发现)
预先感谢并欢呼。 托比
答案 0 :(得分:0)
我会尝试以一种简单但有效的方式解决问题。
首先,只有在投票结果与系统实际期望值不同时,才更新练习等级。从现在开始,我将仅考虑用户输出与系统实际期望不同的情况。
第二,在两个级别有很大不同的地方,我将更加重视投票。对两个等级为2和3的练习的错误预期的影响应该比对两个等级为1和5的练习的错误预期的影响小。
也就是说,我的算法将遵循以下原则:
1-设置了一个恒定的百分比,我们称其为increment
。它确定了投票产生的影响百分比,并且可以根据用户数量进行修改。
2-对于“意外”投票,我将计算原始级别之间的差异(最低1)。
diff = max(1, abs(ex1.level - ex2.level))
3-我会根据increment
和diff
的乘积,以百分比的形式更新每个运动评分。
if (ex1 level expected bigger)
ex1.rating = ex1.rating + diff*increment;
else
ex1.rating = ex1.rating - diff*increment;
等级将是浮点数,等级将是rating
的四舍五入:
ex1.level = round(ex1.rating)
示例:
让我们设置increment = 0.1
。评级为2.0且等级2的exA
与评级为3.0且等级3的exB
进行了比较。
第一个用户选择exB
作为最难的用户。没有任何变化,因为这是系统预期的结果。
第二个用户选择exA
。这不是预期的结果。两次练习之间的差为1,因此评分被修改为1 * 0.1 = 0.1,
导致exA.rating = 2.1
的{{1}}