CatBoost原生接口和Sklearn接口参数详解

CatBoost原生接口和Sklearn接口参数详解

  • LightGBM原生接口和Sklearn接口参数详解
  • XGBoost原生接口和Sklearn接口参数详解
  • CatBoost
    • 一、Sklearn风格接口
      • CatBoostRegressor参数
      • CatBoostRegressor.fit参数
      • CatBoostRegressor.predict参数
    • 二、Catboost原生接口
      • CatBoost Pool
      • CatBoost可视化
  • xgboost,lightgbm,catboost相同点不同点,优缺点
      • 相同点:
      • 不同点:
      • 并行方式:

LightGBM原生接口和Sklearn接口参数详解

XGBoost原生接口和Sklearn接口参数详解

CatBoost

一、Sklearn风格接口

CatBoostRegressor参数

  • iterations (int): 模型迭代次数,即构建的决策树数量。默认值是100。
  • learning_rate (float): 学习率,控制模型在每一步更新权重的速度。默认值是0.03。
  • depth (int): 决策树的最大深度。较高的深度可能导致过拟合,较低的深度可能欠拟合。默认值是6。
  • l2_leaf_reg (float): L2正则化项的强度。较大的值会增加正则化,防止过拟合。默认值是3.0。
  • loss_function (str): 用于评估模型性能的损失函数。对于回归问题,常见的选项有RMSE(均方根误差)、MAE(平均绝对误差)等。默认是RMSE。
  • eval_metric (str or callable): 评估模型性能的额外指标,可以是内置的或自定义的函数。
  • task_type (str): 指定任务类型,可以是CPU或GPU。若要使用GPU,需确保安装了GPU版本的CatBoost。
  • devices (str): 指定要使用的GPU设备,例如’0’表示使用第一个GPU,'0,1’表示使用第一和第二个GPU。
  • random_strength (float): 控制随机特征分裂的强度,用于防止过拟合。默认值是1.0。
  • cat_features (list): 显式指定分类特征的索引或名称,如果数据集中有类别特征。
  • border_count (int): 分类特征的边界数量,用于创建直方图。默认值是255。
  • one_hot_max_size (int): 对于类别特征,如果类别数量超过这个值,将使用稀疏编码。默认值是20。
  • verbose (int): 控制训练过程中的输出信息量。0表示无输出,1表示基本输出,2表示详细输出。
  • early_stopping_rounds (int): 如果设置,将在验证集上监控该指标,如果在指定轮数内没有改善,则提前停止训练。
  • use_best_model (bool): 是否使用验证集上表现最好的模型。默认为True。

这些参数可以在创建CatBoostRegressor实例时设置,也可以在fit方法中通过params字典传递。

CatBoostRegressor.fit参数

CatBoostRegressor.fit方法用于训练模型,它接受几个关键参数来控制训练过程和数据处理方式。以下是一些主要的参数:

  • X (array-like 或 sparse matrix 或 catboost.Pool): 训练数据集的特征部分。可以是NumPy数组、pandas DataFrame、SciPy稀疏矩阵或catboost.Pool对象。
  • y (array-like): 训练数据集的目标变量。对于回归任务,这应该是一个一维数组或序列。
  • cat_features (list 或 None, 可选): 分类特征的列索引列表。仅当直接使用numpy数组或pandas DataFrame作为X时需要。如果使用catboost.Pool,则不需要此参数,因为分类特征已在Pool创建时指定。
  • sample_weight (array-like 或 None, 可选): 样本权重数组,用于在训练过程中对不同样本赋予不同的重要性。
  • group_id (array-like 或 None, 可选): 如果数据具有组结构,可以提供组ID。这在时间序列预测或需要按组进行评估时很有用。
  • group_weight (array-like 或 None, 可选): 组权重,与group_id一起使用,为不同的组分配不同的权重。
  • verbose (bool 或 int, 可选): 控制训练过程中的输出信息。如果是False,则不输出任何信息;如果是True或正整数,将显示训练进度。
  • logging_level (str 或 int, 可选): 设置日志级别,控制输出的详细程度。
  • plot (bool, 可选): 是否在Jupyter Notebook中绘制学习曲线。默认为False
  • eval_set (tuple(list(array-like), array-like) 或 list(tuple(list(array-like), array-like)), 可选): 评估数据集,可以是一个元组(验证特征,验证标签)或元组列表(多个验证集)。用于监控模型在验证集上的性能,并可能触发早停。
  • early_stopping_rounds (int, 可选): 当使用eval_set时,如果验证集上的性能在指定的轮数内没有提升,则停止训练。
  • use_best_model (bool, 可选): 如果为True,则训练结束后返回的是在验证集上表现最好的模型。默认为True。
  • verbose_eval (bool 或 int, 可选): 控制训练过程中的评估信息输出频率。如果为正整数,表示每多少轮输出一次。
  • metric_period (int, 可选): 计算并输出评估指标的周期(迭代次数)。

