- CatBoost 教程
- CatBoost - 首页
- CatBoost - 概述
- CatBoost - 架构
- CatBoost - 安装
- CatBoost - 特性
- CatBoost - 决策树
- CatBoost - 提升过程
- CatBoost - 核心参数
- CatBoost - 数据预处理
- CatBoost - 处理类别特征
- CatBoost - 处理缺失值
- CatBoost - 分类器
- CatBoost - 回归器
- CatBoost - 排序器
- CatBoost - 模型训练
- CatBoost - 模型评估指标
- CatBoost - 分类指标
- CatBoost - 过拟合检测
- CatBoost 与其他提升算法的比较
- CatBoost 有用资源
- CatBoost - 有用资源
- CatBoost - 讨论
CatBoost - 处理类别特征
类别特征是表示类别或标签而不是数值的变量,因此有时也被称为名义或离散特征。这些特征在各种现实世界的数据集中很常见,并且难以包含到机器学习模型中。
我们可以将类别分为两种主要类型:
名义类别特征:这些特征表示没有基本顺序或等级的类别,例如颜色、性别和国家。这些特征通常需要特殊的编码,例如标签编码才能用于机器学习模型。
有序类别特征:这些特征表示具有有意义的顺序或等级的类别,例如教育水平,其类别包括高中、学士学位、硕士学位等等。这些特征可以写成整数来表示它们的顺序。
CatBoost 参数
CatBoost 是一个高级梯度提升库,包含大量用于更改和改进模型的参数。让我们来看一下一些最常用的 CatBoost 参数:
学习率 (learning_rate):随着损失函数接近其最小值,步长在每次迭代中都会进行调整。但是它需要更多迭代,较慢的学习率可以增强训练。最常见的值范围在 0.01 到 0.3 之间。
迭代次数 (iterations):它显示集成树或提升迭代的总数。更多的迭代可以提升模型性能,但它们会增加过拟合的可能性。几百到几千是一个平均范围。
L2 叶子正则化 (l2_leaf_reg):这是加权 L2 正则化。惩罚特征上的权重过大有助于减少过拟合。调整此值可以改进正则化。
树的深度 (depth):它指的是集成中树的总数。它定义了每棵树的复杂程度。虽然更深的树可以描述复杂的关联,但它们更容易过拟合。值通常在 4 到 10 之间变化。
详细程度 (verbose):设置为 True 时,它会在迭代期间显示训练进度。如果为 False,则它会静默工作,不会打印进度。
随机种子 (random_seed):这是随机数生成器使用的种子。设置此值可以确保结果的可重复性。
独热编码最大大小 (one_hot_max_size):类别特征的独热编码可以支持的独特类别的最大数量。如果唯一类别的数量超过此限制,CatBoost 会使用有效的方法来不同地处理该特征。
类别特征 (cat_features):一组表示类别特征的索引。CatBoost 会对这些特征进行编码以进行训练,并以不同的方式处理它们。
使用类别特征的 CatBoost
与许多其他机器学习模型不同,在这些模型中需要手动编码类别变量或特征,但 CatBoost 可以直接处理类别特征。你只需要告诉哪些特征是类别的,CatBoost 就会处理它们。所以让我们看看如何使用类别特征实现 CatBoost:
1. 安装 CatBoost 库
首先,你必须确保你是否已经安装了 CatBoost 库。如果尚未安装,可以使用以下命令安装:
pip install catboost
导入库
安装后,你就可以在你的模型中使用它了。因此,像下面一样导入代码中必要的库:
from catboost import CatBoostClassifier, Pool from sklearn.model_selection import train_test_split
2. 加载和准备数据
你必须确保你的数据集具有类别特征。正如我们前面讨论的,你不需要手动编码它们。
# Sample Data data = [ ['red', 1, 5.1], ['blue', 0, 3.5], ['green', 1, 4.7], ['blue', 0, 2.9], ['red', 1, 5.0] ]
3. 目标值和数据分割
现在,你必须确定目标值,然后将其转换为数据框。转换为数据框后,你必须将数据分割成测试和训练数据集以测试和训练模型。
# Target values labels = [1, 0, 1, 0, 1] # Convert to DataFrame import pandas as pd df = pd.DataFrame(data, columns=['color', 'feature1', 'feature2']) # Split data into train and test sets X_train, X_test, y_train, y_test = train_test_split(df, labels, test_size=0.2, random_state=42)
4. 识别类别特征
正如我们本章前面所看到的,在 CatBoost 中,你必须告诉模型哪些特征是类别的。这可以通过传递类别特征的索引或名称来实现,如下所示:
# Declare categorical features (column index or name) categorical_features = ['color']
5. 训练模型
现在,使用 CatBoost 的 CatBoostClassifier 或 CatBoostRegressor 进行分类或回归任务。在执行此操作之前,你必须创建一个池对象来指定数据、标签和类别特征。请参见下面的代码:
# Pool object train_pool = Pool(data=X_train, label=y_train, cat_features=categorical_features) test_pool = Pool(data=X_test, label=y_test, cat_features=categorical_features) # Initialize and train the model model = CatBoostClassifier(iterations=100, learning_rate=0.1, depth=6) model.fit(train_pool) # Predict on the test set preds = model.predict(test_pool) # Model accuracy accuracy = (preds == y_test).mean() print(f"Accuracy: {accuracy}")
输出
这是我们为 CatBoost 中的类别特征创建的上述模型的结果:
0: learn: 0.6869753 total: 59.5ms remaining: 5.89s 1: learn: 0.6794071 total: 61.6ms remaining: 3.02s 2: learn: 0.6632128 total: 61.8ms remaining: 2s . . . 96: learn: 0.2241489 total: 83.4ms remaining: 2.58ms 97: learn: 0.2228507 total: 83.5ms remaining: 1.7ms 98: learn: 0.2215656 total: 83.7ms remaining: 845us 99: learn: 0.2202937 total: 83.9ms remaining: 0us Accuracy: 1.0