寻找最佳果汁组合的算法

数据挖掘 机器学习
2021-10-05 11:07:25

我正在做一个有趣的实验,其中一台机器将混合不同比例的三种果汁——橙汁、苹果汁和葡萄汁。在分配每种混合物后,参与者将品尝果汁并以数字等级对其进行评分,分数从 1 到 7。

使用收集到的数据,我想尝试以编程方式找到最佳果汁组合。

为此,我希望实现一个机器学习算法,它既可以生成新的果汁比例来尝试,也可以使用响应来尝试找到最佳的果汁混合物百分比。

你会推荐我使用什么算法?

笔记:

  1. 我计划在一个活动中展示这个,估计至少有 200 人来品尝。
  2. 我知道,由于不同的人有不同的口味偏好,我的目标是制作适合大多数人的最佳口味混合物。
2个回答

如前所述,您没有描述个人的数据(例如年龄、性别、鞋码),但正在寻找整个人群的最佳组合值。因此,如果您选择随机人从总体中对其进行评分,那么您想要的是与最大预期评分的混合。原则上,这个预期评级是一个采用两个参数的函数,例如F(n一个pple,nr一个nGe)- 第三种果汁的量不是自由选择的,所以你只有两个维度。

您可以将问题分解为两个不同的部分:

  • 从人口中抽取样本以找到函数的近似值F(n一个pple,nr一个nGe)

  • 使用演变过程中的近似值来指导对最佳值的搜索。

对于一个简单的方法,您可以忽略第二个要点,并在整个事件中随机抽样不同的混合。然后在评级上训练回归 ML(任何算法都可以,虽然你可能想要非线性的东西,否则你只会预测其中一种纯果汁作为最爱) - 最后绘制它的预测并在最后找到最大评级. 作为一个有趣的实验,这可能会很好。

但是,当您想在探索选项的同时优化动作的预期值时,有一种更复杂的方法经过充分研究并用于做出决策 - 它通常称为多臂老虎机. 在您的情况下,您需要考虑“手臂空间”或参数选择的变体,而不是代表动作之间选择的有限数量的选择。这对您很重要,因为将您的混音参数分成例如 5% 的步骤,给定您需要制作的样本数量,您将有太多的选择可供探索。相反,您需要假设预期评级函数相对平滑 - 35% Apple、10% Orange、55% Grape 的预期评级与 37% Apple、9% Orange、54% Grape 的评级相关. . . 这在我看来至少是合理的,但是您应该在任何文章中明确说明这是一个假设和/或找到支持它的已发布内容。如果你做出这个假设,那么你可以使用函数逼近器,例如神经网络,

简而言之,对于多臂老虎机问题,您将使用随着实验进展收集的数据来估计每个选择的期望值,并且在每一步中都会做出新的混合选择。选择本身将由您当前的最佳近似值指导。但是,您并不总是对当前的最高评价值进行采样,您需要探索其他组合以优化您的估计函数。您在这里也有选择 - 您可以使用ε-greedy,例如 10% 的时间您完全随机选择以获取其他样本点。但是,您可能需要更复杂的东西来探索更多并且仍然快速收敛,例如Gibbs sampling

你没有说的一件事是你在什么水平上推销这个实验。如果这是为了学校科学博览会,自己参考博客、教程和论文来研究多臂老虎机问题可能有点太多了。如果这一切看起来有点太模糊并且需要研究大量工作,那么您可能会坚持使用随机实验数据的简单回归模型。

我建议您采用哪种方法,对输入数据进行一些模拟,看看您的方法是否有效。显然这里有很多猜测工作。但原理是:

  • 创建一个“真正的”模型函数——例如选择一个想象中最喜欢的组合并让它得分更高。使它成为一个简单且可能非常微妙的函数-例如,获得最佳结果的得分为 5,并从中减去“果汁空间”中的欧几里得距离乘以一个小因数(可能是 1.5)。

  • 创建一个嘈杂的采样器,模仿实验中的某个人对特定组合进行评分。确保由此得出的平均值与“真”函数相匹配。

  • 尝试你的采样和学习策略,看看他们找到最喜欢的组合的效果如何。

我强烈建议在将您的系统投入实际使用之前进行这种试运行,否则您将无法确信您的 ML/逼近器正在工作。


关于您的估算器的另一条建议:您期望数据中有大量差异,并且不会有很多样本。因此,为了避免过度拟合,您将需要一个相对简单的 ML 模型。例如,对于神经网络,您可能只需要一个隐藏层,其中的神经元很少(例如 4 或 5 个可能就足够了)。找到一个足够复杂的模型来预测曲线,但又足够简单以至于在给定非常嘈杂的目标输出时它不会过度拟合可能需要几次尝试——这就是我建议使用模拟数据进行试运行的主要原因。

如果您有兴趣,我建议您在项目中尝试Ryskamp 机器学习 (RLM)引擎。您可以访问我们的网站以了解更多信息,并从那里获取源代码(托管在 github 上)并试一试。

请注意,RLM 与传统的机器学习非常不同。尽管一些基本概念仍然适用,例如输入、输出等,但真正让它与众不同的是核心算法(7 个突破中的一个)。RLM 不应用与传统 ML 相同的数学算法,而是以逻辑方法解决问题。请参阅我们网站上的 7 项突破,以了解有关差异的更多信息。

至于你的项目,这里有一些关于如何应用 RLM 的建议:

  1. 你可以让它做监督培训。就像您在传统 ML 中所做的那样,您应该将参与者数据与您提到的评级一起收集。有了数据集,您就可以继续使用它训练 RLM。您可以将输入设置为始终 1,而输出设置为三个水果的比例。您输入 1 的原因是因为您正试图为整个人口找到最佳比率。如果您要找到某些参与者组的最佳比例,那么您可以在输入中使用不同的值(即,1 = 参与者年龄 >= 30、2 = 参与者年龄 < 30、3 = 等等)。这样,您可以找到第 1 组、第 2 组或更多组的最佳水果比例。
  2. 或者,您可以进行无监督训练。RLM 可以这样做,而不是准备一个预定义的比率列表让您的参与者尝试和评分,因为它会尝试不同的比率,直到找到最佳比率。您仍然可以遵循我在 #1 中提到的相同输入和输出。虽然,我担心只有 200 名参与者可能不足以使用这种方法完全找到最佳水果比例。

在这两个选项中,参与者的评分(您提到的 1-7)是您将提供给 RLM 的分数。

我希望这有帮助。如果您需要任何技术帮助或反馈,请随时与我联系。

PS:虽然 RLM 最近开源了,但是使用起来还是有一些限制。请务必阅读许可证