classification - 分类的遗传算法

标签 classification genetic-algorithm genetic-programming

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

我现在需要的是解决两个困难的帮助:

  1. 我的数据有偏差。基本上我正在解决二元分类问题,只有 20% 的数据属于 1 类,而其他 80% 属于 0 类。我一开始使用预测精度作为我的适应度函数,但这真的很糟糕。我现在拥有的最好的是

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

请告知,我如何改进我的功能以纠正数据偏差。

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

更新:

对于我的第二个问题,我发现了一篇很棒的文章 "Experiments on Controlling Overtting in Genetic Programming"除了一些文章作者关于处理 GP 中过度拟合的想法之外,它还提供了令人印象深刻的评论,并引用了许多解决该问题的不同方法。现在我有很多新想法可以尝试解决我的问题。 不幸的是,仍然找不到任何关于选择适当的适应度函数的信息,该函数将考虑我的数据中不平衡的类别比例。

最佳答案

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

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

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

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

关于classification - 分类的遗传算法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12457490/

相关文章:

tensorflow - 输出中的节点数大于神经网络中的类数

python-3.x - 在 TensorFlow 中训练自定义数据集会出现错误

python - 使用遗传算法演化多层感知器

python - 评估功能中的 Pyevolve 分数

java - 遗传算法 : Request optimization

nlp - Keras LSTM 的内部运作

python - sklearn 分类的 class_weight 字典格式

java - 需要帮助解决遗传算法问题

artificial-intelligence - 遗传算法与专家系统

machine-learning - 遗传算法-适应度函数和规则优化