# -*- coding: utf-8 -*-
\"\"\"算法调参.ipynb

Automatically generated by Colaboratory.

Original file is located at
    https://colab.research.google.com/drive/1kILamn8ac8vii9GUkiWowl8TIFwl2MCv

### 超参数优化

这是机器学习模型解决问题的最后一个步骤,并不是整个解决方案的最后一步。不会调参就不能说会机器学习。参数分为了两种:

- 影响模型在训练集上的准确度,防止模型过拟合的参数
- 与准确度和过拟合无关的参数

其中调参调的是第一类参数。

这里介绍两类算法:

- 网格搜索
- 随机搜索


#### 网格搜索

通过遍历已定义的参数列表,来评估算法的参数,从而找到最优参数。使用方法是`GridSearchCV`,实现对参数的跟踪,调整和评估,最终找到最优参数。**网格搜索适用于三四个超参数或者更少的情况,否则计算量会非常大,此时要转成随机搜索。**
\"\"\"

# 网格搜索代码

from pandas import read_csv
from sklearn.linear_model import Ridge
from sklearn.model_selection import GridSearchCV

# 导入数据
filename = \'http://ftp.ics.uci.edu/pub/machine-learning-data s/pima-indians-diabetes/pima-indians-diabetes.data\'
names = [\'preg\',\'plas\',\'pres\',\'skin\',\'test\',\'mass\',\'pedi\',\'age\',\'class\']
data = read_csv(filename, names=names)


# 数据划分
array = data.values
X = array[:, 0:8]
y = array[:, 8]

model = Ridge()

# 设置要遍历的参数

param_grid = {\'alpha\': [1, 0,.1, 0.01, 0.001, 0]}

# 网格搜索
grid = GridSearchCV(estimator=model, param_grid=param_grid)
grid.fit(X,y)

print(\'最高得分:%.3f\' % grid.best_score_)
print(\'最优参数:%s\' % grid.best_estimator_.alpha)

\"\"\"其中,`param_grid`是 一个字典对象,算法需要的参数名是`key`,需要遍历的参数值列表为`value`。可以设定多个`key-value`对,同时查询多个最优参数值。

### 随机搜索优化

这个需要牵涉到随机的方法,即采样的方法。
\"\"\"

from pandas import read_csv
from sklearn.linear_model import Ridge
from sklearn.model_selection import RandomizedSearchCV
from scipy.stats import uniform

# 导入数据
filename = \'http://ftp.ics.uci.edu/pub/machine-learning-data s/pima-indians-diabetes/pima-indians-diabetes.data\'
names = [\'preg\',\'plas\',\'pres\',\'skin\',\'test\',\'mass\',\'pedi\',\'age\',\'class\']
data = read_csv(filename, names=names)


# 数据划分
array = data.values
X = array[:, 0:8]
y = array[:, 8]

model = Ridge()

# 设置要遍历的参数

param_grid = {\'alpha\': uniform()}

# 网格搜索
grid = RandomizedSearchCV(estimator=model, param_distributions=param_grid, n_iter=100, random_state=7)
grid.fit(X,y)

print(\'最高得分:%.3f\' % grid.best_score_)
print(\'最优参数:%s\' % grid.best_estimator_.alpha)

END.

参考:

《机器学习Python实践》

收藏 打印