使用遗传编程估计概率

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

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

我将为gp提供一组与每个事件中的每个结果相关的输入变量。

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

例如,目前我给gp提供了一组输入数据(结果输入变量)和一组目标数据(如果结果发生则为1,如果结果未发生则为0),适应度函数是输出和目标的均方误差。然后,我将每个结果的输出相加,并将每个输出除以总和(以得出概率)。然而,我确信这不是正确的方法。

为了清楚起见,这是我目前的做法:

我想估计一个事件中五个不同结果发生的概率:

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 

在你开始之前 – 我知道这些不是真实的概率,这种方法行不通!!我只是把这些放在这里,帮助你理解我想实现的目标。

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

非常感谢


回答:

我理解你问题的第一部分:你描述的是一个分类问题。你在学习输入是否与观察到结果(1)或未观察到结果(0)有关。

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

我认为,如果你想获得概率,你应该尝试学习多个能够很好地解释你的分类问题的模型。我不指望你有一个完美的模型来完美地解释你的数据,相应地,如果你有,你可能也不需要概率。你可以将这些模型组合在一起(创建一个集成),对于每个结果,你可以观察有多少模型预测为1,有多少模型预测为0。预测为1的模型数量除以模型总数可以被解释为观察到该结果的概率。如果这些模型的质量都相同,你可以忽略它们之间的权重,如果它们的质量不同,当然你可以将这些因素考虑进你的决策中。在训练集上表现较差的模型不太可能为良好的估计做出贡献。

总之,你应该尝试应用GP,例如10次,然后使用所有10个模型在训练集上计算它们的估计值(0或1)。然而,不要强迫自己只使用GP,有许多分类算法可以提供良好的结果。

作为补充说明,我是HeuristicLab软件开发团队的一员,该软件在Windows下运行,你可以使用它运行GP并创建这样的集成。该软件是开源的。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注