如今的機器學習和深度學習中,在模型結構肯定的狀況下,不一樣的超參數的選擇對整個結果的好壞有着相當重要的影響。很多人還嬉稱人工智能工程師,實際上是「調參俠」。html
Grid Search用的是窮舉搜索:在全部候選的參數選擇中,經過循環遍歷,嘗試每一種可能性,表現最好的參數就是最終的結果。其原理就像是在數組裏找最大值。(爲何叫網格搜索?以有兩個參數的模型爲例,參數a有3種可能,參數b有4種可能,把全部可能性列出來,能夠表示成一個3*4的表格,其中每一個cell就是一個網格,循環過程就像是在每一個網格里遍歷、搜索,因此叫grid search)python
隨機搜索是一種在巨大數據規模下執行一個耗時上沒法接受的程序的優化方法。算法
隨機搜索的算法類型:數組
這裏給出一個GridSearch和RandomSearch的簡單使用方式,方便同窗們測試功能用。dom
from sklearn.neighbors import KNeighborsClassifier from sklearn import datasets from sklearn.model_selection import GridSearchCV,RandomizedSearchCV from sklearn.model_selection import train_test_split # 加載數據集 iris = datasets.load_iris() data = iris.data label = iris.target # 數據集分割 X_train,X_test,y_train,y_test = train_test_split(data,label,test_size=0.3,random_state=2) knn_clf_orogin = KNeighborsClassifier() # 搜索的超參數範圍 param_grid ={ 'weights':['distance'], 'n_neighbors':[i for i in range(1,11)], 'p':[i for i in range(1,6)] } grid_search = GridSearchCV(knn_clf,param_grid,n_jobs=-1,verbose=2) grid_search.fit(X_train,y_train) knn_clf1 = grid_search.best_estimator_ y_pre = knn_clf1.predict(X_test) knn_clf1.score(X_test,y_pre) # print('grid_search-度量記錄:',grid_search.cv_results_) print('grid_search-最佳度量值:',grid_search.best_score_) print('grid_search-最佳參數:',grid_search.best_params_) print('grid_search-最佳模型:',grid_search.best_estimator_) random_search = RandomizedSearchCV(knn_clf_orogin,param_grid,n_jobs=-1,verbose=2) random_search.fit(X_train,y_train) knn_clf2 = random_search.best_estimator_ y_pre = knn_clf2.predict(X_test) knn_clf2.score(X_test,y_pre) # print('random_search-度量記錄:',random_search.cv_results_) print('random_search-最佳度量值:',random_search.best_score_) print('random_search-最佳參數:',random_search.best_params_) print('random_search-最佳模型:',random_search.best_estimator_)
雖然隨機搜索獲得的結果互相之間差別較大,可是實驗證實隨機搜索的確比網格搜索效果要好。機器學習
貝葉斯優化其實就是基於模型的超參數優化,根據已有的採樣點預估函數,不斷迭代得到最大值的一個算法。函數