自动调参库hyperopt+lightgbm 调参demo
在此之前,调参要么网格调参,要么随机调参,要么肉眼调参。虽然调参到一定程度,进步有限,但仍然很耗精力。
自动调参库hyperopt可用tpe算法自动调参,实测强于随机调参。
hyperopt 需要自己写个输入参数,返回模型分数的函数(只能求最小化,如果分数是求最大化的,加个负号),设置参数空间。
本来最优参数fmin函数会自己输出的,但是出了意外,参数会强制转化整数,没办法只好自己动手了。
demo如下:
import lightgbm as lgb
from sklearn.metrics import roc_auc_score as auc
def get_set(n1,data='trained.csv',n_splits=10,y=False,random_state=0):
from sklearn.model_selection import KFold
data=pd.read_csv(data)
kf = KFold(n_splits=n_splits,shuffle=True,random_state=random_state)
if y:
train,test=pd.DataFrame(),pd.DataFrame()
clas=list(data[y].unique())
for cla in clas:
i=0
dd=data[data[y]==cla]
for train_index,test_index in kf.split(dd):
i=i+1
if n1==i:
train=train.append(data.loc[list(train_index)])
test=test.append(data.loc[list(test_index)])
else:
i=0
for train_index,test_index in kf.split(data):
i=i+1
if n1==i:
train=data.iloc[list(train_index),:]
test=data.iloc[list(test_index),:]
return train,test
def scorer(yp,data):
yt= data.get_label()
score=auc(yt,yp)
return 'auc',score,True
def peropt(param):
conf=['num_leaves','max_depth','min_child_samples','max_bin']
for i in conf:
param[i]=int(param[i])
evals_result={}
lgb.train(param,
dtrain,
2000,
feval=scorer,
valid_sets=[dval],
verbose_eval=None,
evals_result=evals_result,
early_stopping_rounds=10)
best_score=evals_result['valid_0']['auc'][-11]
#print(param,best_score,len(evals_result['valid_0']['auc'])-10)
result.append((param,best_score,len(evals_result['valid_0']['auc'])-10))
return -best_score
if 0:#数据集
i=1
x_train,x_test=get_set(i,n_splits=5)
x_train.pop('CaseId')
x_test.pop('CaseId')
y_train=x_train.pop('Evaluation')
y_test=x_test.pop('Evaluation')
dtrain=lgb.Dataset(x_train,y_train)
dval=lgb.Dataset(x_test,y_test)
if 1:#调参
from hyperopt import fmin,tpe,hp#,rand#,pyll#,partial
space={ 'num_leaves': hp.quniform('num_leaves',50,70,1)
,'max_depth':hp.quniform('max_depth',7,15,1)
,'min_child_samples':hp.quniform('min_child_samples',5,20,1)
,'max_bin':hp.quniform('max_bin',100,150,5)
,'learning_rate':hp.choice('learning_rate',[0.01])
,'subsample':hp.uniform('subsample',0.9,1)
,'colsample_bytree':hp.uniform('colsample_bytree',0.95,1)
,'min_split_gain':hp.loguniform('min_split_gain',-5,2)
,'reg_alpha':hp.loguniform('reg_alpha',-5,2)
,'reg_lambda':hp.loguniform('reg_lambda',-5,2)
}
result=[]
#print(pyll.stochastic.sample(space))#抽样
#algo=partial(tpe.suggest,n_startup_jobs=10)#作用未知
fmin(peropt,
space=space,
algo=tpe.suggest,
max_evals=100
)
sort=sorted(result,key=lambda x:x[1],reverse=True)
自动调参库hyperopt+lightgbm 调参demo的更多相关文章
- LightGBM调参笔记
本文链接:https://blog.csdn.net/u012735708/article/details/837497031. 概述在竞赛题中,我们知道XGBoost算法非常热门,是很多的比赛的大杀 ...
- 【集成学习】lightgbm调参案例
lightgbm使用leaf_wise tree生长策略,leaf_wise_tree的优点是收敛速度快,缺点是容易过拟合. # lightgbm关键参数 # lightgbm调参方法cv 代码git ...
- GBDT、XGBOOST、LightGBM调参数
总的认识: LightGBM > XGBOOST > GBDT 都是调参数比较麻烦. GBDT分类的最佳调参数的讲解: Gradient Boosting Machine(GBM)调参 ...
- 用C语音编写python的扩展模块,也就是python调c库
用C语音编写python的扩展模块,也就是python调c库 1.用C语言扩展Python的功能: http://www.ibm.com/developerworks/cn/linux/l-pyt ...
- LAMP 系统性能调优之网络文件系统调优
LAMP 系统性能调优之网络文件系统调优 2011-03-21 09:35 Sean A. Walberg 网络转载 字号:T | T 使用LAMP系统的用户,都想把自己LAMP性能提高运行的速度提高 ...
- OCM_第十四天课程:Section6 —》数据库性能调优_各类索引 /调优工具使用/SQL 优化建议
注:本文为原著(其内容来自 腾科教育培训课堂).阅读本文注意事项如下: 1:所有文章的转载请标注本文出处. 2:本文非本人不得用于商业用途.违者将承当相应法律责任. 3:该系列文章目录列表: 一:&l ...
- Java JDBC调用存储过程:无参、输入带参、输出及输出带参
Java JDBC调用存储过程:无参.输入带参.输出及输出带参 示例代码: package xzg; import java.sql.CallableStatement; import java.sq ...
- 自动检测GD库支持的图像类型
以下代码通过自动检测GD库支持的图像类型 来写出移直性更好的PHP代码 <?php if(function_exists("imagegif")){ header(" ...
- xgboost&lightgbm调参指南
本文重点阐述了xgboost和lightgbm的主要参数和调参技巧,其理论部分可见集成学习,以下内容主要来自xgboost和LightGBM的官方文档. xgboost Xgboost参数主要分为三大 ...
随机推荐
- java.io.IOException: Attempted read from closed stream
前言: 代码如下,执行的时候提示"java.io.IOException: Attempted read from closed stream." public static JS ...
- vue 组件之间相互传值 父传子 子传父
1.父传子 把要传入的值放到父标签里 子组件使用props接收 父写法 子写法 2.子传父 子组件: childrenOnclick() { // 发布自定义事件 this.$emit(" ...
- linux下dpkg繁忙,解决方法
安装软件,提示: E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用)E: 无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占用它? 只要 ...
- 'telnet' 不是内部或外部命令,也不是可运行的程序
1.打开控制面板 2. 3. 4.这样就好可,重新打开cmd命令.
- 添加“Git Bash Here”到右键菜单
1.按键盘上的组合键[Win+R]把运行调出来 2.在运行中输入[regedit]再点击确定. 3.定位到HKEY_CLASSES_ROOT\Directory\Background\shell(如果 ...
- 虚函数 error LNK2001: 无法解析的外部符号 "public: virtual void __cdecl
在虚函数后面加一对大括号 #ifndef CAFFE_CONV_DW_LAYER_HPP_ #define CAFFE_CONV_DW_LAYER_HPP_ #include <vector&g ...
- Confluence 6 从 WIKI 标记整合到基于 XHTML 的存储格式
如果你现在正在将 Confluence 从一个老的版本升级到 Confluence 4.0 或者更新的版本 (例如从 Confluence 3.5.x 或者更老的版本),在升级的过程中一个内容整合过程 ...
- hadoop知识点总结
(一).hadoop的内置数据类型都实现了writablecompareable,以便序列化和网络传输及文件存储 a自定义数据类型作为输入 1.实现writable接口 2.如果给数据需要比较大小时, ...
- c# 多线程简化
编译器自动推断出ParameterizedThreadStart委托,因为Go方法接收一个单独的object参数,就像这样写: 1 2 Thread t = new Thread (new Param ...
- 使用Visual Studio Installer 2015打包WPF程序
前言 做过WPF项目,就少不了要将程序打包部署到客户现场,因为一般长时间不会更新打包程序,每次变动较大需要重新配置打包程序时,就会有些生疏,不那么得心应手.为了方便记忆,记录到博客中. 准备 因为做过 ...