lightbgm参数_参数调优LightGBM-商品分类-代码

本文介绍了如何利用LightGBM的内嵌交叉验证来寻找最佳的弱分类器数目n_estimators。通过Otto商品分类数据集,展示了如何进行参数调优,并使用GridSearchCV在max_depth和min_child_weight上进行进一步优化。实验结果显示,调整后的模型性能有所提升。
摘要由CSDN通过智能技术生成

1.直接调用LightGBM内嵌的cv寻找最佳的参数n_estimators(弱分类器数目)

Otto商品分类数据

导入必要模型import lightgbm as lgbm

import pandas as pd

import numpy as np

from sklearn.model_selection import GridSearchCV

from sklearn.model_selection import StratifiedKFold

from sklearn.metrics import log_loss

from matplotlib import pyplot

import seaborn as sns

%matplotlib inline#读取数据

dpath = './logistic/'

train = pd.read_csv(dpath + "Otto_train_test.csv")

train.head()

355a6ec067f8056ad4ba33b5cb723b66.png

2b4be12b6019551365b385774fa23339.png

Variable Identification

选择该数据集是因为该数据特征单一,我们可以在特征工程方面少做些工作,集中精力放在参数调优上;

Target分布,看看各类样本分布是否均衡sns.countplot(train.target)

pyplot.xlabel('target')

pyplot.ylabel('Number of occurrences')

fe1a7533f9699c4cda3fd49bf65a0fdc.png

每类样本分布不是很均匀

特征编码# 将类别字符串变成数字

y_train = train['target'] #形式为Class_x

y_train = y_train.map(lambda s: s[6:])

y_train = y_train.map(lambda s: int(s) - 1)#将类别的形式由Class_x变为0-8之间的整数

train = train.drop(["id" , "target"] , axis = 1)

X_train = np.array(train)

默认参数,此时学习率为0.1,比较大,观察弱分类数目的大致范围(采用默认参数配置,看看模型是过拟合还是欠拟合)#直接调用lightgbm内嵌的交叉验证(cv),可对连续的n_estimators参数进行快速交叉验证

#而GridSearchCV只能对有限个参数进行交叉验证,且速度相对较慢

import json

def modelfit(params , alg , X_train , y_train , early_stopping_rounds=10):

lgbm_params = params.copy()

lgbm_params['num_class'] = 9

lgbm_params.pop('silent');

lgbmtrain = lgbm.Dataset(X_train , y_train , silent=True)

#num_boost_round为弱分类器数目,下面的代码参数里因为已经设置了early_stopping_rounds

#即性能未提升的次数超过过早停止设置的数值,则停止训练

cv_result = lgbm.cv(lgbm_params , lgbmtrain , num_boost_round=10000 , nfold=5 , stratified=True , shuffle=True , metrics='multi_logloss' , early_stopping_rounds=early_stopping_rounds , show_stdv=True , seed=0 )

print('best n_estimators:' , len(cv_result['multi_logloss-mean']))

print('best cv score:' , cv_result['multi_logloss-mean'][-1])

#cv_result.to_csv('lgbm1_nestimators.csv' , index_label='n_estimators')

json.dump(cv_result , open('lgbm_1.json' , 'w'))

#采用交叉验证得到的最佳参数n_estimators,训练模型

alg.set_params(n_estimators=len(cv_result['multi_logloss-mean']))

alg.fit(X_train , y_train)

#Predict training set:

train_predprob = alg.predict_proba(X_train)

logloss = log_loss(y_train , train_predprob)

#Print model report:

print("logloss of train :")

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
LightGBM OPTUNA是一个使用Optuna框架进行LightGBM模型的超参数优化的方法。Optuna是一个开源的超参数优化框架,使用贝叶斯方法来执行超参数的搜索空间。LightGBM是一个高效的梯度提升决策树模型,通过结合LightGBM和Optuna,我们可以自动找到最佳的超参数组合来训练LightGBM模型。具体来说,我们可以定义一个优化函数,该函数将使用Optuna的create_study方法创建一个Study对象,并指定优化方向和研究名称。然后,我们可以定义一个lambda函数,该函数将使用train_model_category方法来训练LightGBM模型,并在每次迭代时记录评估指标。最后,我们可以使用Study对象的optimize方法来执行超参数优化,设置n_trials参数来指定优化的迭代次数。通过这种方式,我们可以使用Optuna快速找到一个较好甚至最优的LightGBM模型超参数组合。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [使用OPTUNA对LightBGM自动调试参数,并进行绘图可视化](https://blog.csdn.net/Geeksongs/article/details/121449130)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [Python实现基于Optuna超参数自动优化的LightGBM回归模型(LGBMRegressor算法)项目实战](https://blog.csdn.net/weixin_42163563/article/details/128068357)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值