【Machine Learning】通过网格搜索进行调参

来源:互联网 发布:淘宝正道体育假货 编辑:程序博客网 时间:2024/06/05 00:26

        在我们日常的进行超参数优化工作时,可以手动去试,也可以使用随机搜索、批量随机搜索和网格搜索等方法调到好的参数,关于网格搜索,sklearn中GridSearchCV用于系统地遍历多种参数组合,通过交叉验证确定最佳效果参数。

一、参数简介

         ①estimator:所使用的分类器,如estimator=RandomForestClassifier(njobs=-1),n_jobs为并行数,int:个数,-1表示跟CPU核数一致,默认值为1。

    ②parameters:需要最优化的参数取值,一般为字典或者列表,如parameters={'n_estimators':[25,30,35],'criterion':('gini','entropy')}。

    ③scoring:评价标准,每一个分类器都需要一个scoring参数,或者score方法,默认None,这时需要使用score函数;或者如scoring='roc_auc',根据所选模型不同,评价准则不同。如果是None,则使用estimator的误差估计函数。

    ④cv :交叉验证参数,默认None,使用三折交叉验证。

    ⑤refit :默认为True,程序将会以交叉验证训练集得到的最佳参数,重新对所有可用的训练集与开发集进行,作为最终用于性能评估的最佳模型参数。即在搜索参数结束后,用最佳参数结果再次fit一遍全部数据集。    ⑥verbose:日志冗长度,int:冗长度,0指不输出训练过程,1指偶尔输出,如果>1是指对每个子模型都输出。
二、实例代码
# -*- coding: utf-8 -*-from sklearn.model_selection import GridSearchCVfrom sklearn.ensemble import RandomForestClassifierfrom scoring import cost_based_scoring as cbs                 #自己编写的scoringimport picklewith open('../data/training_df.pkl', 'rb') as f:              #load数据集    df = pickle.load(f)with open(r'../data/selected_feat_names.pkl', 'rb') as f:     #特征和标签的key    selected_feat_names = pickle.load(f)print("data loaded")y = df["attack_type"].values                                  #标签,y值X = df[selected_feat_names].values                            #所有特征值rfc = RandomForestClassifier(n_jobs=-1)                       #随机森林分类器parameters = {    'n_estimators': [25, 30, 35],     'criterion': ("gini", "entropy")}scorer = cbs.scorer(show=True)if __name__ == '__main__':    gscv = GridSearchCV(rfc, parameters,                        scoring=scorer,                        cv=3,                        verbose=2,                        refit=False,                        n_jobs=1,                        return_train_score=False)    gscv.fit(X, y)    print(gscv.cv_results_)    print(gscv.best_params_, gscv.best_score_)    print("grid search finished")
通过以上搜索后,程序将会返回给定参数值中结果最好的值!

原创粉丝点击