模型的超参数指的是模型训练前事先设定的参数(Hyperparameters),如K近邻中的K值,SVM支持向量机中的不同核函数等。
超参数的选择是无限制的,如果给定有限的时间,有两种方法:
(1)验证人工预设的几种超参数的组合。
(2)可以通过启发式的搜索方法对超参数组合进行调优。这种方法就是网格搜索。
由于超参数的验证过程之间彼此独立,网格搜索也有并行搜索的版本。
网格搜索
由于超参数的取值是无尽的,因此超参数的组合配置只能是“更优”解,没有最优解。通常下我们依靠网格搜索GridSearch对多种超参数的组合空间暴力搜索。每一套超参数组合都被代入学习函数中作为新的模型,并且为了比较新模型之间的性能,每个模型都会采用交叉验证的方法在多组相同的训练数据集和测试集下进行评估。
下面通过单线程对文本分类的朴素贝叶斯的超参数组合执行网格搜索。
python代码:
#-*- coding: utf-8 -*-
# @Time : 2019/10/4 19:12
# @Author : JinchaoLiu
# @File : SearchGridNativeBayes.py
import numpy as np
# 1.导入数据
from sklearn.datasets import fetch_20newsgroups
news=fetch_20newsgroups(subset='all')
# 2.数据切分(前3000条)
from sklearn.model_selection import train_test_split # 留一法
X=news.data[:3000]
y=news.target[:3000]
X_train,X_test