知情搜索:由粗到细

Python 中的超参数调优

Alex Scriven

Data Scientist

知情 vs 非知情搜索

 

目前为止,我们做的都是"非知情"搜索:

非知情搜索:每次超参数调优迭代都不会从前一次学习。

这使我们可以并行化。但效率并不高,对吗?

Python 中的超参数调优

知情 vs 非知情

目前流程:

非知情流程图

另一种方式:

知情流程图

Python 中的超参数调优

由粗到细调优

基本的知情搜索方法:

先用粗粒度的随机搜索,再逐步细化。

流程:

  1. 随机搜索
  2. 找到潜在区域
  3. 在小范围做网格搜索
  4. 持续迭代,直到取得最优分数

在第 (3) 步前也可再做几轮随机搜索

Python 中的超参数调优

为何由粗到细?

由粗到细调优的优势:

  • 结合网格和随机搜索的优点。
    • 先广泛搜索
    • 找到可能的好区域后深入搜索
  • 更好地利用时间和算力,可更快迭代

无需在效果差的搜索空间浪费时间!

注意:这是对一批模型的知情,而非单个模型。

Python 中的超参数调优

实施由粗到细

来看一个示例,这些是超参数范围:

  • max_depth_list 在 1 到 65 之间
  • min_sample_list 在 3 到 17 之间
  • learn_rate_list 在 0.01 到 150 之间的 150 个值

我们有多少种模型组合?

combinations_list = [list(x) for x in product(max_depth_list, min_sample_list, learn_rate_list)]
print(len(combinations_list))
134400
Python 中的超参数调优

可视化由粗到细

先对 500 个随机组合做搜索。

我们来绘制准确率分布:

模型准确率密度图

哪些模型表现较好?

Python 中的超参数调优

可视化由粗到细

最佳结果:

max_depth min_samples_leaf learn_rate accuracy
10 7 0.01 96
19 7 0.023355705 96
30 6 1.038389262 93
27 7 1.11852349 91
16 7 0.597651007 91
Python 中的超参数调优

可视化由粗到细

max_depth 与准确率对比可视化:

最大深度与准确率散点图

Python 中的超参数调优

可视化由粗到细

min_samples_leaf 低于 8 表现更好

最小叶节点样本数与准确率散点图

learn_rate 高于 1.3 表现更差

学习率与准确率散点图

Python 中的超参数调优

下一步

第一轮得到的信息:

  • max_depth 在 8 到 30 之间
  • learn_rate 小于 1.3
  • min_samples_leaf 或许小于 8

下一步?用这些信息再做一次随机或网格搜索!

注意:这只是二元分析。你也可以在一张图上探索多个超参数(3、4 个或更多),但超出本课程范围。

Python 中的超参数调优

开始练习吧!

Python 中的超参数调优

Preparing Video For Download...