CatBoostRegressor.predict参数

CatBoostRegressor.predict方法用于对新的数据集进行预测。该方法接受一些参数来控制预测行为。以下是一些主要的参数:

  • X (array-like 或 catboost.Pool): 需要预测的目标数据集的特征部分。它可以是NumPy数组、pandas DataFrame或catboost.Pool对象。数据格式应与训练数据集中的格式相匹配。
  • ntree_limit (int, 可选): 限制用于预测的树木数量。默认情况下,使用所有训练的树木。如果你只想用前n棵树进行预测,可以设置此参数。
  • prediction_type (string, 可选): 预测类型。对于回归任务,默认值通常是"RawValue",意味着直接返回预测的数值。根据模型和需求,可能还有其他选项,如"Probability"(通常用于分类模型)。
  • thread_count (int, 可选): 用于预测的线程数。默认情况下,CatBoost会尝试自动检测并使用所有可用的CPU核心。你可以通过设置此参数来限制使用的核心数。
  • verbose (bool 或 int, 可选): 控制预测过程中的输出信息。如果为False,则不输出任何信息;如果是True或正整数,可能会显示预测进度。

二、Catboost原生接口

CatBoost Pool

  1. 什么是 CatBoost Pool?
    CatBoost Pool 是 CatBoost 模型使用的特殊数据容器,它以优化的方式存储和处理特征数据,从而提高模型训练和预测的效率。相比于直接使用 pandas DataFrame 或 numpy array,Pool 能够更高效地处理 categorical 特征,并且支持稀疏数据表示,减少内存占用和加速计算过程。

  2. 为什么使用 Pool?
    性能优化:Pool 对数据进行预处理,包括对类别特征的独热编码(one-hot encoding)和对缺失值的处理,这一步骤在数据加载时完成,避免了在每次迭代时重复处理。
    内存效率:对于大规模数据集,Pool 支持稀疏数据格式,减少内存占用。
    并行处理:Pool 设计支持并行加载数据和训练过程中的并行计算,充分利用多核CPU资源。
    灵活性:可以直接指定 label、权重、基线值等,便于进行更复杂的数据处理和模型调优。

  3. Pool 的特性
    自动处理类别特征:CatBoost Pool 自动识别分类特征,并进行适当的编码,无需用户手动编码。
    缺失值处理:支持在创建 Pool 时指定缺失值处理策略。
    分块加载:对于大数据集,可以设置 chunksize 参数分块加载数据,减少内存峰值。
    并行读取:通过设置 thread_count 参数,可以在创建 Pool 时利用多线程并行读取数据。

from catboost import CatBoostRegressor

# 初始化模型实例
model = CatBoostRegressor(
    iterations=1000,          # 训练迭代次数
    learning_rate=0.03,        # 学习率
    depth=6,                   # 决策树最大深度
    loss_function='RMSE',      # 损失函数,回归任务常用'RMSE'
    eval_metric='RMSE',        # 评估指标
    random_seed=42,            # 随机种子,确保结果可复现
    l2_leaf_reg=3,             # L2正则化系数
    task_type='CPU',           # 训练任务类型,可选'CPU'或'GPU'
    verbose=True               # 输出训练过程信息
)

# 特征与标签:准备特征矩阵X和目标变量向量y。
# 分类特征处理:如果数据中含有分类特征,需要指定它们的索引或名称。
# 创建Pool对象:为了高效处理数据,尤其是大型数据集,推荐使用Pool对象。它可以处理类别特征、权重、基学习率等,并且支持稀疏数据格式。
from catboost import Pool

# 假设X_train, y_train是训练数据和标签
pool_train = Pool(data=X_train, label=y_train, cat_features=cat_features_indices)

