在此之前,调参要么网格调参,要么随机调参,要么肉眼调参。虽然调参到一定程度,进步有限,但仍然很耗精力。
自动调参库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的更多相关文章

  1. LightGBM调参笔记

    本文链接:https://blog.csdn.net/u012735708/article/details/837497031. 概述在竞赛题中,我们知道XGBoost算法非常热门,是很多的比赛的大杀 ...

  2. 【集成学习】lightgbm调参案例

    lightgbm使用leaf_wise tree生长策略,leaf_wise_tree的优点是收敛速度快,缺点是容易过拟合. # lightgbm关键参数 # lightgbm调参方法cv 代码git ...

  3. GBDT、XGBOOST、LightGBM调参数

    总的认识: LightGBM  > XGBOOST  > GBDT 都是调参数比较麻烦. GBDT分类的最佳调参数的讲解: Gradient Boosting Machine(GBM)调参 ...

  4. 用C语音编写python的扩展模块,也就是python调c库

    用C语音编写python的扩展模块,也就是python调c库   1.用C语言扩展Python的功能: http://www.ibm.com/developerworks/cn/linux/l-pyt ...

  5. LAMP 系统性能调优之网络文件系统调优

    LAMP 系统性能调优之网络文件系统调优 2011-03-21 09:35 Sean A. Walberg 网络转载 字号:T | T 使用LAMP系统的用户,都想把自己LAMP性能提高运行的速度提高 ...

  6. OCM_第十四天课程:Section6 —》数据库性能调优_各类索引 /调优工具使用/SQL 优化建议

    注:本文为原著(其内容来自 腾科教育培训课堂).阅读本文注意事项如下: 1:所有文章的转载请标注本文出处. 2:本文非本人不得用于商业用途.违者将承当相应法律责任. 3:该系列文章目录列表: 一:&l ...

  7. Java JDBC调用存储过程:无参、输入带参、输出及输出带参

    Java JDBC调用存储过程:无参.输入带参.输出及输出带参 示例代码: package xzg; import java.sql.CallableStatement; import java.sq ...

  8. 自动检测GD库支持的图像类型

    以下代码通过自动检测GD库支持的图像类型 来写出移直性更好的PHP代码 <?php if(function_exists("imagegif")){ header(" ...

  9. xgboost&lightgbm调参指南

    本文重点阐述了xgboost和lightgbm的主要参数和调参技巧,其理论部分可见集成学习,以下内容主要来自xgboost和LightGBM的官方文档. xgboost Xgboost参数主要分为三大 ...

随机推荐

  1. Hello2 source analysis

    在example目录下的web\servlet\hello2\src\main\java\javaeetutorial\hello2路径里可以找到hello2的GreetingServlet.java ...

  2. Oracle错误——ORA-39000:转储文件说明错误、ORA-39001:参数值无效、ORA-39088:文件名不能包含路径说明

    错误 在使用数据泵导入文件时,报错如下 Next 出错原因 在使用参数DUMPFILE指定文件名称时,不能包含路径信息,只可以使用文件名称 Next 解决办法 在使用数据泵进行数据导入导出前,必须要创 ...

  3. C C++互相调用注意

    注意:直接调用会找不到函数定义 1. C 调用 C++封装好后的函数: 在C++中有一个函数 int main_cpp(): 首先构建头文件, #ifndef CPP_FILE_H   #define ...

  4. 题解 CF934A 【A Compatible Pair】 ——贪心

    题意: 给定两个数列 \(A\) . \(B\) ,元素个数分别为 \(n\) , \(m\) \((2 \le n,m \le 50)\) .数列中所有元素大小均在 \(-10^{9}\) 到 \( ...

  5. 用R语言做数据清理

    数据的清理 如同列夫托尔斯泰所说的那样:“幸福的家庭都是相似的,不幸的家庭各有各的不幸”,糟糕的恶心的数据各有各的糟糕之处,好的数据集都是相似的.一份好的,干净而整洁的数据至少包括以下几个要素: 1. ...

  6. idea Debug快捷键

    快捷键 介绍 F7 在 Debug 模式下,进入下一步,如果当前行断点是一个方法,则进入当前方法体内, 如果该方法体还有方法,则不会进入该内嵌的方法中 * F8 在 Debug 模式下,进入下一步,如 ...

  7. Hybrid App 开发模式

    开发移动App主要有三种模式:Native. Hybrid 和 Web App. 需要注意的一点是在选择开发模式的时候,要根据你的项目类型(图片类?视频类?新闻类?等),产品业务和人员技术储备等做权衡 ...

  8. React-native完整配置流程

    开头敲黑板!! 无论你是RN的新手还是老手,跟着流程走,RN项目搭建起来完全不是问题!   一.网址收集 expo配置网址:https://blog.expo.io/building-a-react- ...

  9. Python3环境搭建

    Python3环境搭建   Windows系统下安装Python3 Python3 下载 Python3 最新源码,二进制文档,新闻资讯等可以在 Python 的官网查看到: Python 官网:ht ...

  10. 纯css实现翻书效果

    前言 最近研究了一下css3的3D效果,写了几个demo,写篇博客总结一下实现的经过.PS:如果对transform-origin/perspective/transform-style这些概念还不了 ...