作者:Sivasai,來源:AI公園導讀
ML工作流中最困難的部分之一是為模型找到最好的超參數。ML模型的性能與超參數直接相關。
介紹
維基百科上說,“Hyperparameter optimization或tuning是為學習算法選擇一組最優的hyperparameters的問題”。
ML工作流中最困難的部分之一是為模型找到最好的超參數。ML模型的性能與超參數直接相關。超參數調優的越好,得到的模型就越好。調優超參數可能是非常乏味和困難的,更像是一門藝術而不是科學。
超參數
超參數是在建立模型時用于控制算法行為的參數。這些參數不能從常規訓練過程中獲得。在對模型進行訓練之前,需要對它們進行賦值。
超參數的簡單列表
內容
傳統的手工調參
網格搜索
隨機搜索
貝葉斯搜索
1. 傳統手工搜索
在傳統的調參過程中,我們通過訓練算法手動檢查隨機超參數集,并選擇符合我們目標的最佳參數集。
我們看看代碼:
#importingrequiredlibraries fromsklearn.neighborsimportKNeighborsClassifier fromsklearn.model_selectionimporttrain_test_split fromsklearn.model_selectionimportKFold,cross_val_score fromsklearn.datasetsimportload_wine wine=load_wine() X=wine.data y=wine.target #splittingthedataintotrainandtestset X_train,X_test,y_train,y_test=train_test_split(X,y,test_size=0.3,random_state=14) #declaringparametersgrid k_value=list(range(2,11)) algorithm=['auto','ball_tree','kd_tree','brute'] scores=[] best_comb=[] kfold=KFold(n_splits=5) #hyperparametertunning foralgoinalgorithm: forkink_value: knn=KNeighborsClassifier(n_neighbors=k,algorithm=algo) results=cross_val_score(knn,X_train,y_train,cv=kfold) print(f'Score:{round(results.mean(),4)}withalgo={algo},K={k}') scores.append(results.mean()) best_comb.append((k,algo)) best_param=best_comb[scores.index(max(scores))] print(f' TheBestScore:{max(scores)}') print(f"['algorithm':{best_param[1]},'n_neighbors':{best_param[0]}]")
缺點:
沒辦法確保得到最佳的參數組合。
這是一個不斷試錯的過程,所以,非常的耗時。
2. 網格搜索
網格搜索是一種基本的超參數調優技術。它類似于手動調優,為網格中指定的所有給定超參數值的每個排列構建模型,評估并選擇最佳模型。考慮上面的例子,其中兩個超參數k_value =[2,3,4,5,6,7,8,9,10]&algorithm =[' auto ', ' ball_tree ', ' kd_tree ', ' brute '],在這個例子中,它總共構建了9*4 = 36不同的模型。
讓我們來了解一下sklearn的GridSearchCV是如何工作的:
fromsklearn.model_selectionimportGridSearchCV knn=KNeighborsClassifier() grid_param={'n_neighbors':list(range(2,11)), 'algorithm':['auto','ball_tree','kd_tree','brute']} grid=GridSearchCV(knn,grid_param,cv=5) grid.fit(X_train,y_train) #bestparametercombination grid.best_params_ #Scoreachievedwithbestparametercombination grid.best_score_ #allcombinationsofhyperparameters grid.cv_results_['params'] #averagescoresofcross-validation grid.cv_results_['mean_test_score']
缺點:
由于它嘗試了超參數的每一個組合,并根據交叉驗證得分選擇了最佳組合,這使得GridsearchCV非常慢。
3. 隨機搜索
使用隨機搜索代替網格搜索的動機是,在許多情況下,所有的超參數可能不是同等重要的。隨機搜索從超參數空間中隨機選擇參數組合,參數由n_iter給定的固定迭代次數的情況下選擇。實驗證明,隨機搜索的結果優于網格搜索。
讓我們來了解sklearn的RandomizedSearchCV是如何工作的,
fromsklearn.model_selectionimportRandomizedSearchCV knn=KNeighborsClassifier() grid_param={'n_neighbors':list(range(2,11)), 'algorithm':['auto','ball_tree','kd_tree','brute']} rand_ser=RandomizedSearchCV(knn,grid_param,n_iter=10) rand_ser.fit(X_train,y_train) #bestparametercombination rand_ser.best_params_ #scoreachievedwithbestparametercombination rand_ser.best_score_ #allcombinationsofhyperparameters rand_ser.cv_results_['params'] #averagescoresofcross-validation rand_ser.cv_results_['mean_test_score']
缺點:
隨機搜索的問題是它不能保證給出最好的參數組合。
4. 貝葉斯搜索
貝葉斯優化屬于一類優化算法,稱為基于序列模型的優化(SMBO)算法。這些算法使用先前對損失f的觀察結果,以確定下一個(最優)點來抽樣f。該算法大致可以概括如下。
使用先前評估的點X1*:n*,計算損失f的后驗期望。
在新的點X的抽樣損失f,從而最大化f的期望的某些方法。該方法指定f域的哪些區域最適于抽樣。
重復這些步驟,直到滿足某些收斂準則。
讓我們用scikit- optimization的BayesSearchCV來理解這
Installation: pip install scikit-optimize
fromskoptimportBayesSearchCV importwarnings warnings.filterwarnings("ignore") #parameterrangesarespecifiedbyoneofbelow fromskopt.spaceimportReal,Categorical,Integer knn=KNeighborsClassifier() #defininghyper-parametergrid grid_param={'n_neighbors':list(range(2,11)), 'algorithm':['auto','ball_tree','kd_tree','brute']} #initializingBayesianSearch Bayes=BayesSearchCV(knn,grid_param,n_iter=30,random_state=14) Bayes.fit(X_train,y_train) #bestparametercombination Bayes.best_params_ #scoreachievedwithbestparametercombination Bayes.best_score_ #allcombinationsofhyperparameters Bayes.cv_results_['params'] #averagescoresofcross-validation Bayes.cv_results_['mean_test_score']
缺點:
要在2維或3維的搜索空間中得到一個好的代理曲面需要十幾個樣本,增加搜索空間的維數需要更多的樣本。
總結
在確定參數的最佳組合的保證和計算時間之間總是存在權衡。如果超參數空間(超參數個數)非常大,則使用隨機搜索找到超參數的潛在組合,然后在該局部使用網格搜索(超參數的潛在組合)選擇最優特征。
原文標題:機器學習4個常用超參數調試方法!
文章出處:【微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。
責任編輯:haq
-
ML
+關注
關注
0文章
149瀏覽量
34670 -
機器學習
+關注
關注
66文章
8425瀏覽量
132773
原文標題:機器學習4個常用超參數調試方法!
文章出處:【微信號:vision263com,微信公眾號:新機器視覺】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
相關推薦
評論