Hyperopt调参神器学习

现在又出了一个调参神器了:Hyperopt,还有Sklearn-Hyperoprt,现在做了一个Demo,仅供大家参考,但是有两点需要注意,我看网上没人说明,个人测试下来说明一下:请大家小心:

1、以下测试代码,需要Python2.7跑,Python3.5会报错,已经找到报错的原因了:TypeError: 'generator' object is not subscriptable;报这个错之后,你需要做下面两步操作

1.1、pip uninstall networkx #卸载

1.2、pip install networkx==1.11 #换版本

1.3、如果上述方法解决不了问题,那么安装一个python2.7的虚拟环境,避免与本地环境产生冲突(virtualenv安装包),具体可以参考网上的安装方案,很简便;

2、大多数智能优化算法、网格搜索算法,都是在局部最优解收敛的,结果不太稳定。在一定精确度的基础上,有的收敛快一点,有的收敛慢一点;有的局部找的好一点,有的差一点;所以,参数搜索也是需要多次试验,或者说在结果的基础上进行迭代验证,相当吃资源。并且,也需要一定实践经验在里面的,如果没有经验因素,可以增加搜索范围,随意而来的也就是计算代价增加了,希望大家有所体会。

3、下面是个感知机的试验,其他算法也可以切换,只是算法的参数、范围需要进行相应调整,我已经注明了,我目前在尝试在lightgbm上试验,如果有好的想法和结果,会和大家分享的。

##Python2.7## 看print没打括号的语法糖,大家应该也能明白吧。

# -*- coding: utf-8 -*-
"""
Created on Tue May 22 10:30:02 2018

@author: authour_sx
"""
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)

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)

def percept(args):
    global X_train_std,y_train,y_test
    ppn = Perceptron(n_iter=int(args["n_iter"]),eta0=args["eta"]*0.05,random_state=0)#参数搜索
    ppn.fit(X_train_std, y_train)
    y_pred = ppn.predict(X_test_std)
    return -accuracy_score(y_test, y_pred)

from hyperopt import fmin,tpe,hp,partial
space = {"n_iter":hp.choice("n_iter",range(30,50)), #确定参数搜索范围
         "eta":hp.uniform("eta",0.05,0.5)}
algo = partial(tpe.suggest,n_startup_jobs=10)
best = fmin(percept,space,algo = algo,max_evals=100)
print best
print abs(percept(best))  #输出绝对值,不然是个负数

 

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值