日日操夜夜添-日日操影院-日日草夜夜操-日日干干-精品一区二区三区波多野结衣-精品一区二区三区高清免费不卡

公告:魔扣目錄網為廣大站長提供免費收錄網站服務,提交前請做好本站友鏈:【 網站目錄:http://www.ylptlb.cn 】, 免友鏈快審服務(50元/站),

點擊這里在線咨詢客服
新站提交
  • 網站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會員:747

作者:Sivasai Yadav Mudugandla

編譯:ronghuaiyang

導讀

ML工作流中最困難的部分之一是為模型找到最好的超參數。ML模型的性能與超參數直接相關。

每個算法人員都應該知道的4個超參數調試方法

 

介紹

維基百科上說,“Hyperparameter optimizationtuning是為學習算法選擇一組最優的hyperparameters的問題”。

ML工作流中最困難的部分之一是為模型找到最好的超參數。ML模型的性能與超參數直接相關。超參數調優的越好,得到的模型就越好。調優超參數可能是非常乏味和困難的,更像是一門藝術而不是科學。

超參數

超參數是在建立模型時用于控制算法行為的參數。這些參數不能從常規訓練過程中獲得。在對模型進行訓練之前,需要對它們進行賦值。

每個算法人員都應該知道的4個超參數調試方法

超參數的簡單列表

內容

  1. 傳統的手工調參
  2. 網格搜索
  3. 隨機搜索
  4. 貝葉斯搜索

1. 傳統手工搜索

在傳統的調參過程中,我們通過訓練算法手動檢查隨機超參數集,并選擇符合我們目標的最佳參數集。

我們看看代碼:

#importing required libraries
from sklearn.neighbors import KNeighborsClassifier
from sklearn.model_selection import train_test_split
from sklearn.model_selection import KFold , cross_val_score
from sklearn.datasets import load_wine
wine = load_wine()X = wine.datay = wine.target#splitting the data into train and test setX_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.3,random_state = 14)
#declaring parameters gridk_value = list(range(2,11))
algorithm = ['auto','ball_tree','kd_tree','brute']
scores = []best_comb = []kfold = KFold(n_splits=5)
#hyperparameter tunningfor algo in algorithm:  for k in k_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)} with algo = {algo} , K = {k}')
    scores.Append(results.mean())
    best_comb.append((k,algo))
best_param = best_comb[scores.index(max(scores))]print(f'nThe Best Score : {max(scores)}')
print(f"['algorithm': {best_param[1]} ,'n_neighbors': {best_param[0]}]")

缺點

  1. 沒辦法確保得到最佳的參數組合。
  2. 這是一個不斷試錯的過程,所以,非常的耗時。

2. 網格搜索

網格搜索是一種基本的超參數調優技術。它類似于手動調優,為網格中指定的所有給定超參數值的每個排列構建模型,評估并選擇最佳模型。考慮上面的例子,其中兩個超參數k_value =[2,3,4,5,6,7,8,9,10] & algorithm =[' auto ', ' ball_tree ', ' kd_tree ', ' brute '],在這個例子中,它總共構建了9*4 = 36不同的模型。

每個算法人員都應該知道的4個超參數調試方法

 

讓我們來了解一下sklearn的GridSearchCV是如何工作的:

from sklearn.model_selection import GridSearchCV
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)#best parameter combinationgrid.best_params_#Score achieved with best parameter combination
grid.best_score_#all combinations of hyperparametersgrid.cv_results_['params']
#average scores of cross-validationgrid.cv_results_['mean_test_score']

缺點

由于它嘗試了超參數的每一個組合,并根據交叉驗證得分選擇了最佳組合,這使得GridsearchCV非常慢。

3. 隨機搜索

使用隨機搜索代替網格搜索的動機是,在許多情況下,所有的超參數可能不是同等重要的。隨機搜索從超參數空間中隨機選擇參數組合,參數由n_iter給定的固定迭代次數的情況下選擇。實驗證明,隨機搜索的結果優于網格搜索。

每個算法人員都應該知道的4個超參數調試方法

 

讓我們來了解sklearn的RandomizedSearchCV是如何工作的,

from sklearn.model_selection import RandomizedSearchCV
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)#best parameter combinationrand_ser.best_params_#score achieved with best parameter combination
rand_ser.best_score_#all combinations of hyperparametersrand_ser.cv_results_['params']
#average scores of cross-validationrand_ser.cv_results_['mean_test_score']

缺點

隨機搜索的問題是它不能保證給出最好的參數組合。

4. 貝葉斯搜索

貝葉斯優化屬于一類優化算法,稱為基于序列模型的優化(SMBO)算法。這些算法使用先前對損失f的觀察結果,以確定下一個(最優)點來抽樣f。該算法大致可以概括如下。

  1. 使用先前評估的點X1*:n*,計算損失f的后驗期望。
  2. 在新的點X的抽樣損失f,從而最大化f的期望的某些方法。該方法指定f域的哪些區域最適于抽樣。

重復這些步驟,直到滿足某些收斂準則。

每個算法人員都應該知道的4個超參數調試方法

 

讓我們用scikit- optimization的BayesSearchCV來理解這

Installation: pip install scikit-optimize

from skopt import BayesSearchCV
import warningswarnings.filterwarnings("ignore")
# parameter ranges are specified by one of belowfrom skopt.space import Real, Categorical, Integer
knn = KNeighborsClassifier()#defining hyper-parameter gridgrid_param = { 'n_neighbors' : list(range(2,11)) , 
              'algorithm' : ['auto','ball_tree','kd_tree','brute'] }
#initializing Bayesian SearchBayes = BayesSearchCV(knn , grid_param , n_iter=30 , random_state=14)
Bayes.fit(X_train,y_train)#best parameter combinationBayes.best_params_#score achieved with best parameter combination
Bayes.best_score_#all combinations of hyperparametersBayes.cv_results_['params']
#average scores of cross-validationBayes.cv_results_['mean_test_score']

另一個實現貝葉斯搜索的類似庫是bayesian-optimization。

Installation: pip install bayesian-optimization

缺點

要在2維或3維的搜索空間中得到一個好的代理曲面需要十幾個樣本,增加搜索空間的維數需要更多的樣本。

總結

在確定參數的最佳組合的保證和計算時間之間總是存在權衡。如果超參數空間(超參數個數)非常大,則使用隨機搜索找到超參數的潛在組合,然后在該局部使用網格搜索(超參數的潛在組合)選擇最優特征。

 

英文原文:https://medium.com/swlh/4-hyper-parameter-tuning-techniques-924cb188d199

分享到:
標簽:調試 參數
用戶無頭像

網友整理

注冊時間:

網站:5 個   小程序:0 個  文章:12 篇

  • 51998

    網站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會員

趕快注冊賬號,推廣您的網站吧!
最新入駐小程序

數獨大挑戰2018-06-03

數獨一種數學游戲,玩家需要根據9

答題星2018-06-03

您可以通過答題星輕松地創建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學四六

運動步數有氧達人2018-06-03

記錄運動步數,積累氧氣值。還可偷

每日養生app2018-06-03

每日養生,天天健康

體育訓練成績評定2018-06-03

通用課目體育訓練成績評定