CatBoost - 核心参数

CatBoost 是一个非常有用的机器学习库,它是为需要分类和回归的应用程序创建的。您可以使用代码参数来适应您的数据集和您正在处理的特定问题。此外,为了提高模型的准确性,避免过度拟合和加速训练,您应该在模型中使用这些参数。

核心参数

CatBoost 中的核心参数是主要配置,对模型的行为和功能有重大影响。除其他外,这些参数还控制整个训练过程中的训练迭代次数、学习率、树深度和损失函数。

使用 CatBoost 时您可以控制许多参数。下面列出了一些核心参数 −

关键参数

模型在训练时学习的内部设置称为通用参数。比如决策树中的分割点和叶值都是参数。CatBoost的训练过程可以通过修改一些设置来设置。让我们看看一些重要的CatBoost参数及其功能−

  • iterations:它是增量给出的次数。每次迭代都会将一个新模型添加到集成中。

  • learning_rate:它是每次迭代的改进程度。因此,较低的学习率意味着更恒定但可能延迟的收敛。

  • depth:它是树的最大深度。更深的树允许更复杂的连接,但也可能过度拟合。

  • loss_function:此损失函数用于评估模型在训练时的表现。常见的选择有:回归的RMSE、多分类的CrossEntropy和二分类的Logloss。

  • eval_metric:训练时使用的模型性能指标。

  • random_seed:随机种子,确保重复。

常用参数

下面列出了常用参数,主要用于Python包、R包和命令行版本−

1. loss_function:

主要用于决定您正在解决什么类型的问题,例如分类或回归,以及要优化哪个指标。要使用此参数,您可以将其设置为分类的"Logloss"或回归的"RMSE"等值。

命令行 −

--loss-function

2. custom_metric:

使用 custom_metric,您可以在训练时监控额外指标。这些指标仅供参考,不用于优化模型。要使用此参数,您需要列出要跟踪的指标,但这些指标不会影响整体模型性能。

命令行 −

--custom-metric

3. eval_metric

它用于检查模型在训练时的运行情况并发现过度拟合。此指标有助于选择最佳模型。要使用此功能,您可以选择适合您问题的指标,例如分类的"准确度"。

命令行 −

--eval-metric

4. iterations:

此参数设置 CatBoost 将构建的树(迭代)数量。更多迭代可以提高准确性,但可能会增加训练时间。

命令行 −

-i, --iterations

5. learning_rate:

学习率控制模型学习的速度。值越小,准确率越高,但需要的迭代次数越多。

命令行 −

-w,--learning-rate

6. random_seed:

通过固定随机种子值,确保每次训练模型时都能获得相同的结果。

命令行 −

-r,--random-seed

7. l2_leaf_reg:

此参数添加 L2 正则化以防止过度拟合。通过增加此值,可以帮助减少过度拟合。

命令行 −

--l2-leaf-reg

8. bootstrap_type:

定义训练期间对对象权重进行采样的方法。选项包括"贝叶斯"、"伯努利"等。

命令行 −

--bootstrap-type

9. bagging_temperature:

这可调整训练期间数据采样的随机性。值越高,随机性就越强。

命令行 −

--bagging-temperature

10. subsample:

此参数控制用于训练每棵树的数据百分比。低于 1 的值仅使用一小部分数据。

命令行 −

--subsample

11.depth:

树的深度决定了模型的复杂程度。更深的树可以模拟更复杂的模式,但可能会导致过度拟合。

命令行 −

-n,--depth

12. grow_policy:

定义生长树的策略。可以根据问题和数据集选择不同的策略。

命令行 −

--grow-policy

13. min_data_in_leaf:

这设置了叶子中必须存在的最小数据点数。它有助于防止小样本分裂,从而避免过度拟合。

命令行 −

--min-data-in-leaf

14. max_leaves:

此参数控制树中叶子的最大数量。它仅用于特定的树生长策略。

命令行 −

--max-leaves

15. ignore_features:

您可以通过指定其索引或名称从模型中排除某些特征。如果某些特征不相关,这将很有用。

命令行 −

-I,--ignore-features

16. one_hot_max_size:

此参数将独热编码应用于具有少量唯一值(低于指定限制)的分类特征。

命令行 −

--one-hot-max-size

17. class_weights:

此参数允许您为不同的类别分配不同的权重,当数据不平衡(一个类别的示例少得多)时尤其有用。

命令行 −

--class-weights

使用常用参数的 CatBoost 示例

以下是如何使用一些常用参数构建 CatBoost 模型的示例。此 Python 代码示例展示了如何使用这些参数 −

# 导入必要的库
from catboost import CatBoostClassifier
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
from sklearn.metrics import accuracy_score

# 加载 Iris 数据集作为示例
data = load_iris()
X = data['data']
y = data['target']

# 将数据拆分为训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# 使用通用参数初始化 CatBoostClassifier
model = CatBoostClassifier(
    # 树的数量
    iterations=100,
    # 学习率
    learning_rate=0.1,
    # 树的深度
    depth=6,
    # 多类分类的损失函数
    loss_function='MultiClass',
    # 评估性能的指标
    eval_metric='Accuracy',
    # 用于可重复性的随机种子
    random_seed=42,
    # L2 正则化以防止过度拟合
    l2_leaf_reg=3.0,
    # bagging 的 Bootstrap 方法
    bootstrap_type='Bernoulli',
    # 静默模式,无训练输出
    verbose=False             
)

# 训练模型
model.fit(X_train, y_train, eval_set=(X_test, y_test))

# 进行预测
y_pred = model.predict(X_test)

# 评估模型
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy:.4f}')

输出

这将生成以下结果:

Accuracy: 1.0000