【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")
通過以上搜索後,程序將會返回給定參數值中結果最好的值!

發佈了63 篇原創文章 · 獲贊 15 · 訪問量 10萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章