【问题标题】:GA for hyper parameter tuning for RandomForestRegressor用于 RandomForestRegressor 的超参数调整的 GA
【发布时间】:2021-01-19 11:35:03
【问题描述】:

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

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

我将代码保存在 github 上的 jupyter notebooks 中:https://github.com/ZackYovel/GA-for-Hyper-Parameter-Tuning。对不起,糟糕的代码,我喜欢快速而肮脏的开始,然后再重构。我目前正在开发一个库,使我能够使用更简洁的代码实现算法。

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

  1. 产生 150 个个体(个体 ​​= 一组超参数值),分为 5 个区域(种群)
  2. 除了超参数值之外,每个人还有一个 small_step_mutation 和一个 large_step_mutation 值(前面解释过)。
  3. 评估所有个体并在每个群体中保留 15 个最佳个体
  4. 交叉:每个种群中最好的个体与所有其他幸存者循环配对。对于每一对,每个超参数都是从随机选择的父级复制的(例如,对于每个 hp:随机选择 parent = mom 或 dad,然后将 parent[hp] 复制到 child)
  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,概率 large_step_mutation 为 True- 那么:new_hp_value = random(min_value, max_value)

这两个突变参数正在进化中。 small_step_mutation 趋向于进化到 0,large_step_mutation 趋向于进化到 1。

步骤 3-5 在 500 代的循环中重复,但我从不让它实际运行整个 500 代,因为每一代都可能需要相当长的时间(每代在 15 分钟到几个小时之间变化。我认为这是错误,我想我知道如何修复它。很快就会尝试。我预计每代的平均运行时间为 15-30 分钟)

所以底线我有两个问题:

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

提前致谢!

【问题讨论】:

    标签: python-3.x jupyter-notebook genetic-algorithm evolutionary-algorithm


    【解决方案1】:

    GA的步骤如下:

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

    【讨论】:

      猜你喜欢
      • 2017-11-28
      • 2017-10-26
      • 2021-02-07
      • 2020-07-24
      • 1970-01-01
      • 2019-02-13
      • 1970-01-01
      • 1970-01-01
      • 2021-12-08
      相关资源
      最近更新 更多