# automl

<https://www.jiqizhixin.com/articles/2019-11-19> 一文盘点AutoML库（附PPT等链接） <https://cloud.tencent.com/developer/news/313229> Autosklearn到底做了什么？

<https://blog.csdn.net/wonner_/article/details/103511168> 贝叶斯优化原理及应用\[附XGBoost、LightGBM超参数调优代码]\[scikit-optimize]    **综合考虑到质量和速度**

SMBO算法的每个迭代步可以分为如下的步骤： 1.依据历史信息构造(超参，性能）的性能函数， 2.依照性能函数，选取最有可能是最小值的超参，并将这个点对应性能算出。 3.将新的（超参，性能）加入历史信息中，进行重复的迭代。

将SMBO算法实例化到SMAC算法，所对应的是则是： 1.性能模型是随机森林的高斯过程模型。 2.通过局部搜索和全局的随即选点，算出多个最有可能达到最小值的点进行进一步筛选。 3.筛选点的过程是一个bandit问题，这里SMAC算法通过intensify过程使用经可能少的资源找到最有超参。

思路两类：一种用贝叶斯在可能性更高的区域以提高搜索效率， 另一种方法是在训练时终止学习，从而高效地搜索参数，例如逐层减半（Successive Halving），超带宽（Hyperband）等。

最初级的 RandomSearch和GridSearch ， 稍微高级一点的： Genetic algorithm 然后加入贝叶斯 Hyperopt （TPE） ， Spearmint（高斯过程代理） 和 SMAC（随机森林回归）(目前效果最好的) optuna除了用贝叶斯选择参数外，还主要在剪枝（pruning mechanism）上做了优化。

然后工程角度， SMAC可以到参数服务器进行异步并行化，还有用 ， Optuna支持异步分布式优化，

<https://github.com/automl/SMAC3>

现在目前最好的xgboost类的自动调参工具是SMAC，比Hyperopt、BOHB. 而且如果是定期训练，train数据没啥大变化的，可以将历史训练经验加载进去，可以进一步加速。 但是官方的SMAC3包不支持异步并行，可以用微软的nni，而且也支持神经网路结构的调参。

现在的自动化调参都支持将特征处理方法的选择当做参数一起调参，可以把这个剥离出来，特征处理常规化，而且这个对模型效果影响不大。

[从Few-shot Learning再次认识机器学习](https://mp.weixin.qq.com/s/EPafCEIg7LYqsnwYq3-nvg)
