GA,用于针对RandomForestRegressor

问题描述

我写了一种遗传算法(至少,我认为它是一种遗传算法),试图为kaggle.com Housing Prices Competition for Kaggle Learn Users调整超参数。

我是GA的新手,所以我想就我的算法性能如何获得经验丰富的意见。 在当前运行中,它设法拟合模型,并在15代后约6个小时后获得了16308.82的MAE。它已经运行了十多个小时,并没有得到更好的结果,所以我想这个版本就是这样(当然,可能有方法可以改进算法)。这个表现好吗?可以改善吗?

我将代码保存在github上的jupyter笔记本中:https://github.com/ZackYovel/GA-for-Hyper-Parameter-Tuning。对糟糕的代码很抱歉,我喜欢快速又肮脏地开始,以后再重构。我目前正在开发一个库,该库使我能够使用更干净的代码来实现该算法。

我当前运行中使用的算法是:

  1. 产生150个个体(个人=超参数值集),分为5个地区(人口)
  2. 每个人除了具有超参数值外,还具有small_step_mutation和large_step_mutation值(在前面说明)。
  3. 评估所有个人,并在每个人群中保持15名最好的人
  4. 跨界:每个人群中最好的个体与所有其他幸存者成环配对。对于每对,每个超级参数都是从随机选择的父级中复制的(例如,对于每个hp:随机选择parent =妈妈或爸爸,然后将parent [hp]复制到子级)
  5. 返回步骤3。

small_step_mutation确定当当前值为平均值时用于更改超参数值的标准偏差(例如new_hp_value = np.random.normal(current_hp_value,small_step_mutation *(max_value_for_hp-min_value_for_hp))

large_step_mutation是发生大突变的概率(如果-选择True或False,并且为true选择概率large_step_mutation,则:new_hp_value = random(min_value,max_value)

两个突变参数正在演变中。 small_step_mutation趋向于零,large_step_mutation趋向于1。

步骤3-5是在500代的循环中重复进行的,但我从来没有让它实际运行整个500代,因为每一代都可能花费很长时间(每代15分钟到几小时不等。我认为这是一个bug,我想知道该如何解决。请稍后再试。我希望每代的平均运行时间为15-30分钟)

所以最重要的是,我有两个问题:

  1. 我目前的表现好吗?可以改善吗?
  2. 我的算法好吗?可以改善吗? (我实际上是在做GA还是其他?)

谢谢!

解决方法

GA的步骤如下:

START
Generate the initial population
Compute fitness
REPEAT
    Selection
    Crossover
    Mutation
    Compute fitness
UNTIL population has converged
STOP
  1. 我目前的表现好吗?可以改善吗? 如果任务的结果增加了,那么您做得很好。否则,您需要找出GA的改进或诸如“差分进化”和“粒子群优化”之类的新进化算法。
  2. 我的算法好吗?可以改善吗? (我实际上是在做GA还是其他?) 您需要对代码进行一些更改以提高其性能。首先,突变应位于循环中以增加算法的探索能力。其次,在交叉运算中,应将总体分为解决方案对,然后将交叉应用于所有对。它使新的人口多样化。第三,在每次迭代中,应该存储最佳个体(精英)。