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

用于检查模型在训练时的运行情况以及查找过拟合。此指标有助于选择最佳模型。您可以选择适合您问题的指标,例如分类的“Accuracy”。

命令行:

--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

定义训练期间对对象权重进行采样的方法。选项包括“Bayesian”、“Bernoulli”等。

命令行:

--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. ignored_features

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

命令行:

-I, --ignore-features

16. one_hot_max_size

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

命令行:

--one-hot-max-size

17. class_weights

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

命令行:

--class-weights

使用常用参数的 CatBoost 示例

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

# Import the necessary libraries
from catboost import CatBoostClassifier
from sklearn.model_selection import train_test_split
from sklearn.datasets import load_iris
from sklearn.metrics import accuracy_score

# Load the Iris dataset as an example
data = load_iris()
X = data['data']
y = data['target']

# Split the data into training and testing sets
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)

# Initialize CatBoostClassifier with common parameters
model = CatBoostClassifier(
   # Number of trees 
   iterations=100,              
   # Learning rate
   learning_rate=0.1,           
   # Depth of the trees
   depth=6,                     
   # Loss function for multi-class classification
   loss_function='MultiClass',  
   # Metric for evaluating performance
   eval_metric='Accuracy',      
   # Random seed for reproducibility
   random_seed=42,              
   # L2 regularization to prevent overfitting
   l2_leaf_reg=3.0,             
   # Bootstrap method for bagging
   bootstrap_type='Bernoulli',   
   # Silent mode, no training output
   verbose=False                 
)

# Train the model
model.fit(X_train, y_train, eval_set=(X_test, y_test))

# Make predictions
y_pred = model.predict(X_test)

# Evaluate the model
accuracy = accuracy_score(y_test, y_pred)
print(f'Accuracy: {accuracy:.4f}')

输出

这将生成以下结果

Accuracy: 1.0000
广告