一、前言

在机器学习中,模型的训练需要花费大量的时间。而每一个算法在训练前都需要配置数量不一的超参数,参数对训练结果的影响相当大。
因此,超参数的优化是一件相当重要,却又费时费力的事。
Hyperopt提供了一个优化接口,这个接口接收一个评估函数和参数空间,能计算出空间内的一个点的损失函数值,简化了调参过程。

二、实战

通过使用感知机判别鸢尾花数据的例子,熟悉一下hyper库的用法。

1、数据读取及标准化

from sklearn import datasets
import numpy as np
from sklearn.cross_validation import train_test_split
from sklearn.metrics import accuracy_score
iris = datasets.load_iris()
X = iris.data
y = iris.target
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=0)from sklearn.preprocessing import StandardScaler
sc = StandardScaler()
sc.fit(X_train)
X_train_std = sc.transform(X_train)
X_test_std = sc.transform(X_test)

上述代码将数据集划分为训练集和测试集,并进行预处理。

2、正常的感知机

from sklearn.linear_model import Perceptron
ppn = Perceptron(n_iter=40, eta0=0.1, random_state=0)
ppn.fit(X_train_std, y_train)y_pred = ppn.predict(X_test_std)
print accuracy_score(y_test, y_pred)

这里设置感知机参数n_iter为40,eta0为0.1,进行模型拟合,最后得到预测的正确率为:0.822222222222。
可以看到现在的正确率并不如人意,正常情况下,我们需要手动更改参数,继续进行模型训练。

3、利用hyperopt的感知机

首先定义评估函数,即是在2中使用过的感知机模型,由于fmin函数求的是最小值,故取负的auc值。

def percept(args):global X_train_std, y_train, y_testppn = Perceptron(n_iter=int(args["n_iter"]), eta0=args["eta"])ppn.fit(X_train_std, y_train)y_pred = ppn.predict(X_test_std)return -accuracy_score(y_test, y_pred)

接下来定义了参数空间,hp优化算法能识别的表达式如下:

  • hp.choice(label, options)

    返回其中一个选项,它应该是一个列表或元组。options元素本身可以是[嵌套]随机表达式。在这种情况下,仅出现在某些选项中的随机选择(stochastic choices)将成为条件参数。

  • hp.randint(label, upper)

    返回范围:[0,upper]中的随机整数。这种分布的语义是意味着邻整数值之间的损失函数没有更多的相关性,与更远的整数值相比较。例如,这是描述随机种子的适当分布。如果损失函数可能更多的与相邻整数值相关联,那么你或许应该用“量化”连续分布的一个,比如 quniform , qloguniform , qnormal 或 qlognormal 。

  • hp.uniform(label, low, high)

    返回位于[low,hight]之间的均匀分布的值。
    在优化时,这个变量被限制为一个双边区间。

  • hp.quniform(label, low, high, q)

    返回一个值,如 round(uniform(low,high)/ q)* q
    适用于目标仍然有点“光滑”的离散值,但是在它上下存在边界(双边区间)。

  • hp.loguniform(label, low, high)

    返回根据 exp(uniform(low,high)) 绘制的值,以便返回值的对数是均匀分布的。
    优化时,该变量被限制在[exp(low),exp(high)]区间内。

  • hp.qloguniform(label, low, high, q)

    返回类似 round(exp(uniform(low,high))/ q)* q 的值
    适用于一个离散变量,其目标是“平滑”,并随着值的大小变得更平滑,但是在它上下存在边界(双边区间)。

  • hp.normal(label, mu, sigma)

    返回正态分布的实数值,其平均值为 mu ,标准偏差为 σ。优化时,这是一个无约束(unconstrained)的变量。

  • hp.qnormal(label, mu, sigma, q)

    返回像 round(正常(mu,sigma)/ q)* q 的值
    适用于离散值,可能需要在 mu 附近的取值,但从基本上上是无约束(unbounded)的。

  • hp.lognormal(label, mu, sigma)(对数正态分布)

    返回根据 exp(normal(mu,sigma)) 绘制的值,以便返回值的对数正态分布。优化时,这个变量被限制为正值。

  • hp.qlognormal(label, mu, sigma, q)

    返回类似 round(exp(normal(mu,sigma))/ q)* q 的值,
    适用于一个离散变量,其目标是“平滑”,并随着值的大小变得更平滑,变量的大小是从一个边界开始的(单边区间)。

    from hyperopt import fmin, tpe, hpspace = {"n_iter": hp.randint("n_iter", 50), "eta": hp.uniform("eta", 0.05, 0.5)}
    

    最后是模型的参数选取

    best = fmin(percept, space, algo=tpe.suggest, max_evals=100)
    print best
    print percept(best)
    

    algo是用户参数选择的搜索算法,目前hyperopt支持的搜索算法有随机搜索(对应是hyperopt.rand.suggest),模拟退火(对应是hyperopt.anneal.suggest),TPE算法。
    max_evals是模型评价次数。
    通过上述代码,最后得到的感知机模型参数为:{‘n_iter’: 29, ‘eta’: 0.10959845686587069},
    正确率:-0.977777777778
    相比不使用hyperopt选取的参数,提高了许多,同时也降低了调参的难度。

