超参数调优要区别于参数调优
使用最小二乘法或者梯度下降法等最优化算法优化出来的数我们称为参数,无法使用最小二乘法或者梯度下降法等最优化算法优化出来的数是超参数。
参数是模型内部的配置变量,其值可以根据数据进行估计。
- 进行预测时需要参数。
- 参数定义了可使用的模型。
- 参数是从数据估计或获悉的。
- 参数通常不由编程者手动设置。
- 参数通常被保存为学习模型的一部分。
- 参数是机器学习算法的关键,它们通常由过去的训练数据中总结得出。
模型超参数是模型外部的配置,其值无法从数据中估计。
- 超参数通常用于帮助估计模型参数。
- 超参数通常由人工指定。
- 超参数通常可以使用启发式设置。
- 超参数经常被调整为给定的预测建模问题。
常用方法有:网格搜索,随机搜索【其实很多应用靠经验来设定也是很好的方法】
网格搜索(Grid Search)
网格搜索的思想非常简单,比如你有2个超参数需要去选择,那你就把所有的超参数选择列出来分别做排列组合。然后针对每组超参数分别建立一个模型,然后选择测试误差最小的那组超参数。
随机搜索(RandomizedSearch)
网格搜索相当于暴力地从参数空间中每个都尝试一遍,然后选择最优的那组参数,这样的方法显然是不够高效的,因为随着参数类别个数的增加,需要尝试的次数呈指数级增长。
有没有一种更加高效的调优方式呢?那就是使用随机搜索的方式,这种方式不仅仅高效,而且实验证明,随机搜索法结果比稀疏化网格法稍好(有时候也会极差,需要权衡)。参数的随机搜索中的每个参数都是从可能的参数值的分布中采样的。与网格搜索相比,这有两个主要优点:
- 可以独立于参数数量和可能的值来选择计算成本。
- 添加不影响性能的参数不会降低效率。
SKlearn中的Pipeline
Pipeline可以将许多算法模型串联起来,比如将特征提取、归一化、分类组织在一起形成一个典型的机器学习问题工作流。主要带来两点好处:
- 直接调用fit和predict方法来对pipeline中的所有算法模型进行训练和预测。
- 可以结合grid search对参数进行选择。
所以超参数调优可以利用Sklearn的pipeline来做。