# 可以创建验证集Pool
pool_valid = Pool(data=X_valid, label=y_valid, cat_features=cat_features_indices)

# 使用fit方法进行训练,可以传入多个Pool进行验证
model.fit(pool_train,
          eval_set=pool_valid,       # 验证集
          early_stopping_rounds=50,  # 早停策略,连续多少轮没提升就停止训练
          use_best_model=True)       # 是否使用验证集上最优的模型

# 对新数据进行预测
predictions = model.predict(X_test)

# 获取特征重要性
feature_importances = model.get_feature_importance(pool_train)

# 保存模型
model.save_model('model.cbm')

# 加载模型
loaded_model = CatBoostRegressor().load_model('model.cbm')

# 可以通过get_params()和set_params()方法查看和修改模型参数。

# 查看当前模型参数
params = model.get_params()

# 修改参数
model.set_params(learning_rate=0.01)

from catboost import cv

# 执行交叉验证
cv_results = cv(pool=pool_train,
                params=model.get_params(),
                fold_count=5,            # 折叠数
                stratified=False,        # 是否分层采样
                shuffle=True,            # 是否打乱数据
                partition_random_seed=42) # 分区随机种子

CatBoost允许用户定义自己的损失函数和评估指标,这需要编写相应的Python函数,并在初始化模型时指定。

  • 多线程和GPU使用:通过thread_count和task_type参数控制。
  • 正则化:通过l2_leaf_reg等参数进行模型复杂度控制。
  • 类别特征处理:在创建Pool时指定cat_features。

CatBoost可视化

  1. 学习曲线可视化
    在 Jupyter Notebook 中,可以使用 plot_learning_curve 函数来绘制模型的学习曲线,展示训练集和验证集的损失或评估指标随迭代次数的变化情况。这有助于分析模型是否过拟合或欠拟合。
import catboost
from catboost import CatBoostClassifier

# 训练模型
model = CatBoostClassifier(iterations=100)
model.fit(train_pool, eval_set=test_pool)

# 绘制学习曲线
model.plot_learning_curve(train_pool, test_pool)
  1. 特征重要性
    可以使用 get_feature_importance 方法获取特征的重要性,并通过 matplotlib 等库进行可视化,展示哪些特征对模型预测贡献最大。
import matplotlib.pyplot as plt

# 获取特征重要性
importances = model.get_feature_importance(train_pool)

# 可视化特征重要性
plt.bar(range(len(importances)), importances)
plt.xlabel('Feature Index')
plt.ylabel('Importance')
plt.title('Feature Importances')
plt.show()
  1. 特征分析
    CatBoost 支持对类别特征进行 Ordered Target Statistics 的可视化,这有助于理解特征值与目标变量之间的关系。
# 分析并可视化特定特征
feature_name = 'your_feature_name'
feature_importance_plot = model.plot_feature_importance([feature_name])
  1. Shap Values(SHAP解释)
    虽然不是 CatBoost 直接提供的,但可以与 SHAP 库结合,生成复杂的特征贡献解释图,如 SHAP 柱状图或 SHAP 决策图。
import shap

# 初始化 SHAP 解释器
explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(test_pool.get_X())

# 可视化(例如,使用 SHAP 柱状图)
shap.summary_plot(shap_values, test_pool.get_X(), feature_names=test_pool.get_feature_names())
  1. TensorBoard集成
    CatBoost 支持将训练过程的日志输出到 TensorBoard 格式,从而可以在 TensorBoard 中可视化更多的训练细节,如损失曲线、学习速率变化等。
# 在训练时启用 TensorBoard 日志记录
model.fit(train_pool, eval_set=test_pool, verbose=False, plot=True)

xgboost,lightgbm,catboost相同点不同点,优缺点

相同点:

梯度提升决策树(GBDT)框架:XGBoost、LightGBM、和CatBoost都是基于梯度提升决策树(Gradient Boosting Decision Tree, GBDT)的机器学习算法,通过迭代地添加决策树以逐步降低预测误差。
目标函数优化:它们都采用梯度下降方法来最小化损失函数,通过迭代过程不断优化模型。
特征重要性:都能提供特征重要性评估,帮助理解哪些特征对模型预测最为关键。
并行计算:都支持一定程度的并行计算,加快训练速度。XGBoost和LightGBM主要通过列块并行和数据并行来加速,而CatBoost则在处理类别特征时有特定的优化。

