sklearn模型选择--超参数优化

超参数是指我们无法直接从数据集获取的参数。
超参数的选择是通过搜索超参数的取值空间来选择的,我们可以使用estimator.get_params()来获取当前的参数,但是一般不会一步一步靠获取当前参数来选择最优结果。所以我们经常用到参数空间的搜索这一概念。
一个参数搜索空间由5个部分组成:
1.一个estimator(回归器或分类器)
2.一个参数的空间
3.一个搜索或采样方法来获取参数组合
4.一个交叉验证机制
5.一个评分函数
寻找最优超参数的方法有两种:网格搜索和随机采样,两个优化方法均在sklearn.model_selection.里面,两种超参数的搜索方法均实现了统一的API, 如fit,predict,transform,score,set_params,get_params

1.网格搜索(GridsearchCV)
特点:我们在指定搜索的参数要求时,其取值只能是连续的(随机采样可以使用scipy.stats指定任意分布)

在这里插入图片描述

from sklearn import svm, datasets

from sklearn.model_selection import GridSearchCV

iris = datasets.load_iris()  # 导入鸢尾花数据集
parameters = {
    
    "kernel": ('liner', 'rbf'),
              'c': [10, 0.1, 0.1]}    # 指定参数,包括核函数以及选取数据集

clf = GridSearchCV(svm.SVC(), param_grid=parameters)  # 依据参数parameters进行网格搜索,确定SVC的最优超参数
clf.result = clf.fit(iris.data, iris.target)
print(clf.result.best_estimator_)

2.随机采样超参数的优化
指定参数的采样范围和分布可以用一个字典表来完成,需要指定计算次数,通过n_iter来指定,取值范围可以离散也可以时连续分布,连续分布需包含当前所有的取值

parameters={
    
    'c':scip.stats.expon(scale=100),
             'gamma':scipy.stats.expon(scale=0.1),
             'kernel':['rbf],
             'class_weight':['balanced',None]}
#参数的指定
#大致流程可参考网格搜索代码
digits=load_digits()#导入手写体数据
x=digits.data
y=digits.target
parm={
    
    'max_depth':[3,None],
       'max_feayure':sp_randint(1,11)
       'min_samples_split':sp_randint(2,11),
       'criterion':['gini',;entropy]}
clf=RandomForestClassifier(n_estimators=20)#使用随机森林
random=RandomizedSearchCV(clf,param_distributions=para,n_iter=20#放入随即划分所需要的原始模型,搜索参数,搜索次数
random.fit(x,y)#导入数据进行搜索

3.优化技巧
1.指定一个合适的目标测度对模型进行评估,使用estimator.score函数
(分类器sklearn.metrics.accuracy_score
回归器sklearn.metrics.r2_score)
2.使用sklearn的pipline对estimator和参数空间组合
3.合理化数据集,使用model_selection.train_test_split()划分
4.并行运算,指定n_jobs的大小,受硬件的值约
5.提供某些错误节点上的鲁棒性,错误参数给出警告,可以通过error_score=0(or=np.Nan)来指定

猜你喜欢

转载自blog.csdn.net/soulproficiency/article/details/105481714