【问题标题】:Using genetic programming to estimate probability使用遗传编程来估计概率
【发布时间】:2012-10-22 11:19:39
【问题描述】:

我想使用遗传程序 (gp) 来估计“事件”中“结果”的概率。为了训练 nn,我使用了遗传算法。

所以,在我的数据库中,我有许多事件,每个事件都包含许多可能的结果。

我会给 gp 一组输入变量,这些变量与每个事件中的每个结果相关。

我的问题是 - gp 中的适应度函数应该是什么??

例如,现在我给 gp 一组输入数据(结果输入变量)和一组目标数据(如果结果 DID 发生,则为 0,如果结果未发生,则为 0,适应度函数为输出和目标的均方误差)。然后,我对每个结果取每个输出的总和,并将每个输出除以总和(给出概率)。但是,我确信这不是正确的做法。

为了清楚起见,这就是我目前这样做的方式:

我想估计一个事件中出现 5 种不同结果的概率:

Outcome 1 - inputs = [0.1, 0.2, 0.1, 0.4] 
Outcome 1 - inputs = [0.1, 0.3, 0.1, 0.3] 
Outcome 1 - inputs = [0.5, 0.6, 0.2, 0.1] 
Outcome 1 - inputs = [0.9, 0.2, 0.1, 0.3] 
Outcome 1 - inputs = [0.9, 0.2, 0.9, 0.2] 

然后我将计算每个输入的 gp 输出:

Outcome 1 - output = 0.1 
Outcome 1 - output = 0.7 
Outcome 1 - output = 0.2 
Outcome 1 - output = 0.4 
Outcome 1 - output = 0.4

此事件中每个结果的输出总和为:1.80。然后我会通过将输出除以总和来计算每个结果的“概率”:

Outcome 1 - p = 0.055 
Outcome 1 - p = 0.388 
Outcome 1 - p = 0.111 
Outcome 1 - p = 0.222 
Outcome 1 - p = 0.222 

在你开始之前 - 我知道这些不是真实的概率,而且这种方法不起作用!我只是把它放在这里,以帮助您了解我想要实现的目标。

谁能给我一些关于如何估计每个结果的概率的指示? (另外,请注意我的数学不是很好)

非常感谢

【问题讨论】:

  • 我不明白你描述的问题。您的数据集到底是什么样的?它是如何产生的?你到底想估计什么?
  • 我正在尝试估计事件中发生结果的概率。事件可以是任何东西(例如比赛),结果可以是任何东西(例如跑步者)。 gp 的输入将是与每个跑步者相关的变量,我正在尝试估计每个跑步者赢得比赛的概率。
  • 所以您的Event 不是Event in the probabilistic sense 而是“发生某事”的一般含义的事件?这非常令人困惑。那么,您是否试图估计给定事件的某个结果的条件概率?
  • 是的,你是对的。为我使用术语道歉 - 就像我说我的数学一点都不好。
  • 您应该查看machine learning。但请注意:这是一个巨大的话题。还要努力将您手头的问题正式化。您会注意到这是一个非常普遍且普遍的问题,并且存在无数种不同的方法来处理它。

标签: artificial-intelligence probability genetic-algorithm genetic-programming


【解决方案1】:

我理解你问题的第一部分:你描述的是一个分类问题。您正在了解您的输入是否与是否观察到结果 (1) 相关 (0)。

虽然第二部分有困难。如果我理解正确,您将原始 GP 输出用于某行输入(例如 0.7)并将其视为概率。你说这显然行不通。在 GP 中,您可以通过引入一个阈值来划分您的类别来进行分类。如果大于 0.3,则结果应为 1,如果小于则应为 0。此阈值不一定是 0.5(再次,它只是一个数字,而不是概率)。

我认为,如果您想获得概率,您应该尝试学习多个模型,这些模型都可以很好地解释您的分类问题。我不希望你有一个完美的模型来完美地解释你的数据,如果你有你无论如何都不想要一个概率。您可以将这些模型打包在一起(创建一个集合),对于每个结果,您可以观察有多少模型预测为 1,有多少模型预测为 0。预测 1 的模型数量除以模型数量可以解释为概率这个结果将被观察到。如果模型都同样好,那么您可以忘记它们之间的权衡,如果它们的质量不同,您当然可以将这些因素纳入您的决定。训练集上质量较低的模型不太可能有助于进行良好的估计。

因此,总而言之,您应该尝试申请 GP,例如10 次,然后使用训练集上的所有 10 个模型来计算它们的估计值(0 或 1)。但是,不要强迫自己只使用 GP,有很多分类算法可以给出很好的结果。

作为旁注,我是名为HeuristicLab 的软件开发团队的一员,该软件在 Windows 下运行,您可以使用该软件运行 GP 并创建此类集成。该软件是开源的。

【讨论】:

    【解决方案2】:

    人工智能就是复杂的算法。想想看,不利的一面是这些算法经常变成黑匣子。因此,与 NN 和 GA 等算法相反的是,它们本质上是不透明的。如果您想让汽车自动驾驶,这就是您想要的。另一方面,这意味着您需要工具来查看黑匣子。

    我的意思是,GA 可能不是您想要解决的问题。要想解决AI类问题,首先要知道如何使用标准技术,比如回归、LDA等。

    因此,将 NN 和 GA 结合起来通常是一个不好的信号,因为您将一个黑盒堆叠在另一个上。我认为这是糟糕的设计。 NN 和 GA 只不过是非线性优化器。我建议您先查看主成分分析 (PDA)、SVD 和线性分类器(参见维基百科)。如果您想解决简单的统计问题,请继续解决更复杂的问题。查看 Russell/Norvig 的优秀教科书,阅读他们的一些源代码。

    要回答这些问题,我们必须广泛地查看数据集。如果您正在处理一个小问题,请定义概率等,您可能会在这里得到答案。也许也可以查看贝叶斯统计数据。我相信这会让你开始。

    【讨论】:

    • 我不知道你从哪里得到 GA 不透明的想法。 NN是不透明的,GA是处理NN不透明的有效且广泛使用的方法。
    猜你喜欢
    • 2011-02-22
    • 2012-06-02
    • 2014-08-11
    • 1970-01-01
    • 2023-04-01
    • 2014-04-07
    • 2021-03-14
    • 2017-11-26
    • 2016-09-05
    相关资源
    最近更新 更多