3

我有一个算法,可以选择应该符合用户喜好的项目列表。
由于机密性问题,我将跳过算法的细节......

现在,我正试图想出一种方法来统计检查它,与一群人一起。
我现在检查的方式是:

  1. 算法为每个用户获得最佳结果。
  2. 将前 5 个结果与最低 5 个结果随机排列。
  3. 让人们按顺序列出他喜欢的结果(0 = 最喜欢,9 = 不喜欢)
  4. 将用户结果与算法结果进行比较。

我这样做是因为我认为为了表明算法选择了好的结果,我需要输入一些不好的结果并表明算法也知道它的坏结果。

所以,我要问的是:

用低结果洗牌是个好主意吗?

如果没有,您是否知道如何获得关于算法与用户偏好匹配程度的良好统计数据(我们有可以选择东西的用户)?

4

3 回答 3

4

你的方法是有偏见的。如果你使用前 5 和后 5 的结果,很有可能用户是按照你的算法排序的。假设我们有一个对音乐进行评分的算法,我将前 1 名和后 1 名呈现给用户:

当然用户会像你的算法一样标记它,因为顶部和底部之间的差异是如此之大。您需要让用户对随机选择的项目进行评分。

于 2011-06-25T19:00:47.503 回答
4

与混合顶部和底部猜测的问题无关,如上所述,实验过程的一个隐含缺点是,与用户选择相关的数据只能在算法的一个特定版本的上下文中被利用
当/如果算法或其参数一旦被微调过,过去用户选择的记录就不能被重用来验证算法的变化。

关于混合高低结果:
通过混合算法的顶部和底部猜测来生成项目集的主要缺点是,它可能会使用于衡量算法执行情况的误差/距离函数的选择进一步复杂化。除非项目的两个子集(最顶部的选择,最底部的选择)为了计算不同的测量值而分开保存,否则典型的误差统计测量值(例如 RMSE)将不是有效算法质量的良好测量值。
例如,一个算法经常建议,最终被用户挑选为首选的低猜测项目可能具有与从不混淆高点和低点但用户倾向于重新排序项目的算法相同的平均错误率更多在他们的子集中。

第二个缺点是算法评估方法可能仅仅限定了它过滤用户对它[算法]选择的项目的相对喜欢/不喜欢的能力,而不是它产生用户实际最佳选择的能力。 换句话说,用户的实际最佳选择可能永远不会提供给他;所以是的,该算法很好地猜测用户会喜欢在说唱之前说摇滚乐,但永远不会猜测实际上用户更喜欢古典巴洛克音乐。

于 2011-06-25T20:03:16.103 回答
4

首先问自己:

我想测量什么?

不要在这里讨论其他提交,但是虽然 mjv 和 Sjoerd 的答案提供了一些似是而非的启发式理由,说明您尝试做的事情可能无法按预期工作;它们没有建设性,因为它们没有解释为什么你的实验有缺陷,以及你可以做些什么来改进它。在解决这些问题中的任何一个之前,您需要做的是定义您希望测量的内容,然后才应该开始尝试设计一个实验。

现在,我不能确定什么是适合您目的的良好指标,但我可以为您提供一些建议。作为起点,您可以尝试使用精确率与召回率图:

http://en.wikipedia.org/wiki/Precision_and_recall

这是一种标准技术,用于评估机器学习和信息检索(即网络搜索)中排名和分类算法的性能。如果您有工程背景,了解精度/召回率概括了精度/准确度的概念可能会有所帮助:

http://en.wikipedia.org/wiki/Accuracy_and_precision

现在让我们假设你的算法做了这样的事情;它将有关用户的一些先前数据作为输入,然后返回用户可能喜欢的其他项目的排名列表。例如,您的算法是网络搜索引擎,而项目是页面;或者您有一个电影推荐者,并且这些项目是书籍。这听起来很接近你现在想要做的,所以让我们继续这个类比。

那么你的算法在前 n 个结果的精确度是用户在你的前 n 个推荐中实际喜欢的项目数:

    precision = #(items user actually liked out of top n) / n

召回率是您从项目总数中实际获得的项目数:

    recall = #(items correctly marked as liked) / #(items user actually likes)

理想情况下,人们希望最大化这两个数量,但它们在某种意义上是相互竞争的目标。为了说明这一点,请考虑一些极端情况:例如,您可能有一个返回所有内容的推荐器,它具有完美的召回率,但精度非常低。第二种可能性是有一个不返回任何结果或只返回一个肯定命中的推荐器,这将具有(在有限的意义上)完美的精确度,但几乎没有召回。

因此,要了解排名算法的性能,人们通常会查看其精确率与召回率图。这些只是精度与召回率的关系图,因为返回的项目数量是不同的:

图片取自以下教程(值得一读): http: //nlp.stanford.edu/IR-book/html/htmledition/evaluation-of-ranked-retrieval-results-1.html

现在要为您的算法估算精度与召回率,这是您可以做的。首先,返回一大组说 n,按照您的算法排名的结果。接下来,让用户从这 n 个结果中标记出他们真正喜欢的项目。这为我们提供了足够的信息来计算每个部分文档集 < n 的精度(因为我们知道数字)。我们还可以通过获取整个集合中用户喜欢的项目总数来计算召回率(仅限于这组文档)。这样,我们可以为该数据绘制精确召回曲线。现在有更好的统计技术可以用更少的工作来估计这一点,但我已经写得够多了。有关更多信息,请查看我的答案正文中的链接。

于 2011-06-26T01:56:01.870 回答