模型调参利器--hyperopt相关推荐

  1. python网格搜索核函数_机器学习笔记——模型调参利器 GridSearchCV(网格搜索)参数的说明...

    算法 数据结构 机器学习笔记--模型调参利器 GridSearchCV(网格搜索)参数的说明 GridSearchCV,它存在的意义就是自动调参,只要把参数输进去,就能给出最优化的结果和参数.但是这个 ...

  2. 随机森林调参_机器学习-模型调参利器 gridSearchCV(网格搜索)

    在机器学习模型中,需要人工选择的参数称为超参数.比如随机森林中决策树的个数,人工神经网络模型中隐藏层层数和每层的节点个数,正则项中常数大小等等,他们都需要事先指定.超参数选择不恰当,就会出现欠拟合或者 ...

  3. 机器学习(四)——模型调参利器 gridSearchCV(网格搜索) scoring的

    如果是None,则使用estimator的误差估计函数 (3)       scoring=None 模型评价标准,默认None,这时需要使用score函数:或者如scoring='roc_auc', ...

  4. 有没有什么高效「炼丹」神器可以推荐?复旦fastNLP团队祭出内部调参利器fitlog...

    机器之心报道 参与:Racoon X.张倩 集 Tabular 显示实验结果.自定义备忘.前端操作删除/隐藏记录.自动 git commit 等诸多功能于一体,这个调参神器助你高效「炼出金丹」. 「有 ...

  5. ML之XGBoost:利用XGBoost算法对波士顿数据集回归预测(模型调参【2种方法,ShuffleSplit+GridSearchCV、TimeSeriesSplitGSCV】、模型评估)

    ML之XGBoost:利用XGBoost算法对波士顿数据集回归预测(模型调参[2种方法,ShuffleSplit+GridSearchCV.TimeSeriesSplitGSCV].模型评估) 目录 ...

  6. DL之模型调参:深度学习算法模型优化参数之对LSTM算法进行超参数调优

    DL之模型调参:深度学习算法模型优化参数之对LSTM算法进行超参数调优 目录 基于keras对LSTM算法进行超参数调优 1.可视化LSTM模型的loss和acc曲线

  7. DL之模型调参:深度学习算法模型优化参数之对深度学习模型的超参数采用网格搜索进行模型调优(建议收藏)

    DL之模型调参:深度学习算法模型优化参数之对深度学习模型的超参数采用网格搜索进行模型调优(建议收藏) 目录 神经网络的参数调优 1.神经网络的通病-各种参数随机性 2.评估模型学习能力

  8. 炼丹神器!模型调参这门“玄学”,终于被破解了

    吃一个苹果要几步?这对普通人来说,是一件很简单的事. 那么AI模型调参需要几步呢?调参是机器学习中至关重要的一环,因其复杂性而被称之为一门"玄学".这对开发小白和AI专业算法工程师 ...

  9. AIRec个性化推荐召回模型调参实战

    简介:本文是<AIRec个性化推荐召回模型调参实战(电商.内容社区为例)>的视频分享精华总结,主要由阿里巴巴的产品专家栀露向大家分享AIRec个性化推荐召回模型以及针对这些召回模型在电商和 ...

最新文章

  1. 合川专升本计算机怎么学升学率,2019年重庆市合川太和中学高考喜报
  2. oculus rift 开发入门
  3. 【视频课】深度学习必备基础,如何使用好数据?
  4. JS数据类型及函数的预编译
  5. Java随机数控制范围
  6. WPF实现背景透明磨砂,并通过HandyControl组件实现弹出等待框
  7. golang语言学第四课:循环
  8. CondenserDotNet - 使用 Kestrel 和 Consul 的 API 反向代理库!
  9. P3396 哈希冲突 根号分治
  10. HDU 4857 逃生(拓扑排序)
  11. origin三元相图_扩增子图表解读7三元图:三组差异数量和关系
  12. selenium学习过程中遇到的问题
  13. 如何在Scala中使用条件表达式 .
  14. 第1章 网站与网站的建设过程
  15. 怎样在接口地址中添加请求头参数_jmeter5.3做soap接口性能测试配置
  16. Spring 的事务传播机制
  17. python docx创建表格
  18. 解决VMware安装ubuntu16.04后无法全屏的问题
  19. 《神经网络与深度学习》基础篇
  20. 数学基础知识02——旋转轴、旋转角度和旋转矩阵

热门文章

  1. 惠普刀片服务器硬件安装配置手册
  2. 用python读取股票价格_我用Python分析股票价格走势,学以致用获取第一桶金!
  3. Unity3D类人动画humanoid animations
  4. 36个月流畅如新 载展锐唐古拉T770的5G手机获泰尔实验室权威认证
  5. SQL触发器实例讲解(转)
  6. 非专业c语言,非专业程序员如何学好C语言
  7. 使用UTM安装windows7
  8. 7时过2小时是几时_7时过2小时是几时_飞机2小时和高铁7小时你愿意坐哪个?
  9. Qt+VTK+OCCT读取IGES/STEP模型
  10. Java核心技术学习之基本数据类型