【sklearn】使用GridSearchCV查找最优参数

    GridSearchCV是用来查找最优参数的常用方法,只需要把参数的候选集输入进去,就会自动的帮你进行排列组合,然后选出得分最高的那一组参数的排列。

    该函数的原型

class GridSearchCV(BaseSearchCV):

    def __init__(self, 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="warn"):
        super(GridSearchCV, self).__init__(
            estimator=estimator, scoring=scoring, fit_params=fit_params,
            n_jobs=n_jobs, iid=iid, refit=refit, cv=cv, verbose=verbose,
            pre_dispatch=pre_dispatch, error_score=error_score,
            return_train_score=return_train_score)
        self.param_grid = param_grid
        _check_param_grid(param_grid)

    def _get_param_iterator(self):
        """Return ParameterGrid instance for the given param_grid"""
        return ParameterGrid(self.param_grid)

参数解读:

estimator:所使用的分类器,如estimator=RandomForestClassifier(min_samples_split=100,min_samples_leaf=20,max_depth=8,max_features='sqrt',random_state=10), 并且传入除需要确定最佳的参数之外的其他参数。每一个分类器都需要一个scoring参数,或者score方法。

 

param_grid值为字典或者列表,即需要最优化的参数的取值,param_grid =param_test1,param_test1 = {'n_estimators':range(10,71,10)}。

 

scoring :准确度评价标准,默认None,这时需要使用score函数;或者如scoring='roc_auc',根据所选模型不同,评价准则不同。字符串(函数名),或是可调用对象,需要其函数签名形如:scorer(estimator, X, y);如果是None,则使用estimator的误差估计函数。

 

cv :交叉验证参数,默认None,使用三折交叉验证。指定fold数量,默认为3,也可以是yield训练/测试数据的生成器。

 

refit :默认为True,程序将会以交叉验证训练集得到的最佳参数,重新对所有可用的训练集与开发集进行,作为最终用于性能评估的最佳模型参数。即在搜索参数结束后,用最佳参数结果再次fit一遍全部数据集。

 

iid:默认True,为True时,默认为各个样本fold概率分布一致,误差估计为所有样本之和,而非各个fold的平均。

 

verbose日志冗长度,int:冗长度,0:不输出训练过程,1:偶尔输出,>1:对每个子模型都输出。

 

n_jobs: 并行数,int:个数,-1:跟CPU核数一致, 1:默认值。

 

pre_dispatch指定总共分发的并行任务数。当n_jobs大于1时,数据将在每个运行点进行复制,这可能导致OOM,而设置pre_dispatch参数,则可以预先划分总共的job数量,使数据最多被复制pre_dispatch次

 

样例

def trainModuleByGridSearchCV(trainData, trainLabel):
    '''
        训练模型,使用GridSearchCV查找最优超参数
        :param trainData: 训练集
        :param trainLabel: 训练集的样本标签
        :return:
        '''
    param_test = {'C':[1,10,100],'gamma':[0.001,0.01,0.1]}
    gs1 = GridSearchCV(svm.SVR(kernel='rbf'), param_grid=param_test, cv=3, scoring='r2')
    gs1.fit(trainData, trainLabel)
    print(gs1.grid_scores_)

 

你可能感兴趣的:(机器学习)