###基础概念
超参数是在开始学习过程之前设置值的参数,而不是通过训练得到的参数数据。通常情况下,在机器学习过程中需要对超参数进行优化,给学习器选择一组最优超参数,以提高学习的性能和效果。比如,树的数量或树的深度,学习率(多种模式)以及k均值聚类中的簇数等都是超参数。
与超参数区别的概念是参数,它是模型训练过程中学习到的一部分,比如回归系数,神经网络权重等。简单的描述参数是模型训练获得的,超参数是人工配置参数(本质上是参数的参数,每次改变超参数,模型都要重新训练)。
###超参数调优
在模型训练过程中的参数最优化,一般都是对参数的可能值进行有效搜索,然后用评价函数选取出最优参数,比如梯度下降法。
同理,人工的超参数选择过程,我们也可以采取类似参数搜索的办法,来提高效率,如果进行人工试错的方式,会非常浪费时间。
超参数搜索过程:
将数据集分为训练集,验证集及测试集。
选择模型性能评价指标
用训练集对模型进行训练
在验证集上对模型进行参数进行搜索,用性能指标评价参数好坏
选出最优参数
常见超参数搜索算法:
网格搜索
随机搜索
启发式搜索
###网格搜索
网格搜索是在所有候选的参数选择中,通过循环遍历,尝试每一种可能性,表现最好的参数就是最终的结果(暴力搜索)。
原理:在一定的区间内,通过循环遍历,尝试每一种可能性,并计算其约束函数和目标函数的值,对满足约束条件的点,逐个比较其目标函数的值,将坏的点抛弃,保留好的点,最后便得到最优解的近似解。
为了评价每次选出的参数的好坏,我们需要选择评价指标,评价指标可以根据自己的需要选择accuracy、f1-score、f-beta、percision、recall等。
同时,为了避免初始数据的划分对结果的影响,我们需要采用交叉验证的方式来减少偶然性,一般情况下网格搜索需要和交叉验证相结合使用。
python的sklearn包中网格搜索函数GridSearchCV:
GridSearchCV(
estimator,param_grid, scoring=None, fit_params=None, n_jobs=1, iid=True,
refit=True,cv=None, verbose=0, pre_dispatch='2*n_jobs',
error_score='raise',return_train_score=True)
estimator:所使用的分类器
param_grid:值为字典或者列表,需要最优化的参数的取值范围,如paramters = {'n_estimators':