# 机器学习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
```

“干货学习， 三连

• ## django的form常用字段和参数-Old-K

http://www.cnblogs.com/wupeiqi/articles/6144178.htmlDjango的内置字段如下：Fieldrequired=True#请求不能为空widget=None#HTML插件label=None#用于生成lable标签或显示内容initial=None#初始值help_text=''#帮助信息（在标签旁边显示）error_messages=None#（错...

• ## 15个最常用的GCC编译器参数

原文: 15 Most Frequently Used GCC Compiler Command Line Options 以及评论中大家提供的一些参数。 GCC编译器是一个日常流行的 C 编译器，...

• ## 面试常问的，JVM常用参数以及命令，瞧，你又不会了！

点击上方“ 搜云库技术团队 ”关注，选择“ 设为...

• ## 机器学习大牛最常用的5个回归损失函数，你知道几个？

大数据文摘出品 编译：Apricock、睡不着的iris、JonyKai、钱天培 “损失函数”是机器学习优化中...

• ## [译] 机器学习中常用的几个概率不等式及证明

点击上方“ 大数据与人工智能 ”，“星标或置顶公众号” 第一时间获取好内容