日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

机器学习之网格搜索(GridSearch)及参数说明,实例演示

發布時間:2023/12/14 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 机器学习之网格搜索(GridSearch)及参数说明,实例演示 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一)GridSearchCV簡介
網格搜索(GridSearch)用于選取模型的最優超參數。獲取最優超參數的方式可以繪制驗證曲線,但是驗證曲線只能每次獲取一個最優超參數。如果多個超參數有很多排列組合的話,就可以使用網格搜索尋求最優超參數的組合。

網格搜索針對超參數組合列表中的每一個組合,實例化給定的模型,做cv次交叉驗證,將平均得分最高的超參數組合作為最佳的選擇,返回模型對象。
GridSearchCV的sklearn官方網址:
http://scikit-learn.org/stable/modules/generated/sklearn.model_selection.GridSearchCV.html#sklearn.model_selection.GridSearchCV

二)sklearn.model_selection.GridSearchCV參數詳解

sklearn.model_selection.GridSearchCV( estimator, param_grid, scoring=None,n_jobs=None,iid=’warn’, refit=True, cv=’warn’, verbose=0, pre_dispatch=‘2*n_jobs’, error_score=’raise-deprecating’, return_train_score=False)

(1) estimator

選擇使用的分類器,并且傳入除需要確定最佳的參數之外的其他參數。
(2) param_grid

需要最優化的參數的取值,值為字典或者列表。
(3) scoring=None

模型評價標準,默認None。
根據所選模型不同,評價準則不同。比如scoring=”accuracy”。
如果是None,則使用estimator的誤差估計函數。
https://scikit-learn.org/stable/modules/model_evaluation.html#scoring-parameter (官方文檔)
Scoring的參數,如下圖:

ScoringFunctionComment
Classification
‘accuracy’metrics.accuracy_score
‘average_precision’ metrics.average_precision_score
‘f1’metrics.f1_scorefor binary targets
‘f1_micro’metrics.f1_scoremicro-averaged
‘f1_macro’metrics.f1_scoremacro-averaged
‘f1_weighted’metrics.f1_scoreweighted average
‘f1_samples’metrics.f1_scoreby multilabel sample
‘neg_log_loss’metrics.log_lossrequires predict_proba support
‘precision’ etc.metrics.precision_scoresuffixes apply as with ‘f1’
‘roc_auc’metrics.roc_auc_score
‘recall’ etc.metrics.recall_scoresuffixes apply as with ‘f1’
Clustering
‘adjusted_rand_score’metrics.adjusted_rand_score
Regression
‘neg_mean_absolute_error’metrics.mean_absolute_error
‘neg_mean_squared_error’metrics.mean_squared_error
‘neg_median_absolute_error’metrics.median_absolute_error
‘r2’metrics.r2_score
(4) n_jobs=1 進程個數,默認為1。 若值為 -1,則用所有的CPU進行運算。 若值為1,則不進行并行運算,這樣的話方便調試。 (5) iid=True

默認True,為True時,默認為各個樣本fold概率分布一致,誤差估計為所有樣本之和,而非各個fold的平均。

(6) refit=True

默認為True,程序將會以交叉驗證訓練集得到的最佳參數,重新對所有可用的訓練集與開發集進行,作為最終用于性能評估的最佳模型參數。即在搜索參數結束后,用最佳參數結果再次fit一遍全部數據集。

(7) cv=None

交叉驗證參數,默認None,使用三折交叉驗證。

(8) verbose=0,
verbose:日志冗長度
0:不輸出訓練過程,
1:偶爾輸出,>1:對每個子模型都輸出。

(9) pre_dispatch=‘2*n_jobs’

指定總共分發的并行任務數。當n_jobs大于1時,數據將在每個運行點進行復制,這可能導致OOM,而設置pre_dispatch參數,則可以預先劃分總共的job數量,使數據最多被復制pre_dispatch次

三)以鳶尾花數據集為例,基于網格搜索得到最優模型

import numpy as np import sklearn.model_selection as ms import sklearn.svm as svm #導入svm函數 from sklearn.datasets import load_iris #導入鳶尾花數據 iris = load_iris() x = iris.data y = iris.target # 可以看到樣本大概分為三類 print(x[:5]) print(y)

out:

