# 机器学习4个常用超参数调试方法！

↑↑↑关注后" 星标 "Datawhale

Datawhale干货

ML工作流中最困难的部分之一是为模型找到最好的超参数。 ML模型的性能与超参数直接相关

## 介绍

ML工作流中最困难的部分之一是为模型找到最好的超参数。ML模型的性能与超参数直接相关。超参数调优的越好，得到的模型就越好。调优超参数可能是非常乏味和困难的，更像是一门艺术而不是科学。

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

X = wine.data
y = wine.target

#splitting the data into train and test set
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.3,random_state = 14)

#declaring parameters grid
k_value = list(range(2,11))
algorithm = ['auto','ball_tree','kd_tree','brute']
scores = []
best_comb = []
kfold = KFold(n_splits=5)

#hyperparameter tunning
for 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. 网格搜索

```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 combination
grid.best_params_

#Score achieved with best parameter combination
grid.best_score_

#all combinations of hyperparameters
grid.cv_results_['params']

#average scores of cross-validation
grid.cv_results_['mean_test_score']
```

## 3. 随机搜索

```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 combination
rand_ser.best_params_

#score achieved with best parameter combination
rand_ser.best_score_

#all combinations of hyperparameters
rand_ser.cv_results_['params']

#average scores of cross-validation
rand_ser.cv_results_['mean_test_score']
```

## 4. 贝叶斯搜索

1. 使用先前评估的点 X 1*:n*，计算损失 f 的后验期望。

2. 在新的点 X 的抽样损失 f ，从而最大化 f 的期望的某些方法。该方法指定 f 域的哪些区域最适于抽样。

```Installation: pip install scikit-optimize
```
```from skopt import BayesSearchCV

import warnings
warnings.filterwarnings("ignore")

# parameter ranges are specified by one of below
from skopt.space import Real, Categorical, Integer

knn = KNeighborsClassifier()
#defining hyper-parameter grid
grid_param = { 'n_neighbors' : list(range(2,11)) ,
'algorithm' : ['auto','ball_tree','kd_tree','brute'] }

#initializing Bayesian Search
Bayes = BayesSearchCV(knn , grid_param , n_iter=30 , random_state=14)
Bayes.fit(X_train,y_train)

#best parameter combination
Bayes.best_params_

#score achieved with best parameter combination
Bayes.best_score_

#all combinations of hyperparameters
Bayes.cv_results_['params']

#average scores of cross-validation
Bayes.cv_results_['mean_test_score']
```

```Installation: pip install bayesian-optimization
```

“干货学习， 三连

• ## 从4个方面优化你的Vue项目

首发于GitHib：github.com/SimonZhangI… 运行时优化 1、使用v-if代替v-show 两者的区别是：v-if不渲染DOM，v-show会预渲染DOM 除以下情况使用v-show，其他情况尽量使用v-if 有预渲染需求 需要频

• ## 4个故事告诉你：Iaas/Paas/Saas的区别

本文以做饭吃饭这件事情为例，浅显易懂地讲述了Iaas、Paas与Saas的区别。 最近云计算“Saas”概念很火，老板找到你。 老板：小汪啊，最近人家说互联网进了下半场，要做产业互联网，做saas服务，我们这也算saas服务了吧，也算是站上了行业风口吧？ 你擦

• ## vue 中4个级别的作用域

除了 JS 已有的功能外，Vue还具有自己独特的作用域级别。作用域控制可以使用哪些变量以及在何处使用。它控制它们对应用程序的不同部分的“可见性”。 了解 Vue 提供的作用域级别之间的差异会帮助我们编写更清晰的代码。 ...

• ## 100匹马，4个赛道，找出跑最快的4匹马。

100匹马，4个赛道，找出跑最快的4匹马。腾讯 高级前端工程师创作声明：内容包含虚构创作 内容中的情节存在虚构加工，仅供参考

第09课：精进的4个习惯

• ## 第21课：4个层级和6大差异

第21课：4个层级和6大差异

• ## 杰出关卡设计师的4个习惯（译）

杰出关卡设计师的4个习惯（译）高鸣 蜡烛人挚友数字时代的民间手艺人有时我会遇到一...

• ## 4个关于新媒体写作的建议

自媒体人写公众号，一方面是为了输出自己的想法，另一方面也是想以这种形式得到别人的认可。如何才能自己表达的痛快，又让粉丝喜欢呢？作者总结了4个自己在公...

• ## 2020年数据科学领域4个最热门的趋势

2020年数据科学领域4个最热门的趋势 2019-12-252019-12-25 18:11:44阅读 1970数据科学正在不断发展，并渗透到每个行业。随着全球各组织开始数字化转型，2019年出现了更多公司利用数据做出更好决策的趋...

• ## 我国央行数字货币发行的4个法律问题

首页 > 文章详情 我国央行数字货币发行的4个法律问题 罗滔  2天前 我国DCEP（央行数字货币）进程从2014年开始启动，从2019年下半...