2

我正在尝试使用 Matlab GPTIPS框架解决分类问题。到目前为止,我设法建立了合理的数据表示和适应度函数,并且每类的平均准确率接近 65%。

我现在需要的是一些有两个困难的帮助:

  1. 我的数据有偏差。基本上我在解决二进制分类问题,只有 20% 的数据属于 1 类,而其他 80% 属于 0 类。我最初使用预测的准确性作为我的适应度函数,但它真的很糟糕。我现在最好的是

    适应度 = 0.5*(PositivePredictiveValue + NegativePredictiveValue) - const*ComplexityOfSolution

请建议,我该如何改进我的功能以纠正数据偏差。

  1. 第二个问题是过拟合。我将我的数据分为三部分:训练(70%)、测试(20%)、验证(10%)。我在训练集上训练每个染色体,然后在测试集上评估它的适应度函数。这个例程让我在测试数据上达到 0.82 的适合度,以获得人群中最好的个体。但同一个人在验证数据上的结果只有 60%。每次在生成新种群之前,我都会添加对最佳个体的验证检查。然后我将验证集的适应度与测试集的适应度进行比较。如果差异超过 5%,那么我会增加适应度函数中解决方案复杂性的惩罚。但这没有帮助。我还可以尝试在每一代使用验证集评估所有个体,并简单地删除过度拟合的个体。但后来我不 看不到我的测试和验证数据之间的任何区别。这里还能做什么?

更新:

对于我的第二个问题,我发现了很棒的文章“在遗传编程中控制过度拟合的实验”以及一些文章作者关于处理 GP 中过度拟合的想法,它具有令人印象深刻的评论,其中引用了许多解决该问题的不同方法。现在我有很多新想法可以尝试解决我的问题。不幸的是,在选择合适的适应度函数时仍然找不到任何东西,它会考虑到我数据中不平衡的类比例。

4

1 回答 1

2

当基线(将所有内容分类为具有最多样本的类)为 80% 时,65% 的准确度非常糟糕。您至少需要实现基线分类才能拥有比幼稚模型更好的模型。

我不会惩罚复杂性。而是限制树的大小(如果可能)。您可以在运行期间识别更简单的模型,例如存储具有质量和复杂性的模型的帕累托前沿作为其两个适应度值。

HeuristicLab中,我们集成了基于 GP 的分类,可以做这些事情。有几个选项:您可以选择使用 MSE 进行分类或 R2。在最新的主干构建中,还有一个直接优化准确性的评估器(确切地说,它优化了分类惩罚)。优化 MSE 意味着它为每个类分配一个值 (1, 2, 3,...) 并尝试最小化该值的均方误差。起初这似乎不是最佳选择,但有效。直接优化精度可能会导致更快的过拟合。还有一个公式简化器,可让您修剪和缩小公式(并查看其效果)。

还有,需要GP吗?您是否也尝试过随机森林分类或支持向量机?RF 速度很快,而且通常工作得很好。

于 2012-09-17T22:38:31.853 回答