- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有一个算法可以选择符合用户喜好的项目列表。
由于保密问题,我将跳过算法的细节......
现在,我正在想办法用一组人来统计检查它。
我现在检查它的方式是:
我这样做是因为我认为要表明算法选择了好的结果,我需要输入一些不好的结果并表明算法也知道它是不好的结果。
所以,我要问的是:
用低结果洗牌是个好主意吗?
如果没有,您是否知道如何获得关于算法与用户偏好匹配程度的良好统计数据(我们有可以选择内容的用户)?
最佳答案
首先问问自己:
What am I trying to measure?
我不想对这里的其他提交进行评论,但是虽然 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
现在要为您的算法估算准确率与召回率,您可以执行以下操作。首先,返回一大组 say n,按照你的算法排名的结果。接下来,让用户从这 n 个结果中标记出他们真正喜欢的项目。这简单地为我们提供了足够的信息来计算每个部分文档集的精度 < n(因为我们知道这个数字)。我们还可以通过获取整个集合中用户喜欢的项目总数来计算召回率(仅限于这组文档)。这样,我们可以为这些数据绘制一条精确召回曲线。现在有更先进的统计技术可以用更少的工作来估计这个,但我已经写得够多了。有关更多信息,请查看我的回答正文中的链接。
关于algorithm - 如何检查用户选择算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6479801/
在为 Web 应用程序用例图建模时,为用户可以拥有的每个角色创建一个角色是否更好?或拥有一个角色、用户和一个具有特权的矩阵? guest < 用户 < 版主 < 管理员 1: guest 、用户、版主
我无法使用 Elixir 连接到 Postgres: ** (Mix) The database for PhoenixChat.Repo couldn't be created: FATAL 28P
这个问题已经有答案了: Group by field name in Java (7 个回答) 已关闭 7 年前。 我必须编写一个需要 List 的方法并返回 Map> . User包含 Person
感谢您的帮助,首先我将显示代码: $dotaz = "Select * from customers JOIN contracts where customers.user_id ='".$_SESS
我只想向所有用户中的一个用户显示一个按钮。我尝试了 orderByKey() 但没有成功! 用户模型有 id 成员,我尝试使用 orderByChild("id") 但结果相同! 我什至尝试了以下技巧
我们在工作中从 MongoDB 切换到 Postgres,我正在建立一个 BDR 组。 在这一步,我正在考虑安全性并尽可能锁定。因此,我希望设置一个 replication 用户(角色)并让 BDR
export class UserListComponent implements OnInit{ users; constructor(private userService: UserS
我可以使用 Sonata User Bundle 将 FOS 包集成到 sonata Admin 包中。我的登录功能正常。现在我想添加 FOSUserBundle 中的更改密码等功能到 sonata
在 LinkedIn 中创建新应用程序时,我得到 4 个单独的代码: API key 秘钥 OAuth 用户 token OAuth 用户密码 我在 OAuth 流程中使用前两个。 的目的是什么?最后
所以..我几乎解决了所有问题。但现在我要处理另一个问题。我使用了这个连接字符串: SqlConnection con = new SqlConnection(@"Data Source=.\SQLEX
我有一组“用户”和一组“订单”。我想列出每个 user_id 的所有 order_id。 var users = { 0: { user_id: 111, us
我已经为我的Django应用创建了一个用户模型 class User(Model): """ The Authentication model. This contains the u
我被这个问题困住了,找不到解决方案。寻找一些方向。我正在用 laravel 开发一个新的项目,目前正致力于用户认证。我正在使用 Laravels 5.8 身份验证模块。 对密码恢复 View 做了一些
安装后我正在使用ansible配置几台计算机。 为此,我在机器上本地运行 ansible。安装中的“主要”用户通常具有不同的名称。我想将该用户用于诸如 become_user 之类的变量. “主要”用
我正在尝试制作一个运行 syncdb 的批处理文件来创建一个数据库文件,然后使用用户名“admin”和密码“admin”创建一个 super 用户。 到目前为止我的代码: python manage.
关闭。这个问题是opinion-based 。目前不接受答案。 想要改进这个问题吗?更新问题,以便 editing this post 可以用事实和引文来回答它。 . 已关闭 6 年前。 Improv
我已在 Azure 数据库服务器上设置异地复制。 服务器上运行的数据库之一具有我通过 SSMS 创建的登录名和用户: https://learn.microsoft.com/en-us/azure/s
我有一个 ionic 2 应用程序,正在使用 native FB Login 来检索名称/图片并将其保存到 NativeStorage。流程是我打开WelcomePage、登录并保存数据。从那里,na
这是我的用户身份验证方法: def user_login(request): if request.method == 'POST': username = request.P
我试图获取来自特定用户的所有推文,但是当我迭代在模板中抛出推文时,我得到“User”对象不可迭代 观看次数 tweets = User.objects.get(username__iexact='us
我是一名优秀的程序员,十分优秀!