作者:Sivasai Yadav Mudugandla导读
【每个算法人员都应该知道的4个超参数调试方法】编译:ronghuaiyang
ML工作流中最困难的部分之一是为模型找到最好的超参数 。ML模型的性能与超参数直接相关 。
![每个算法人员都应该知道的4个超参数调试方法](http://img.jiangsulong.com/220422/02264V521-0.jpg)
文章插图
介绍
维基百科上说 , “Hyperparameter optimization或tuning是为学习算法选择一组最优的hyperparameters的问题” 。ML工作流中最困难的部分之一是为模型找到最好的超参数 。ML模型的性能与超参数直接相关 。超参数调优的越好 , 得到的模型就越好 。调优超参数可能是非常乏味和困难的 , 更像是一门艺术而不是科学 。
超参数超参数是在建立模型时用于控制算法行为的参数 。这些参数不能从常规训练过程中获得 。在对模型进行训练之前 , 需要对它们进行赋值 。
![每个算法人员都应该知道的4个超参数调试方法](http://img.jiangsulong.com/220422/02264T304-1.jpg)
文章插图
超参数的简单列表
内容
- 传统的手工调参
- 网格搜索
- 随机搜索
- 贝叶斯搜索
我们看看代码:
#importing required librariesfrom sklearn.neighbors import KNeighborsClassifierfrom sklearn.model_selection import train_test_splitfrom sklearn.model_selection import KFold , cross_val_scorefrom sklearn.datasets import load_winewine = 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]}]")
缺点:- 没办法确保得到最佳的参数组合 。
- 这是一个不断试错的过程 , 所以 , 非常的耗时 。
![每个算法人员都应该知道的4个超参数调试方法](http://img.jiangsulong.com/220422/02264T609-2.jpg)
文章插图
让我们来了解一下sklearn的GridSearchCV是如何工作的:
from sklearn.model_selection import GridSearchCVknn = 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 combinationgrid.best_score_#all combinations of hyperparametersgrid.cv_results_['params']#average scores of cross-validationgrid.cv_results_['mean_test_score']
缺点:由于它尝试了超参数的每一个组合 , 并根据交叉验证得分选择了最佳组合 , 这使得GridsearchCV非常慢 。
推荐阅读
- 女人一生中,最孤独的7个时刻
- 面相:6种女人与多金男绝缘
- 抓住男人要抓住胃?你OUT了
- 基于聚类的指代消解算法
- 程序算法设计,华为面试题中的算法考了这些内容
- 2020年文档相似性算法:初学者教程
- 使用sklearn中的贝叶斯算法建立药品分类任务
- 怎样淡化手术疤痕?
- Docker 安装 Nginx
- 机器学习算法的类型