在阅读了一些答案和评论之后,我想我可以更好地总结一下我的问题。请参阅下面的详细示例。
我正在寻找一种能够:
的机器学习算法让我们说我正在尝试创建一个能够生成锻炼计划的算法。我会给它一些限制(我每天只能花45分钟锻炼,周四不能锻炼等)。然后,我希望它为一周中的每一天生成锻炼计划。
然后,我希望能够告诉算法我不喜欢它生成的时间表的一部分(也许我不喜欢在ab锻炼的同一天运行)。我给出算法的唯一输入是给定日期的一个练习是“坏”(我取消ab或运行部分,任一个)。
但是我并没有告诉它为什么它很糟糕,只是因为它无论什么原因都不起作用。这可能是一百万种不同的原因之一,也许我在运动后将其标记为“不好”,我甚至都不知道为什么它不顺利,只是我感觉不到。
此外,该算法可以假设我不标记为“不好”的任何运动计划至少是“正常”。
我正在寻找一种算法(机器学习,我假设),它会接受这些反馈并随着时间的推移进行训练,以尝试猜测我会喜欢哪些训练。它可能会在相对较小的数据集上工作(我每周不会锻炼数千次),而且我无法从其他人那里获取数据(所以某种推荐引擎就是Netflix了)。
我认为这属于二元分类问题 (建议的锻炼时间表“至少可以”或“不好”) ,但是我我不确定从算法的角度来看最好的方法是什么。
我可以(希望)自己找出编码和算法的详细信息,但我需要一些关于哪种算法的指导或建议!
答案 0 :(得分:2)
解决方案1:
Netflix Prize解决了类似的问题。该算法知道您喜欢/不喜欢的电影数量相对较少,并且基于此[和其他用户体验],它会建议您喜欢哪部电影。
有很多关于这个主题的文章,BellKor solution得分最高。
这当然不是同一个问题,因为它也解决了其他用户的偏好,并使用它来匹配您喜欢的电影,但它可能对您有所帮助。
(*)在你的问题中,“电影”是一种竞争训练[abs +有氧运动],根据你喜欢/不喜欢的训练,以及它与其他用户的相似性,可以选择一个首选的训练你。
找到更多信息 解决方案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。如果你想构建一个好的工作应用程序,这不是一件非常简单的事情。