【发布时间】: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。对不起,糟糕的代码,我喜欢快速而肮脏的开始,然后再重构。我目前正在开发一个库,使我能够使用更简洁的代码实现算法。
我在当前运行中使用的算法是:
- 产生 150 个个体(个体 = 一组超参数值),分为 5 个区域(种群)
- 除了超参数值之外,每个人还有一个 small_step_mutation 和一个 large_step_mutation 值(前面解释过)。
- 评估所有个体并在每个群体中保留 15 个最佳个体
- 交叉:每个种群中最好的个体与所有其他幸存者循环配对。对于每一对,每个超参数都是从随机选择的父级复制的(例如,对于每个 hp:随机选择 parent = mom 或 dad,然后将 parent[hp] 复制到 child)
- 返回第 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 分钟)
所以底线我有两个问题:
- 我目前的表现好吗?可以改进吗?
- 我的算法好吗?可以改进吗? (我实际上是在做 GA 还是其他什么?)
提前致谢!
【问题讨论】:
标签: python-3.x jupyter-notebook genetic-algorithm evolutionary-algorithm