在这种情况下,哪种机器学习算法最好?

时间:2011-09-24 15:01:48

标签: algorithm machine-learning

更新 - 短版

在阅读了一些答案和评论之后,我想我可以更好地总结一下我的问题。请参阅下面的详细示例。

我正在寻找一种能够:

的机器学习算法
  • 生成几个不同变量的组合,
  • 从连续的人工反馈中学习,将每个组合分类为“好”或“坏”,并提高其未来的生成准确度
  • 在小型反馈(培训)数据集上的工作相对较好
  • 权重最近提供了反馈(培训)数据 - 换言之,与新反馈相比,旧反馈数据随着时间的推移应该变得不那么有影响力了

示例场景

让我们说我正在尝试创建一个能够生成锻炼计划的算法。我会给它一些限制(我每天只能花45分钟锻炼,周四不能锻炼等)。然后,我希望它为一周中的每一天生成锻炼计划。

然后,我希望能够告诉算法我不喜欢它生成的时间表的一部分(也许我不喜欢在ab锻炼的同一天运行)。我给出算法的唯一输入是给定日期的一个练习是“坏”(我取消ab或运行部分,任一个)。

但是我并没有告诉它为什么它很糟糕,只是因为它无论什么原因都不起作用。这可能是一百万种不同的原因之一,也许我在运动后将其标记为“不好”,我甚至都不知道为什么它不顺利,只是我感觉不到。

此外,该算法可以假设我标记为“不好”的任何运动计划至少是“正常”。

我在寻找......

我正在寻找一种算法(机器学习,我假设),它会接受这些反馈并随着时间的推移进行训练,以尝试猜测我会喜欢哪些训练。它可能会在相对较小的数据集上工作(我每周不会锻炼数千次),而且我无法从其他人那里获取数据(所以某种推荐引擎就是Netflix了)。

我认为这属于二元分类问题 (建议的锻炼时间表“至少可以”或“不好”) ,但是我我不确定从算法的角度来看最好的方法是什么。

我可以(希望)自己找出编码和算法的详细信息,但我需要一些关于哪种算法的指导或建议!

5 个答案:

答案 0 :(得分:2)

解决方案1:
Netflix Prize解决了类似的问题。该算法知道您喜欢/不喜欢的电影数量相对较少,并且基于此[和其他用户体验],它会建议您喜欢哪部电影。

有很多关于这个主题的文章,BellKor solution得分最高。

这当然不是同一个问题,因为它也解决了其他用户的偏好,并使用它来匹配您喜欢的电影,但它可能对您有所帮助。

(*)在你的问题中,“电影”是一种竞争训练[abs +有氧运动],根据你喜欢/不喜欢的训练,以及它与其他用户的相似性,可以选择一个首选的训练你。

可以在Netflix Prize Homepage

找到更多信息

解决方案2 一个更简单,但很可能不太准确的解决方案可以基于k nearest neighbor算法。每当用户指示他喜欢/不喜欢训练时,您都会存储它。
在这里,您的功能是锻炼部分[二进制值,例如,如果您有跑步+腹肌训练,这些值将设置为true,其余值为false]。
当您需要选择训练时,您可以将其与最近的k个邻居[最相似的特征]进行匹配,并根据他对类似“邻居”的回答来预测用户是否喜欢/不喜欢此训练。
请注意,此算法仅检查是否喜欢/不喜欢锻炼,并且不会创建锻炼。一个可以随机选择,只有当算法认为它是一个好的时候才应该被接受,否则:随机选择一个新的,等等......

一般评论: 跟进评论讨论:
机器学习主要基于启发式和实验。在我看来,你可能应该有一些算法,并根据实验检查哪些分数是最佳准确度,或者结合一些算法以获得最佳结果。如何根据这个答案组合算法的一个可能性是:

1. choose a workout based on the BellKor solution to the Netflix prize
2. check k nearest neighbor - if this workout is likely to be approved by the user.
   2.1. If it is likely to be approved: pass it to the user and finish
   2.2. else: return to 1, and choose a different workout.

答案 1 :(得分:1)

这确实感觉像二元分类问题。我首先阅读Naive Bayes classifier。真正的工作是决定每个锻炼程序的“特征”。长度?困难?肌肉工作?燃烧大约卡路里?一天的时间?那天天气?因为这些算法正在学习驱动你的决定。

我建议Mahout in Action(我写了一部分,但不是分类器),涵盖Apache Mahout,并且有一个非常不错的实用分类介绍。

答案 2 :(得分:0)

您可能需要考虑阅读有关多实例学习的内容。这个想法是你发送要评估的东西袋子,如果袋子里的任何物品都不好,整个袋子的评级都会很差。如果所有项目都很好,你会获得正面评价。

虽然这不是你问题的完美匹配,因为在你的问题中,两件好事可能在一起很糟糕,但它至少可能指向你正确的方向。

答案 3 :(得分:0)

这是另一个领域中模糊相似的东西:http://en.wikipedia.org/wiki/Evolutionary_music

就个人而言,我会从一个简单的调度程序开始(例如,按优先顺序一次将活动纳入计划中),并添加一个GUI,允许您按计划转换活动,或标记一组活动为删除和重新安排,可能在不同的优先顺序下,或某种随机扰动。

答案 4 :(得分:0)

你只能通过一个algorythm创建它。您应该构建将使用不同算法的pipline。如果你想构建一个好的工作应用程序,这不是一件非常简单的事情。