[[5.1 3.5 1.4 0.2][4.9 3. 1.4 0.2][4.7 3.2 1.3 0.2][4.6 3.1 1.5 0.2][5. 3.6 1.4 0.2]] [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 00 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2 22 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 2 22 2] # 基于svm 實現分類 model = svm.SVC(probability=True) # 基于網格搜索獲取最優模型 params = [{'kernel':['linear'],'C':[1,10,100,1000]},{'kernel':['poly'],'C':[1,10],'degree':[2,3]},{'kernel':['rbf'],'C':[1,10,100,1000], 'gamma':[1,0.1, 0.01, 0.001]}] model = ms.GridSearchCV(estimator=model, param_grid=params, cv=5) model.fit(x, y) # 網格搜索訓練后的副產品 print("模型的最優參數:",model.best_params_) print("最優模型分數:",model.best_score_) print("最優模型對象:",model.best_estimator_)

out:

模型的最優參數: {'C': 1, 'kernel': 'linear'} 最優模型分數: 0.98 最優模型對象: SVC(C=1, cache_size=200, class_weight=None, coef0=0.0,decision_function_shape='ovr', degree=3, gamma='auto_deprecated',kernel='linear', max_iter=-1, probability=True, random_state=None,shrinking=True, tol=0.001, verbose=False) # 輸出網格搜索每組超參數的cv數據 for p, s in zip(model.cv_results_['params'],model.cv_results_['mean_test_score']):print(p, s)

out:

{'C': 1, 'kernel': 'linear'} 0.98 {'C': 10, 'kernel': 'linear'} 0.9733333333333334 {'C': 100, 'kernel': 'linear'} 0.9666666666666667 {'C': 1000, 'kernel': 'linear'} 0.9666666666666667 {'C': 1, 'degree': 2, 'kernel': 'poly'} 0.9733333333333334 {'C': 1, 'degree': 3, 'kernel': 'poly'} 0.9666666666666667 {'C': 10, 'degree': 2, 'kernel': 'poly'} 0.9666666666666667 {'C': 10, 'degree': 3, 'kernel': 'poly'} 0.9666666666666667 {'C': 1, 'gamma': 1, 'kernel': 'rbf'} 0.9666666666666667 {'C': 1, 'gamma': 0.1, 'kernel': 'rbf'} 0.98 {'C': 1, 'gamma': 0.01, 'kernel': 'rbf'} 0.9333333333333333 {'C': 1, 'gamma': 0.001, 'kernel': 'rbf'} 0.9133333333333333 {'C': 10, 'gamma': 1, 'kernel': 'rbf'} 0.9533333333333334 {'C': 10, 'gamma': 0.1, 'kernel': 'rbf'} 0.98 {'C': 10, 'gamma': 0.01, 'kernel': 'rbf'} 0.98 {'C': 10, 'gamma': 0.001, 'kernel': 'rbf'} 0.9333333333333333 {'C': 100, 'gamma': 1, 'kernel': 'rbf'} 0.94 {'C': 100, 'gamma': 0.1, 'kernel': 'rbf'} 0.9666666666666667 {'C': 100, 'gamma': 0.01, 'kernel': 'rbf'} 0.98 {'C': 100, 'gamma': 0.001, 'kernel': 'rbf'} 0.98 {'C': 1000, 'gamma': 1, 'kernel': 'rbf'} 0.9333333333333333 {'C': 1000, 'gamma': 0.1, 'kernel': 'rbf'} 0.9533333333333334 {'C': 1000, 'gamma': 0.01, 'kernel': 'rbf'} 0.9666666666666667 {'C': 1000, 'gamma': 0.001, 'kernel': 'rbf'} 0.98

四)疑問
我在看其他博客的時候,別人有提到說:“網格搜索這個方法適合于小數據集,一旦數據的量級上去了,就很難得出結果。這個時候可以使用一個快速調優的方法——坐標下降。拿當前對模型影響最大的參數調優,直到最優化;再拿下一個影響最大的參數調優,如此下去,直到所有的參數調整完畢。這個方法的缺點就是可能會調到局部最優而不是全局最優,但是省時間省力。” 我不太明白這個小數據集,它的體量是什么范圍,如果你知道,不妨留言告訴我,謝謝。

總結

以上是生活随笔為你收集整理的机器学习之网格搜索(GridSearch)及参数说明,实例演示的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。