不同点:

处理类别特征:
CatBoost:自动处理类别特征,不需要用户进行独热编码,内置了对类别特征的高效处理机制。
XGBoost和LightGBM:需要用户先对类别特征进行编码处理,如独热编码。
稀疏数据处理:
LightGBM:特别优化了对稀疏数据的处理,使用了直方图算法来减少计算量,提高了效率。
XGBoost和CatBoost:虽然也能处理稀疏数据,但可能不如LightGBM高效。
训练速度:
LightGBM:通常被认为是最快的,因为它采用了直方图近似和单边梯度采样等策略减少计算量。
XGBoost:虽然也很快,但在大规模数据集上可能不如LightGBM。
CatBoost:在某些场景下,尤其是含有大量类别特征时,由于其独特的处理方式,也能表现出色。

并行方式:

XGBoost:支持并行计算,包括特征并行和数据并行。
LightGBM:主要通过数据并行和直方图算法加速。
CatBoost:除了传统的并行计算外,还针对类别特征处理进行了优化。
优点:
XGBoost:成熟稳定,社区支持广泛,提供了丰富的参数调优空间。
LightGBM:训练速度快,内存使用效率高,适合大规模数据集。
CatBoost:自动处理类别特征和缺失值,有较好的默认参数设置,适合处理含有类别特征的数据。
缺点:
XGBoost:在大规模数据集上训练速度可能不如LightGBM和CatBoost。
LightGBM:在处理含有大量类别特征的数据时可能不如CatBoost高效。
CatBoost:相比于其他两者,CatBoost的安装和使用可能稍微复杂一些,尤其是在Windows系统上。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/772111.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

汇聚荣拼多多评价好不好?

汇聚荣拼多多评价好不好?在探讨电商平台的口碑时,用户评价是衡量其服务质量和商品质量的重要指标。拼多多作为国内领先的电商平台之一,其用户评价自然成为消费者选择购物平台时的参考依据。针对“汇聚荣拼多多评价好不好?”这一问题,可以从…

Elasticsearch初识与 index+mapping+document 基操

前言 在21年多少有使用过es 当时是在艺术赛道的一个教育公司,大概流程就是 将mysql中的各种课程数据通过logstash汇总到es 然后提供rest接口出去。由于在职时间较短(很不幸赶上了教育双减),所以对es的了解其实仅仅是些皮毛,当然elk在我的任职…

稀疏数组搜索

题目链接 稀疏数组搜索 题目描述 注意点 字符串数组中散布着一些空字符串words的长度在[1, 1000000]之间字符串数组是排好序的数组中的字符串不重复 解答思路 因为数组中的字符串是排好序的,所以首先想到的是二分查找,先将数组中长度与s相同的字符串…

全网都在疯传的最新蓝海风口项目!

最近全网都在疯传这种视频,想必兄弟们都见到过了! 大家看这个号,1天的时间,2个作品,第2个直接就爆了,昨天看点赞还是3.8w,今天已经10w了,这是妥妥的风口啊! 大家有没有想…

io_contextttttttttttt

