如今的机器学习和深度学习中,在模型结构肯定的状况下,不一样的超参数的选择对整个结果的好坏有着相当重要的影响。很多人还嬉称人工智能工程师,实际上是“调参侠”。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_)
虽然随机搜索获得的结果互相之间差别较大,可是实验证实随机搜索的确比网格搜索效果要好。机器学习
贝叶斯优化其实就是基于模型的超参数优化,根据已有的采样点预估函数,不断迭代得到最大值的一个算法。函数