跳转至

⛄ grid_search

这篇文章介绍了 CatBoost 中 grid_search 方法的使用方法,该方法用于在指定参数范围内搜索最佳模型参数。1

方法调用格式

grid_search(param_grid,
            X,
            y=None,
            cv=3,
            partition_random_seed=0,
            calc_cv_statistics=True,
            search_by_train_test_split=True,
            refit=True,
            shuffle=True,
            stratified=None,
            train_size=0.8,
            verbose=True,
            plot=False,
            log_cout=sys.stdout,
            log_cerr=sys.stderr)

参数说明

param_grid

  • 描述: 包含参数名称(字符串)作为键,以及要尝试的参数设置列表作为值的字典,或者包含此类字典的列表,在这种情况下,将探索每个字典中跨越的网格。这使得能够搜索任何参数设置序列。
  • 可能类型: dictlist
  • 默认值: 必填参数 1

X

  • 描述: 输入训练数据集。
  • 可能类型:
    • catboost.Pool:输入训练数据集。注意,如果在该类的构造函数中指定了非平凡的 cat_features 参数值,CatBoost 会检查构造函数参数中指定的分类特征索引与该 Pool 类中的索引是否一致。
    • numpy.ndarraypandas.DataFrame:输入训练数据集,以二维特征矩阵的形式。
    • pandas.SparseDataFramescipy.sparse.spmatrix(除 dia_matrix 以外的所有子类):输入训练数据集,以二维稀疏特征矩阵的形式。
  • 默认值: 必填参数 1

y

  • 描述: 训练数据集的目标变量(换句话说,对象的标签值)。必须以一维或二维数组的形式。数组中的数据类型取决于要解决的机器学习任务:
  • 回归和排序:一维数值数组。
  • 多元回归:二维数值数组。第一个索引用于维度,第二个索引用于对象。
  • 二元分类:包含以下内容之一的一维数组:
    • 布尔值、整数或字符串,表示类的标签(只有两个唯一值)。
    • 数值。数值的解释取决于所选的损失函数:
    • Logloss:如果严格大于 target_border 训练参数的值,则该值被视为正类。否则,它被视为负类。
    • CrossEntropy:该值被解释为数据集对象属于正类的概率。可能的值在 [0; 1] 范围内。
  • 多分类:一维整数或字符串数组,表示类的标签。
  • 多标签分类:二维数组。第一个索引用于标签/类,第二个索引用于对象。可能的值取决于所选的损失函数:
    • MultiLogloss:仅允许 {0, 1} 或 {False, True} 值,指定对象是否属于对应于第一个索引的类。
    • MultiCrossEntropy:范围在 [0; 1] 内的数值,被解释为数据集对象属于对应于第一个索引的类的概率。
  • 可能类型: listnumpy.ndarraypandas.DataFramepandas.Series
  • 默认值: None
  • 注意: 如果输入训练数据集(在 X 参数中指定)的类型为 catboost.Pool,则不要使用此参数。 1

cv

  • 描述: 交叉验证拆分策略。此参数的解释取决于输入数据类型:
  • None:使用默认的三折交叉验证。
  • int:交叉验证中的折数。
  • (Stratified)KFold 对象:scikit-learn 拆分器类之一,具有 split 方法。
  • 可迭代对象,生成训练和测试拆分作为索引数组。
  • 可能类型: intscikit-learn splitter objectcross-validation generator iterable
  • 默认值: None 1

partition_random_seed

  • 描述: 将此作为数据随机排列的种子值。排列在拆分数据进行交叉验证之前执行。每个种子生成唯一的拆分。
  • 可能类型: int
  • 默认值: 0 1

calc_cv_statistics

  • 描述: 使用交叉验证和找到的最佳参数来估计质量。模型使用这些参数进行拟合。如果 search_by_train_test_split 参数设置为 True,则可以启用此选项。
  • 可能类型: bool
  • 默认值: True 1

search_by_train_test_split

  • 描述: 将源数据集拆分为训练和测试部分。模型在训练部分上进行训练,而参数通过测试数据集上的损失函数得分进行比较。建议对大型数据集启用此选项,而对小型数据集禁用此选项。
  • 可能类型: bool
  • 默认值: True 1

refit

  • 描述: 使用找到的最佳参数在整个数据集上重新拟合估计器。
  • 可能类型: bool
  • 默认值: True 1

shuffle

  • 描述: 打乱数据集对象。
  • 可能类型: bool
  • 默认值: True 1

stratified

  • 描述: 是否对数据进行分层采样。
  • 可能类型: bool
  • 默认值: None 1

train_size

  • 描述: 训练集的大小。
  • 可能类型: float
  • 默认值: 0.8 1

verbose

  • 描述: 启用详细输出。
  • 可能类型: bool
  • 默认值: True 1

plot

  • 描述: 是否绘制结果。
  • 可能类型: bool
  • 默认值: False 1

log_cout

  • 描述: 用于输出标准 C++ 流的对象。
  • 可能类型: object
  • 默认值: sys.stdout 1

log_cerr

  • 描述: 用于输出错误 C++ 流的对象。
  • 可能类型: object
  • 默认值: sys.stderr 1

返回值类型

grid_search 方法返回一个 catboost.CatBoostModel 对象,该对象已使用找到的最佳参数进行拟合。 1

示例

from catboost import CatBoost
import numpy as np

train_data = np.random.randint(1, 100, size=(100, 10))
train_labels = np.random.randint(2, size=100)

model = CatBoost()

grid = {'learning_rate': [0.03, 0.1],
        'depth': [4, 6, 10],
        'l2_leaf_reg': [1, 3, 5, 7, 9]}

grid_search_result = model.grid_search(grid,
                                       X=train_data,
                                       y=train_labels,
                                       plot=True)
model.get_params()

这个示例展示了如何使用 grid_search 方法在指定参数范围内搜索最佳模型参数。 1