我正在尝试使用 Matlab GPTIPS框架解决分类问题。到目前为止,我设法建立了合理的数据表示和适应度函数,并且每类的平均准确率接近 65%。
我现在需要的是一些有两个困难的帮助:
我的数据有偏差。基本上我在解决二进制分类问题,只有 20% 的数据属于 1 类,而其他 80% 属于 0 类。我最初使用预测的准确性作为我的适应度函数,但它真的很糟糕。我现在最好的是
适应度 = 0.5*(PositivePredictiveValue + NegativePredictiveValue) - const*ComplexityOfSolution
请建议,我该如何改进我的功能以纠正数据偏差。
- 第二个问题是过拟合。我将我的数据分为三部分:训练(70%)、测试(20%)、验证(10%)。我在训练集上训练每个染色体,然后在测试集上评估它的适应度函数。这个例程让我在测试数据上达到 0.82 的适合度,以获得人群中最好的个体。但同一个人在验证数据上的结果只有 60%。每次在生成新种群之前,我都会添加对最佳个体的验证检查。然后我将验证集的适应度与测试集的适应度进行比较。如果差异超过 5%,那么我会增加适应度函数中解决方案复杂性的惩罚。但这没有帮助。我还可以尝试在每一代使用验证集评估所有个体,并简单地删除过度拟合的个体。但后来我不 看不到我的测试和验证数据之间的任何区别。这里还能做什么?
更新:
对于我的第二个问题,我发现了很棒的文章“在遗传编程中控制过度拟合的实验”以及一些文章作者关于处理 GP 中过度拟合的想法,它具有令人印象深刻的评论,其中引用了许多解决该问题的不同方法。现在我有很多新想法可以尝试解决我的问题。不幸的是,在选择合适的适应度函数时仍然找不到任何东西,它会考虑到我数据中不平衡的类比例。