scikit-learn学习3.2.Grid Search:搜索估计器的参数

来源:互联网 发布:linux uname命令 编辑:程序博客网 时间:2024/05/17 22:55

一些评估器不能直接学习到的参数,可以通过搜索参数空间得到最好的交叉验证得分来设置。典型的例子如SVM的C、kernal和gamma参数,Lasso的alpha参数等。

任何在构建估计器的时候需要设置的参数都可以通过这种方式进行优化。可以使用下面这个函数来查找指定估计器的所有的参数名称和默认值:

estimator.get_params()
这种参数通常被称为超参数(特别是在贝叶斯学习中),需要将它们和在机器学习过程中优化的参数区分开。

一个搜索包含下面几部分:

  • 一个估计器(回归或分类器,如sklearn.svm.SVC());
  • 一个参数空间;
  • 一个搜索或采样候选参数的方法;
  • 一个交叉验证方案;
  • 一个得分函数。
一些模型允许专业和高效的参数搜索策略(稍后会列出一些)。scikit-learn提供了两个常见的采样搜索候选参数的策略:对给定参数值,GridSearchCV穷举了所有的参数组合;RandomizedSearchCV会使用一个特定的分布来从参数空间中采样出指定数量的候选参数。在描述完这些工具后我们会对这两种策略进行详细的实践应用。
3.2.1.穷举网格搜索
GridSearchCV提供的网格搜索策略根据param_grid指定的一个网格参数值来穷举生成候选参数,例如下面的param_grid
param_grid = [  {'C': [1, 10, 100, 1000], 'kernel': ['linear']},  {'C': [1, 10, 100, 1000], 'gamma': [0.001, 0.0001], 'kernel': ['rbf']}, ]
指定两个需要搜索的网格:第一个是一个线性核函数且C取值在[1,10,100,1000]中,第二个是一个RBF核函数且C的
交叉乘积取值在[1,10,100,1000]中,gamma取值在[0.001,0.0001]中。

GridSearchCV实例实现了常用的估计器API:当在一个数据集上训练估计器时,所有可能的参数值组合都会被评估,
并保留最好的组合。

3.2.2.随机参数优化
虽然目前最广泛使用的参数优化方法是网格搜索,但其他搜索方法也有许多有利的属性。RandomizedSearchCV实现了参数的随机搜索,每种设置都是从可能参数值的分布中采样得到的。这种方法和穷举
搜索相比有两个主要的优点:
  • 可以选择一个独立于参数数目和可能值的预算。
  • 增加不影响性能的参数不会降低效率。
GridSearchCV指定参数的方式相似,使用一个字典来指定参数如何被采样。另外,需要使用n_iter指定采样候选参数的数量或者采样迭代次数作为计算的预算。对每个参数,要么指定可能值的分布要么指定一个离散的选项
(会被均匀的采样):
[{'C': scipy.stats.expon(scale=100), 'gamma': scipy.stats.expon(scale=.1),  'kernel': ['rbf'], 'class_weight':['auto', None]}]
这个例子中使用了scipy.stats模块,它包含了许多参数采样需要的有用的分布,例如expon、gamma、uniform或者randint。
(未完结)

3.2.3.参数搜索小贴士
3.2.3.1.指定目标标准
默认情况下,参数搜索使用估计器的score函数来评估一个设定参数的好坏。比如分类中的 sklearn.metrics.accuracy_score函数,回归中的sklearn.metrics.r2_score函数。对一些应用来说,其他得分函数可能更适
合(例如在非均衡分类中,准确率经常没有参考价值)。其他的得分函数可以通过scoring参数对GridSearchCV和
RandomizedSearchCV 指定,下面描述了很多专业的交叉验证工具。更多细节请参考The scoring parameter: 
defining model evaluation rules章节。
3.2.3.2.复合估计器和参数空间
Pipeline: chaining estimators描述了使用这些工具构建参数空间可以被搜索的复合估计器。
(未完结)










0 0
原创粉丝点击