sklearn-GridSearchCV调节超参数
同樣的模型不同的參數下,模型的得分差距很大。sklearn中提供了參數調節函數:GridSearchCV。將待挑選的參數輸入,可以自動的挑選最佳的參數和結果。
缺陷: 一旦模型的量級上去之后,將需要很長的時間函數才能運行完成。因為該函數執行一次所訓練和測試的次數為:優化參數組合數*K(K折交叉驗證)。當數據集很大時,多次反復訓練模型將非常耗時。
對于數據集很大時可以參考這篇博客:一種將grid-search速度提升10倍的方法
關于交叉驗證可以參考這篇博客:交叉驗證
函數原型
class sklearn.model_selection.GridSearchCV(
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 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=True)
1
2
3
4
5
6
7
8
9
10
11
12
13
功能
遍歷待優化的參數的所有組合,在每一組參數下使用交叉驗證訓練模型。
參數
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次
常用方法和屬性
grid.fit(X,y) :運行網格搜索
grid_scores_:給出不同參數情況下的評價結果
best_params_:描述了已取得最佳結果的參數的組合
best_score_:成員提供優化過程期間觀察到的最好的評分
案例
from sklearn.model_selection import GridSearchCV, KFold, train_test_split
from sklearn.metrics import make_scorer, accuracy_score
from sklearn.tree import DecisionTreeClassifier
from sklearn.datasets import load_breast_cancer
data = load_breast_cancer()
X_train, X_test, y_train, y_test = train_test_split(
? ? data['data'], data['target'], train_size=0.8, random_state=0)
regressor = DecisionTreeClassifier(random_state=0)
parameters = {'max_depth': range(1, 6)}
scoring_fnc = make_scorer(accuracy_score)
kfold = KFold(n_splits=10)
grid = GridSearchCV(regressor, parameters, scoring_fnc, cv=kfold)
grid = grid.fit(X_train, y_train)
reg = grid.best_estimator_
print('best score: %f'%grid.best_score_)
print('best parameters:')
for key in parameters.keys():
? ? print('%s: %d'%(key, reg.get_params()[key]))
print('test score: %f'%reg.score(X_test, y_test))
import pandas as pd
pd.DataFrame(grid.cv_results_).T
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
參考文獻
sklearn-GridSearchCV,CV調節超參使用方法
網格搜索算法與K折交叉驗證
Sklearn-GridSearchCV網格搜索
Python超參數自動搜索模塊GridSearchCV上手
————————————————
版權聲明:本文為CSDN博主「碼靈薯」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/geduo_feng/article/details/79544454
總結
以上是生活随笔為你收集整理的sklearn-GridSearchCV调节超参数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 图数据库应用:金融反欺诈实践
- 下一篇: 人一样自然流畅地说话,下一代智能对话系统