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

