首页 > 编程语言 >Python中LightGBM库详解

Python中LightGBM库详解

时间:2024-11-23 09:29:55浏览次数:3  
标签:LightGBM Python num lgb train test data 详解

文章目录

Python中LightGBM库详解

一、引言

LightGBM是由微软开发的一个梯度提升框架,它使用基于树的学习算法。相比于其他梯度提升库,如XGBoost,LightGBM在处理大型数据集时更加高效,并且支持并行与GPU加速。本文将详细介绍LightGBM的安装、基本用法以及一些高级功能。
在这里插入图片描述

二、LightGBM的安装与基本使用

1、安装LightGBM

在Python中安装LightGBM非常简单,可以通过pip命令直接安装:

pip install lightgbm

如果需要从国内的源进行安装以提高速度,可以使用以下命令:

pip install -i https://pypi.tuna.tsinghua.edu.cn/simple lightgbm

2、基本用法

2.1、数据准备

LightGBM支持多种数据格式,包括libsvm、tsv、csv等。我们可以使用Pandas或Numpy数组来创建数据集:

import lightgbm as lgb
import numpy as np

# 使用Numpy数组创建数据集
data = np.random.rand(500, 10)  # 500个样本,每个样本10个特征
label = np.random.randint(2, size=500)  # 二元目标变量,0和1
train_data = lgb.Dataset(data, label=label)
2.2、模型训练

使用LightGBM进行模型训练非常简单,只需要设置好参数并调用train函数即可:

params = {
    'objective': 'binary',
    'metric': 'auc',
    'num_leaves': 31,
    'learning_rate': 0.05,
    'feature_fraction': 0.9,
    'bagging_fraction': 0.8,
    'bagging_freq': 5,
    'verbose': 0
}

gbm = lgb.train(params, train_data, num_boost_round=100)
2.3、模型预测

训练完成后,我们可以使用模型进行预测:

y_pred = gbm.predict(data)

三、高级功能

1、自定义损失函数

LightGBM允许用户自定义损失函数,这对于解决特定问题非常有用。以下是一个自定义Huber损失函数的示例:

def huber_loss(y_true, y_pred, delta=1.0):
    residual = y_true - y_pred
    absolute_residual = np.abs(residual)
    quadratic_part = np.minimum(absolute_residual, delta)
    linear_part = absolute_residual - quadratic_part
    return np.mean(0.5 * quadratic_part ** 2 + delta * linear_part)

params = {
    'objective': 'regression',
    'metric': 'custom',
    'custom_metric': 'huber',
    'num_leaves': 31,
    'learning_rate': 0.05,
    'feature_fraction': 0.9,
    'bagging_fraction': 0.8,
    'bagging_freq': 5,
    'verbose': 0
}

bst = lgb.train(params, train_data, num_round=100, valid_sets=[test_data], early_stopping_rounds=10, feval=huber_loss)

2、超参数调优

LightGBM提供了调优超参数的功能,可以使用网格搜索(Grid Search)或随机搜索(Random Search)来搜索最佳的超参数组合:

from sklearn.model_selection import GridSearchCV

param_grid = {
    'num_leaves': [31, 50, 100],
    'learning_rate': [0.05, 0.1, 0.2],
    'subsample': [0.8, 1.0],
    'colsample_bytree': [0.8, 1.0],
}

grid_search = GridSearchCV(estimator=lgb.LGBMRegressor(), param_grid=param_grid, scoring='neg_mean_squared_error', cv=5, verbose=1)
grid_search.fit(X_train, y_train)

best_params = grid_search.best_params_
best_score = grid_search.best_score_

四、使用示例

下面是一个使用LightGBM进行二分类问题的完整示例:

import lightgbm as lgb
import numpy as np
from sklearn.datasets import make_classification
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

# 生成模拟数据
X, y = make_classification(n_samples=1000, n_features=20, n_informative=15, n_redundant=5, random_state=42)

# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 创建LightGBM数据集
train_data = lgb.Dataset(X_train, label=y_train)
test_data = lgb.Dataset(X_test, label=y_test, reference=train_data)

# 设置参数
params = {
    'objective': 'binary',
    'metric': 'binary_logloss',
    'num_leaves': 31,
    'learning_rate': 0.05,
    'feature_fraction': 0.9,
    'bagging_fraction': 0.8,
    'bagging_freq': 5,
    'verbose': 0
}

# 训练模型
gbm = lgb.train(params, train_data, num_boost_round=100, valid_sets=[test_data], early_stopping_rounds=10)

