自动调参库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参数主要分为三大 ...
随机推荐
- 大数据开发认知--spark
1. Spark rdd生成过程· Spark的任务调度分为四步 1RDD objects RDD的准备阶段,组织RDD及RDD的依赖关系生成大概的RDD的DAG图,DAG图是有向环图. 2DAG s ...
- Angular4基本网络请求get、post方式
1.在路径C:\AngularProject\AngularTest\src\app\app.module.ts这个文件下面引入 2.在需要用到的js文件引入 3.GET/POST 带参/不带参请求
- 测试框架Unitest的运行原理,以及多个测试类中的执行顺序以及简化方法
单元测试单元测试(unit testing)是指对软件中的最小可测试单元进行检查和验证.对于单元测试中单元的含义,一般来说,要根据实际情况去判定其具体含义,如C语言中单元指一个函数,Java里单元指一 ...
- WinForm 设置窗体启动位置在活动屏幕右下角
WinForm 设置窗体启动位置在活动屏幕右下角 在多屏幕环境下, 默认使用鼠标所在的屏幕 1. 设置窗体的 StartPosition 为 FormStartPosition.Manual. 2. ...
- 使用telnet进行Dubbo接口测试
telnet进入dubbo 查看pid $ jps -l 26048 org.apache.catalina.startup.Bootstrap 12388 org.jetbrains.jps.cmd ...
- Java对象、引用、实例
https://blog.csdn.net/zmx729618/article/details/54093075
- 什么时候使用“RCC_APBXPeriph_AFIO”
什么时候需要开启复用时钟: (1)使用EXTI (2)重映射(用到外设的重映射功能时才需要使能AFIO的时钟) 举例:重映射USART2 USART2的TX/RX在PA.2/3.但是,PA.2已经被T ...
- vue--transition-group
1.为什么要使用<transition-group> <transition></transition>是vue封装的过渡组件 <transition nam ...
- DAY18 常用模块(二)
一.随机数:RANDOM 1.(0,1)小数:random.random() 2.[1,10]整数:random.randint(1,10) 3.[1,10)整数:random.randrang(1, ...
- GT sport赛道详解 - 富士国际赛车场
练了3-4个小时,最好的成绩只有2'09多,这5秒真的很难跨越,很是绝望,感觉碰到瓶颈了. 看了几个视频,发现大家的走线有些差异,但是切apx的极速都是一样的,所以在复合弯道,走线其实不止一种. 分析 ...