创建上下文——io_context_t 它是一个上下文结构,在内部它包含一个完成队列,在线程之间是可以共享的。 提交请求——iocb io回调数据结构,和io_submit配合使用。 处理结果 通过io_event处理结果, struct io_event {void *data…

TIS人人都会用的数据集成产品

文章目录 1.TIS是什么?1.1 简介1.2 官网及项目地址1.3 架构 2.功能特性2.1 基于Web UI的开箱即用2.2 支持分布式任务分发2.3 全新的基于微内核的运行环境2.4 功能覆盖DataX大部分(Reader/Writer)Plugin2.5 重构DataX的Classloader2.6 支持RDB…

科比老大职业生涯数据预测(基于随机森林模型)

1.实验背景 科比布莱恩特,作为NBA历史上最伟大的篮球运动员之一,他的职业生涯充满了无数精彩瞬间。 科比于1996年以13顺位的选秀身份进入联盟,一生都效力于洛杉矶湖人队。于2016年宣布退役,职业生涯获奖无数,5次NBA总…

99. 岛屿数量

题目描述:给定一个由 1(陆地)和 0(水)组成的矩阵,你需要计算岛屿的数量。岛屿由水平方向或垂直方向上相邻的陆地连接而成,并且四周都是水域。你可以假设矩阵外均被水包围。 输入描述&#xff1a…

EXTI寄存器,AFIO的简洁,EXTI配置的流程

一,AFIO简介 AFIO是Alternate Function Input/Output 的缩写,表示复用功能IO,主要用于实现IO端口的复用功能以及外部中断的控制 STM32外设有很多I/O以及内置外设(如12C,ADC,ISP,USART等)。为节省引出管脚的…

命令行运行git reflog(reference log)报错的解决办法

文章目录 1. 检查 Git 是否已安装2. 检查 PATH 环境变量3. 重新安装 Git 在Git中, reflog的英文全称是 “ reference log”。意思是 引用日志(参考日志)。它记录了本地仓库中HEAD和分支引用所指向的提交的变更历史。这包括了你所有的提交&…

经典低功耗四通道运算放大器LM324

前言: SOP14封装LM324 这个LM324运放有几十年的历史了吧?很普通,很常用,搞电路的避免不了接触运放,怎么选择运放,是工程师关心的问题吧? 从本文开始,将陆续发一些常用的运放&#xf…

【AI学习】无线AI的问题和挑战

无线AI,即无线人工智能,是指内生于未来(6G)无线通信系统并通过无线架构、无线数据、无线算法和无线应用所呈现出来的新的人工智能技术体系。 最近一直在进行无线AI的调研,感觉真的是路漫漫其修远兮。业界有一些探索&a…

【人工智能】--生成对抗网络

个人主页:欢迎来到 Papicatch的博客 课设专栏 :学生成绩管理系统 专业知识专栏: 专业知识 文章目录 🍉引言 🍉GAN 的基本原理 🍈生成器(Generator) 🍈判别器&…

【前端知识】一篇速成 建议收藏

HTML基础概念 正式敲代码之前呢,我们先来看几个概念: 0 静态网页和动态网页 静态网页: 页面的内容和显示效果就基本上不会发生变化了--除非你修改页面代码。 动态网页: 页面代码虽然没有变,但是显示的内容却是可以随着时间、环境或者数据库操作的结果而发生改变的…

解决SeaTunnel 2.3.4版本写入S3文件报错问题

在使用Apache SeaTunnel时,我遇到了一个写入S3文件的报错问题。通过深入调试和分析,找到了问题所在,并提出了相应的解决方案。 本文将详细介绍报错情况、参考资料、解决思路以及后续研究方向,希望对大家有帮助! 一、…

PyTorch - 神经网络基础

神经网络的主要原理包括一组基本元素,即人工神经元或感知器。它包括几个基本输入,例如 x1、x2… xn ,如果总和大于激活电位,则会产生二进制输出。 样本神经元的示意图如下所述。 产生的输出可以被认为是具有激活电位或偏差的加权…

Java通过GeoLite2-City.mmdb 进行IP信息查询地理定位和经纬度筛选。

引入依赖 <dependency><groupId>com.maxmind.geoip2</groupId><artifactId>geoip2</artifactId><version>4.2.0</version> </dependency>下载数据文件&#xff1a;https://download.lin2ur.cn/GeoLite2/ package com.cqclo…

经典递归分析

在前面一篇中, 已经看过许多直观的递归的例子, 在这篇里, 将分析两个经典的递归问题, 阶乘与菲波那契数列数列, 在此过程中, 还将对比递归与循环(迭代)间的异同, 探讨递归与内存中的栈的关系, 以及递归的效率等问题. 如无特别说明, 示例使用的是 Java, IDE 则为 Eclipse. 阶乘(…

Matplotlib 简介

import matplotlib.pyplot as plt plt.plot([1, 2, 3, 4]) plt.ylabel(some numbers) plt.show() 当使用plot只传入单个数组时&#xff0c;matplotlib会认为这是y的值&#xff0c;并自动生成长度相同&#xff0c;但是从0开始的x值&#xff0c;所以这里的x会自动生成为 [0,1,2,…

python自动化办公之BeautifulSoup爬取并解析html文本

用到的库&#xff1a;BeautifulSoup 实现效果&#xff1a;爬取网站内容&#xff0c;拿到html文本并解析html文本 代码&#xff1a; 先爬取 # 先导入requests包 import requests urlhttps://www.baidu.com responserequests.get(url) # 做1个断言&#xff0c;如果执行成功&a…