# 预测测试集
y_pred = gbm.predict(X_test, num_iteration=gbm.best_iteration)
y_pred_class = (y_pred > 0.5).astype(int)  # 二分类阈值

# 计算准确率
accuracy = accuracy_score(y_test, y_pred_class)
print(f'Accuracy: {accuracy:.4f}')

在这个示例中,我们首先生成了一个模拟的二分类数据集,然后使用LightGBM训练了一个模型,并在测试集上进行了预测和准确率计算。这个流程展示了LightGBM在实际问题中的应用,从数据准备到模型训练再到评估,整个过程简洁高效。

五、总结

LightGBM是一个高效、灵活的梯度提升决策树库,广泛应用于回归、分类、排序等实际应用场景。它具有快速训练速度、分布式计算、稀疏数据处理、自定义损失函数、GPU加速等特性。在实际使用中,LightGBM可以构建高性能的机器学习模型,对于处理大规模数据和复杂问题具有很大优势。


版权声明:本博客内容为原创,转载请保留原文链接及作者信息。

参考文章

标签:LightGBM,Python,num,lgb,train,test,data,详解
From: https://blog.csdn.net/NiNg_1_234/article/details/143987166

相关文章

  • python+flask计算机毕业设计骨科门诊患者档案管理系统(程序+开题+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于骨科门诊患者档案管理系统的研究,现有研究主要集中在综合性医院患者档案管理方面,专门针对骨科门诊患者档案管理的研究较少。在国内......
  • python selenium 操作唯品会
    fromseleniumimportwebdriverimporttimefromselenium.webdriver.chrome.serviceimportServicefromselenium.webdriver.common.byimportByservice=Service(executable_path="D:\\chromedriver.exe")chrome_options=webdriver.ChromeOptions()......
  • ChatGPT、Python和OpenCV支持下的空天地遥感数据识别与计算(地质监测、城市规划、农业
    在科技飞速发展的时代,遥感数据的精准分析已经成为推动各行业智能决策的关键工具。从无人机监测农田到卫星数据支持气候研究,空天地遥感数据正以前所未有的方式为科研和商业带来深刻变革。原文链接:ChatGPT、Python和OpenCV支持下的空天地遥感数据识别与计算(地质监测、城市规划、......
  • python实战(五)——构建自己的大模型助手
    一、任务目标    本文将利用大语言模型强大的对话能力,搭建一个PC端问答助手。具体来说,我们将使用API来调用我们想要的大模型,并结合Prompt让大模型根据任务类型生成对应的输出。为了更方便地调用大模型助手,我们将结合python第三方库中的语音识别库进行开发,实现调用麦克......
  • Python+Django框架淘宝家用电器销售数据可视化系统作品截图和开题报告参考
     博主介绍:黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育、辅导。所有项目都配有从入门到精通的基础知识视频课程,学习后应对毕业设计答辩,提供核心代码讲解,答辩指导。项目配有对应开发......
  • python 入门九大排序:1冒泡排序2插入排序3选择排序4快速排序5归并排序6堆排序7计数排序
    1冒泡排序:冒泡排序是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。代码如下:importnumpyasnpdefbubbling(arr):n=len(arr)foriinrange(n-1):forjinrange(n-i-1):ifarr[j......
  • D50【python 接口自动化学习】- python基础之类
    day50init方法学习日期:20241027学习目标:类--64init方法:如何为对象传递参数?学习笔记:魔术方法init方法classKlass(object):#定义初始化方法,类实例化时自动进行初始化def__init__(self,name,age):self.name=nameself.age=agede......
  • D51【python 接口自动化学习】- python基础之模块与标准库
    day51模块的导入学习日期:20241028学习目标:模块与标准库--66模块的导入:如何使用其他人编写好的代码功能?学习笔记模块的作用导入模块的方法#导入模块#方式一importos#获取当前的位置print(os.getcwd())#方式二fromosimportgetcwd#获取当前的位置pr......
  • python+flask框架的基于微信小程序的校园互助平台服务端视频8(开题+程序+论文) 计算机
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容选题背景随着移动互联网技术的飞速发展,微信小程序作为一种轻量级的应用形式,已经深入到人们生活的方方面面。在校园环境中,学生之间经常存在各种互助......
  • 模二除法详解
    模二除法(Modulo-2Division)是一种特殊的除法运算,用于计算二进制数据的CRC校验码。这种运算与普通的除法类似,但区别在于它使用不进位的异或运算来代替普通除法中的减法操作。模二除法的结果为二进制余数,应用在校验过程中以检验数据完整性。模二除法的基本规则模二除法的每一......