0

这里可能不是问这个问题的合适地方,但我没有找到更好的地方来问这个问题。我有一个程序,例如有 10 个参数。每次我运行它,它可能会导致 3 个结果。0、0.5 或 1。我不知道这些参数会如何影响最后的结果。我需要一点一点地改进我的程序,以便它得到更多的 1 和更少的 0。

4

3 回答 3

3

首先,为了正确使用术语,这实际上是一个“搜索”问题,而不是“机器学习”问题(您试图找到一个非常好的解决方案,而不是试图识别输入与输出之间的关系)。您的问题听起来像是经典的“功能优化”搜索问题。

有许多技术可以使用。正确的取决于几个不同的因素,但最大的问题是解决方案空间的大小和形状。最大的问题是“输出对输入的微小变化有多敏感?” 如果你保持除了一个相同的所有输入并进行微小的改变,你会在输出中获得巨大的改变还是只是一个小的改变?输入是否相互交互,尤其是以复杂的方式?

解决方案空间越小越“平滑”(也就是说,它对输入的微小变化越不敏感),您就越想要追求简单的统计技术、引导式搜索,或者如果您想要更有趣的东西,模拟退火。

解决方案空间越大越复杂,就越能引导您使用更复杂的统计技术或我最喜欢的一类算法,它们是遗传算法,可以非常快速地搜索大型解决方案空间。

只是为了勾勒出如何将遗传算法应用于您的问题,让我们假设输入彼此独立(我知道这是一种罕见的情况):

  • 从一系列二进制数字创建到您的输入的映射0011 1100 0100 ...etc...
  • 使用此映射生成具有一定规模的随机种群
  • 确定总体中每个个体的适应度(在您的情况下,在输出中“计算 1”)
  • 抽签选出两个“父母”:
    • 对于输出中的每个半点,一个人将获得一张“彩票”(换句话说,具有 2 个“1”和 3 个“0.5”的输出将获得 7 个“彩票”,而一个具有 1 个“1” 2个“0.5”将获得4个“票”)
    • 随机选择一张彩票。由于“更健康”的人将拥有更多“票”,这意味着“更健康”的人更有可能成为“父母”
  • 从父母的基因组中创建一个孩子:
    • 开始从左到右复制一个父母的基因组0011 11...
    • 在每一步,以固定的概率(比如 20% 的时间)切换到另一个父级
    • 由此产生的孩子将具有一定数量的父母基因组和一定数量的其他父母基因组。因为孩子是由“高适应度”个体创建的,所以孩子的适应度可能高于当前一代的平均水平(尽管它的适应度肯定可能较低
  • 用这种方式生成的孩子替换一定比例的人口
  • 从“确定适应度”步骤重复……在理想情况下,每一代的平均适应度都高于上一代,你会找到一个非常好的(甚至可能是理想的)解决方案。
于 2012-09-14T18:39:14.607 回答
1

您是否只是尝试修改参数以使结果为 1?听起来该程序是一个黑匣子,您可以在其中选择输入参数,然后查看结果。既然是这种情况,我认为最好选择一系列输入参数,循环浏览这些输入,然后查看输出以尝试辨别模式。如果您可以将其自动化,它将有很大帮助。在您运行数据后,您可以抽查以查看哪个参数为您提供了哪些结果,或者您可以应用一些机器学习技术来确定哪些参数导致哪些输出。

于 2012-09-14T14:13:36.347 回答
1

As Larry said, looks like a combinatorial search and the solution will depends on the "topology" of the problem. If you can, try to get the Algorithm Design Manuel book (S. Skiena), it has a chapter on this that can help determine the good method for this problem...

于 2012-09-15T21:14:31.933 回答