python网格搜索核函数_python机器学习——超参数网格搜索
網格搜索理論
(1)參數與超參數
參數是由模型從數據中學習得到的。如回歸中各自變量前的系數。
超參數:所謂超參數,就是機器學習模型里面的框架參數,比如聚類方法的類別的個數,隨機森林生成樹的個數。它們跟訓練過程中學習的參數(權重)是不一樣的,通常是手工設定幾個取值,然后通過不斷試錯調整,對一系列窮舉出來的參數組合一通枚舉(叫做網格搜索)。
【例】
① SVR 需要事先決定核心函數( kernel function )的類型,若選擇不當,則得不到良好的預測結果;
sklearn.svm.SVC(C=1.0, kernel=‘rbf’, degree=3, gamma=‘auto’, coef0=0.0, shrinking=True, probability=False, tol=0.001, cache_size=200, class_weight=None, verbose=False, max_iter=-1, decision_function_shape=None,random_state=None)
參數解釋: C:C-SVC 的懲罰參數 C ,默認值是 1.0。C 越大,相當于懲罰松弛變量,希望松弛變量接近 0,即對誤分類的懲罰增大,趨向于對訓練集全分對的情況,這樣對訓練集測試時準確率很高,但泛化能力弱。C 值小,對誤分類的懲罰減小,允許容錯,將他們當成噪聲點,泛化能力較強。
kernel:核函數, 默認是 rbf ,可以是‘linear’, ‘poly’, ‘rbf’, ‘sigmoid’, ‘precomputed’
degree :多項式 poly 函數的維度, 默認是 3 ,選擇其他核函數時會被忽略。
gamma :‘rbf’,‘poly’ 和‘sigmoid’的核函數參數。默認是’auto’,則會選擇1/n_features
coef0 :核函數的常數項。對于‘poly’和 ‘sigmoid’有用。
probability :是否采用概率估計? 默認為 False
shrinking :是否采用 shrinking heuristic 方法, 默認為 true
tol :停止訓練的誤差值大小, 默認為 1e-3
cache_size :核函數 cache 緩存大小, 默認為 200
class_weight :類別的權重,字典形式傳遞。設置第幾類的參數 C 為 weight*C(C-SVC 中的 C)
verbose :日志
max_iter :最大迭代次數。-1 為無限制。
decision_function_shape :‘ovo’, ‘ovr’ or None, default=None3
random_state :隨機種子值,int 值
主要調節的超參數有:C、kernel、degree、gamma、coef0。
(2)網格搜索
任何一種機器學習模型都附帶很多超參數,不同場景對應不同的最佳參數,手工嘗試各種參數無疑浪費很多時間,而 scikit-learn 幫我們實現了自動化,那就是網格搜索(grid Search)。
這里的網格指的是不同超參數不同取值交叉后形成的一個多維網格空間。比如超參數 a 可以取 1、2 ,參數 b 可以取 3、4 ,參數 c 可以取 5、6 ,那么形成的多維網格空間就是:? 網格搜索就是遍歷這 8 種情況進行模型訓練和驗證,最終選擇出效果最優的超參數組合。 sklearn 里面的 GridSearchCV 用于系統地遍歷多種超參數組合,通過交叉驗證確定最佳效果參數。
注意:GridSearchCV ,它存在的意義就是自動調參,只要把參數輸進去,就能給出最優化的結果和參數。但是這個方法適合于小數據集,一旦數據的量級上去了,計算量太大,非常耗時。
數據量比較大的時候可以使用一個快速調優的方法——坐標下降。它其實是一種貪心算法:拿當前對模型影響最大的參數調優,直到最優化;再拿下一個影響最大的參數調優,如此下去,直到所有的參數調整完畢。這個方法的缺點就是可能會調到局部最優而不是全局最優,但是省時間省力,后續可以再拿 bagging 優化。
用法:
① 常用參數解讀
estimator:所使用的分類器。如
e
s
t
i
m
a
t
o
r
=
R
a
n
d
o
m
F
o
r
e
s
t
C
l
a
s
s
i
f
i
e
r
(
m
i
n
_
s
a
m
p
l
e
s
_
s
p
l
i
t
=
100
,
m
i
n
_
s
a
m
p
l
e
s
_
l
e
a
f
=
20
,
m
a
x
_
d
e
p
t
h
=
8
,
m
a
x
_
f
e
a
t
u
r
e
s
=
′
s
q
r
t
′
,
r
a
n
d
o
m
_
s
t
a
t
e
=
10
)
estimator=RandomForestClassifier(min\_samples\_split=100,min\_samples\_leaf=20,max\_depth=8,max\_features='sqrt',random\_state=10)
estimator=RandomForestClassifier(min_samples_split=100,min_samples_leaf=20,max_depth=8,max_features=′sqrt′,random_state=10), 并且傳入除需要確定最佳的參數之外的其他參數。每一個分類器都需要一個 scoring 參數,或者 score 方法。
param_grid:值為字典或者列表,即需要最優化的參數的取值,
p
a
r
a
m
_
g
r
i
d
=
p
a
r
a
m
_
t
e
s
t
1
,
p
a
r
a
m
_
t
e
s
t
1
=
′
n
_
e
s
t
i
m
a
t
o
r
s
′
:
r
a
n
g
e
(
10
,
71
,
10
)
param\_grid =param\_test1,param\_test1 = {'n\_estimators':range(10,71,10)}
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 : 默認值。
② 進行預測的常用方法和屬性
grid.fit():運行網格搜索。
grid_scores_:給出不同參數情況下的評價結果。
best_params_:描述了已取得最佳結果的參數的組合。
best_score_:成員提供優化過程期間觀察到的最好的評分。
(3)并行搜索
由于各個新模型在執行交叉驗證的過程中間是相互獨立的,所以我們可以充分利用多核處理器( Multicore Processor )甚至是分布式的計算資源來從事并行搜索( Parallel Grid Search ),這樣能夠成倍地節省運算時間,提升效率。
注意:并行算法就是用多臺處理機聯合求解問題的方法和步驟,其執行過程是將給定的問題首先分解成若干個盡量相互獨立的子問 題,然后使用多臺計算機同時求解它,從而最終求得原問題的解。
參考文獻:
[1] 范淼,李超.Python 機器學習及實踐[M].清華大學出版社, 北京, 2016.
總結
以上是生活随笔為你收集整理的python网格搜索核函数_python机器学习——超参数网格搜索的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Synopsys Mentor Cand
- 下一篇: oracle官网下载plsql,Orac