机器学习中的参数调整
總第102篇
前言
我們知道每個模型都有很多參數(shù)是可以調(diào)節(jié)的,比如SVM中使用什么樣的核函數(shù)以及C值的大小,決策樹中樹的深度等。在特征選好、基礎(chǔ)模型選好以后我們可以通過調(diào)整模型的這些參數(shù)來提高模型準確率。每個模型有很多參數(shù),而每個參數(shù)又有很多不同的取值,我們該怎么調(diào),最簡單的一個方法就是一個一個試。sklearn中提供了這樣的庫代替了我們手動去試的過程,就是GridSearchCV,他會自己組合不同參數(shù)的取值,然后輸出效果最好的一組參數(shù)。
GridSearchCV參數(shù)解釋
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=’warn’)estimator:所使用的基礎(chǔ)模型,比如svc
param_grid:是所需要的調(diào)整的參數(shù),以字典或列表的形式表示
scoring:準確率評判標準
n_jobs:并行運算數(shù)量(核的數(shù)量 ),默認為1,如果設(shè)置為-1,則表示將電腦中的cpu全部用上
iid:假設(shè)數(shù)據(jù)在每個cv(折疊)中是相同分布的,損失最小化是每個樣本的總損失,而不是折疊中的平均損失。
refit:默認為True,程序?qū)越徊骝炞C訓(xùn)練集得到的最佳參數(shù),重新對所有可用的訓(xùn)練集與開發(fā)集進行,作為最終用于性能評估的最佳模型參數(shù)。
cv:交叉驗證折疊數(shù),默認是3,當estimator是分類器時默認使用StratifiedKFold交叉方法,其他問題則默認使用KFold
verbose:日志冗長度,int類型,0:不輸出訓(xùn)練過程,1:偶爾輸出,>1:對每個子模型都輸出
pre_dispatch:控制job數(shù)量,避免job過多出現(xiàn)內(nèi)存錯誤
GridSearchCV對象
cv_results_:用來輸出cv結(jié)果的,可以是字典形式也可以是numpy形式,還可以轉(zhuǎn)換成DataFrame格式
best_estimator_:通過搜索參數(shù)得到的最好的估計器,當參數(shù)refit=False時該對象不可用
best_score_:float類型,輸出最好的成績
best_params_:通過網(wǎng)格搜索得到的score最好對應(yīng)的參數(shù)
GridSearchCV方法
decision_function(X):返回決策函數(shù)值(比如svm中的決策距離)
predict_proba(X):返回每個類別的概率值(有幾類就返回幾列值)
predict(X):返回預(yù)測結(jié)果值(0/1)
score(X, y=None):返回函數(shù)
get_params(deep=True):返回估計器的參數(shù)
fit(X,y=None,groups=None,fit_params):在數(shù)據(jù)集上運行所有的參數(shù)組合
transform(X):在X上使用訓(xùn)練好的參數(shù)
GridSearchCV實例
from sklearn import svm, datasets from sklearn.model_selection import GridSearchCV iris = datasets.load_iris() parameters = {'kernel':('linear', 'rbf'), 'C':[1, 10]} svc = svm.SVC() clf = GridSearchCV(svc, parameters) clf.fit(iris.data, iris.target) ------------------------------------------------------ GridSearchCV(cv=None, error_score='raise',estimator=SVC(C=1.0, cache_size=200, class_weight=None, coef0=0.0,decision_function_shape=None, degree=3, gamma='auto', kernel='rbf',max_iter=-1, probability=False, random_state=None, shrinking=True,tol=0.001, verbose=False),fit_params={}, iid=True, n_jobs=1,param_grid={'kernel': ('linear', 'rbf'), 'C': [1, 10]},pre_dispatch='2*n_jobs', refit=True, return_train_score=True,scoring=None, verbose=0)clf.cv_results_
我們可以看到,cv_result一共有四組,這正是兩個kernel和兩個C的隨機組合成四組。
clf.best_estimator_
clf.best_params_
clf.best_params_
注:本方法只適用于數(shù)據(jù)量較小的模型,不適合數(shù)據(jù)量過大的模型。
你還可以看:
機器學(xué)習(xí)模型效果評估
機器學(xué)習(xí)中非平衡數(shù)據(jù)處理
機器學(xué)習(xí)中的特征選擇
機器學(xué)習(xí)中的交叉驗證
總結(jié)
以上是生活随笔為你收集整理的机器学习中的参数调整的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python中的小魔法(一)
- 下一篇: CF兰海滩派对在哪里获得 兰海滩派对获取