Catboost学习

梯度提升概述

要理解 boosting,我们首先理解集成学习,为了获得更好的预测性能,集成学习结合多个模型(弱学习器)的预测结果。它的策略就是大力出奇迹,因为弱学习器的有效组合可以生成更准确和更鲁棒的模型。集成学习方法分为三大类:

  • Bagging:该技术使用随机数据子集并行构建不同的模型,并聚合所有预测变量的预测结果。
  • Boosting:这种技术是可迭代的、顺序进行的和自适应的,因为每个预测器都是针对上一个模型的错误进行修正。
  • Stacking:这是一种元学习技术,涉及结合来自多种机器学习算法的预测,例如 bagging 和 boosting。

提升方法(Boosting):主要思想为,把多个高偏差的弱学习器组合利用起来,降低整体偏差,形成一个强学习器
梯度提升机(Gradient Boosting Machine,GBM)是 Boosting 的一种实现方式,让新的分类器拟合负梯度来降低偏差
系统梳理GBM相关

GBDT

梯度提升决策树(Gradient Boosting Decision Tree,GBDT)是 GBM + CART。CART 作为 GBM 的基模型,GBM 做为 CART 的集成方法。

CART决策树

决策树原理
采用基尼系数来进行定义一个系统中的失序现象,即系统的混乱程度(纯度)。基尼系数越高,系统越混乱(不纯)。建立决策树的目的就是降低系统的混乱程度,降低基尼系数。
基尼系数计算公式如下:
g i n i ( T ) = 1 − ∑ p i 2 gini(T)=1-\sum p_i^2 gini(T)=1pi2
其中pi为类别i在样本T中出现的频率,即类别为i的样本占总样本个数的比率。
在分类问题中,决策树模型会优先选择使得整个系统的基尼系数下降最大的划分方式来进行节点划分。划分后的基尼系数为各部分基尼系数的样本数量加权平均值。

在回归问题中,决策树一般使用均方误差MSE作为其划分标准
请添加图片描述
在这里插入图片描述

catboost算法

CatBoost是一种基于对称决策树(oblivious trees)为基学习器实现的参数较少、支持类别型变量和高准确性的GBDT框架,主要解决的痛点是高效合理地处理类别型特征,CatBoost是由Categorical和Boosting组成。此外,CatBoost还解决了梯度偏差(Gradient Bias)及预测偏移(Prediction shift)的问题,从而减少过拟合的发生,进而提高算法的准确性和泛化能力。
它自动采用特殊的方式处理类别型特征(categorical features)。首先对categorical features做一些统计,计算某个类别特征(category)出现的频率,之后加上超参数,生成新的数值型特征(numerical features)。这也是这个算法最大的motivtion,有了catboost,再也不用手动处理类别型特征了。
catboost还使用了组合类别特征,可以利用到特征之间的联系,这极大的丰富了特征维度。
采用ordered boost的方法避免梯度估计的偏差,进而解决预测偏移的问题。
catboost的基模型采用的是对称树,同时计算leaf-value方式和传统的boosting算法也不一样,传统的boosting算法计算的是平均数,而catboost在这方面做了优化采用了其他的算法,这些改进都能防止模型过拟合。

主要特点
对称决策树

在每一步中,前一棵树的叶子都使用相同的条件进行拆分。选择损失最低的特征分割对并将其用于所有级别的节点。这种平衡的树结构有助于高效的 CPU 实现,减少预测时间,模型结构可作为正则化

### CatBoost 机器学习库简介 CatBoost 是一个基于梯度提升决策树(GBDT)的开源机器学习库,专为解决分类和回归问题而设计。它能够高效处理类别特征并提供出色的预测性能[^1]。 --- ### 安装方法 可以通过 `pip` 或 `conda` 来安装 CatBoost 库: #### 使用 pip 安装 运行以下命令即可完成安装: ```bash pip install catboost ``` #### 使用 conda 安装 如果使用 Anaconda 环境,则可以执行以下命令: ```bash conda install -c conda-forge catboost ``` --- ### 参数说明 以下是 CatBoost 中常用的一些重要参数及其作用: | 参数名称 | 描述 | |---------------------|------------------------------------------------------------------------------------------| | `iterations` | 设置训练的最大迭代次数,默认值为 1000。 | | `learning_rate` | 学习率,控制每一步更新的影响程度,默认值为 0.03。 | | `depth` | 树的最大深度,影响模型复杂性和泛化能力,默认值为 6。 | | `l2_leaf_reg` | L2 正则化系数,防止过拟合,默认值为 3。 | | `loss_function` | 损失函数的选择,例如 `'Logloss'` 对于二分类问题,`'RMSE'` 对于回归问题。 | | `cat_features` | 类别特征索引列表,指定哪些列是类别特征。 | | `random_seed` | 随机种子,确保结果可重复。 | 更多高级参数可以在官方文档中查阅:https://catboost.ai/docs/concepts/python-reference_parameters-list.html[^3] --- ### 示例代码 下面展示如何使用 CatBoost 进行简单的分类任务: #### 数据准备 假设我们有一个包含数值和类别特征的数据集: ```python import pandas as pd from sklearn.model_selection import train_test_split from catboost import CatBoostClassifier, Pool # 创建示例数据 data = { 'feature_1': [1, 2, 3, 4], 'feature_2': ['A', 'B', 'C', 'D'], 'label': [0, 1, 0, 1] } df = pd.DataFrame(data) # 划分训练集和测试集 X_train, X_test, y_train, y_test = train_test_split( df[['feature_1', 'feature_2']], df['label'], test_size=0.25, random_state=42 ) # 指定类别特征 cat_features = [1] # feature_2 的位置索引 train_pool = Pool(X_train, y_train, cat_features=cat_features) test_pool = Pool(X_test, cat_features=cat_features) ``` #### 训练模型 创建并训练一个 CatBoost 分类器: ```python model = CatBoostClassifier( iterations=100, learning_rate=0.1, depth=6, loss_function='Logloss', verbose=False ) model.fit(train_pool) ``` #### 预测与评估 对测试集进行预测并计算准确率: ```python predictions = model.predict(test_pool) accuracy = (predictions == y_test).mean() print(f"Accuracy: {accuracy:.2f}") ``` --- ### 总结 CatBoost 提供了一种强大且易用的方法来构建高性能的机器学习模型。它的优势在于自动处理类别特征、减少过拟合以及内置优化参数的能力[^2]。然而,在面对超大规模数据时,可能会遇到内存占用较高的挑战。 ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值