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

        在我们日常的进行超参数优化工作时,可以手动去试,也可以使用随机搜索、批量随机搜索和网格搜索等方法调到好的参数,关于网格搜索,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 GridSearchCV
from sklearn.ensemble import RandomForestClassifier
from scoring import cost_based_scoring as cbs                 #自己编写的scoring
import pickle

with 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")
 
  通过以上搜索后,程序将会返回给定参数值中结果最好的值! 
  
 
  

你可能感兴趣的:(Machine,Learning)