我想使用遗传程序(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并创建这样的集成。该软件是开源的。