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