CatBoost算法详解

CatBoost算法是提升算法家族中的一员,由Yandex开发,是一个开源的机器学习库,支持Python和R语言。它特别擅长处理数据集中的分类变量。与其他提升算法一样,CatBoost在后台创建多个决策树,即树的集成,以预测分类标签。它基于梯度提升技术。

CatBoost算法的核心特点

CatBoost算法的核心特点包括对分类变量的处理、梯度提升、有序提升和正则化技术。CatBoost能够自动处理包含分类特征的数据集,通过将分类变量转换为数值表示,包括目标统计、独热编码或两者的混合。这种能力节省了手动预处理分类特征的时间和努力。

CatBoost使用梯度提升技术,这是一种集成技术,通过结合多个弱学习器(决策树)来创建有效的预测模型。通过添加训练有素的树来纠正前一棵树造成的错误,以迭代的方式创建树,同时最小化可微分的损失函数。这种迭代方法逐步提高了模型的预测能力。

CatBoost提出了一种名为“有序提升”的新技术,有效处理分类特征。在构建树时,它使用一种称为排列驱动的预排序分类变量的技术来确定最优的分割点。这种方法使CatBoost能够考虑所有可能的分割配置,提高预测并降低过拟合。

CatBoost使用正则化技术来减少过拟合并提高泛化能力。它在叶值上使用L2正则化,通过向损失函数添加惩罚项来防止叶值过大。此外,它还使用一种称为“有序目标编码”的先进方法,在编码分类数据时避免过拟合。

CatBoost算法的优势

CatBoost算法的优势在于其对分类变量的强大处理能力,以及出色的预测性能。使用CatBoost的梯度提升框架和有序提升,预测结果通常非常准确。它能够产生强大的模型,超越许多其他算法,并有效地捕捉数据中的复杂关系。

应用案例

CatBoost算法在多个Kaggle比赛中表现出色,成功应用于各种回归和分类任务。以下是CatBoost成功应用的一些实例:

  • Cloudflare使用CatBoost识别针对其用户网站的机器人。
  • 总部位于迪拜的拼车服务Careem使用CatBoost预测其客户下一步的出行地点。

CatBoost算法的实现

CatBoost是一个开源库,确保已经安装了它。如果没有,以下是安装CatBoost包的命令。

!pip install catboost

可以在Python和R语言中训练和构建CatBoost算法,但本文只使用Python作为实现语言。

#导入库 import pandas as pd import os import matplotlib.pyplot as plt import seaborn as sns import catboost as cb from sklearn.model_selection import train_test_split from sklearn.metrics import confusion_matrix, accuracy_score import warnings warnings.filterwarnings('ignore')

这里使用大型超市销售数据集,并执行一些数据一致性检查。

#上传数据集 os.chdir('E:\Dataset') dt = pd.read_csv('big_mart_sales.csv')

数据集包含超过1k条记录和35列,其中8列是分类的,但不会将这些列转换为数值格式。CatBoost本身就可以做到这一点。这是CatBoost的魔力。可以在模型参数中提到任何想要的东西。只是为了演示目的只取了“迭代”作为参数。

X = dt.drop('Attrition', axis=1) y = dt['Attrition'] X_train, X_test, y_train, y_test = train_test_split(X,y, test_size=0.2, random_state=14) print(X_train.shape) print(X_test.shape)

CatBoost模型有许多模型参数可以使用。以下是构建CatBoost模型时可以提到的一些重要参数。

  • 迭代次数:构建的增强迭代次数或树的数量。更高的值可以带来更好的性能,但训练时间更长。它是一个从1到无穷大的整数值[1, ∞]。
  • 学习率:梯度提升算法学习的步长。较小的数字会使模型收敛得更慢,但可以改善泛化。它应该是一个从0到1的浮点值。
  • 深度:集成中单个决策树的最大深度。虽然更深的树有更高的过拟合机会,但它们可以捕捉更复杂的交互。它是一个从1到无穷大的整数值[1, ∞]。
  • 损失函数:在训练期间应该优化损失函数。不同类型的问题——如二元分类的“Logloss”,多类分类的“MultiClass”,回归的“RMSE”等有不同的解决方案。它是一个字符串值。
  • l2_leaf_reg:叶值受到L2正则化的约束。较大的叶值会受到更高的惩罚,这有助于最小化过拟合。它是一个从0到无穷大的浮点值[0, ∞]。
  • border_count:数值特征的分割数量。虽然更高的数字提供更准确的分割,但它们也可能导致过拟合。对于大型数据集,建议的值是128。它是一个从1到255的整数值[1, 255]。
  • random_strength:在选择分割点时使用的随机性水平。较大的值引入更多的随机性,防止过拟合。范围:[0, ∞]。
  • bagging_temperature:控制训练实例采样的强度。较大的值降低了bagging过程的随机性,而较小的值则增加了它。它是一个从0到无穷大的浮点值[0, ∞]。
#在测试集上进行模型预测 y_pred = model.predict(X_test) print(accuracy_score(y_pred, y_test)) print(confusion_matrix(y_pred, y_test))
  • CatBoost的实际实现。
  • CatBoost算法的重要特点。
  • CatBoost表现良好的用例。
  • 训练模型时CatBoost的模型参数。
Q1. CatBoost的用例是什么?
A.CatBoost是一个监督机器学习算法。它可以用于回归和分类问题。
Q2. CatBoost是装袋还是提升?
A. CatBoost是一个开源的梯度提升库,它非常擅长处理分类数据;因此它使用提升技术。
Q3. CatBoost中的池是什么?
A. 池是CatBoost中的内部数据格式。如果将numpy数组传递给它,它将隐式地将其转换为Pool,而不会告诉。如果需要对一个数据集应用许多公式,使用Pool可以大幅提高性能(例如10倍),因为将省略每次转换步骤。
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485