CartLearner
CartLearner ¶
CartLearner(
label: str,
task: Task = CLASSIFICATION,
*,
weights: Optional[str] = None,
ranking_group: Optional[str] = None,
uplift_treatment: Optional[str] = None,
features: Optional[ColumnDefs] = None,
include_all_columns: bool = False,
max_vocab_count: int = 2000,
min_vocab_frequency: int = 5,
discretize_numerical_columns: bool = False,
num_discretized_numerical_bins: int = 255,
max_num_scanned_rows_to_infer_semantic: int = 100000,
max_num_scanned_rows_to_compute_statistics: int = 100000,
data_spec: Optional[DataSpecification] = None,
extra_training_config: Optional[TrainingConfig] = None,
allow_na_conditions: bool = False,
categorical_algorithm: str = "CART",
categorical_set_split_greedy_sampling: float = 0.1,
categorical_set_split_max_num_items: int = -1,
categorical_set_split_min_item_frequency: int = 1,
growing_strategy: str = "LOCAL",
honest: bool = False,
honest_fixed_separation: bool = False,
honest_ratio_leaf_examples: float = 0.5,
in_split_min_examples_check: bool = True,
keep_non_leaf_label_distribution: bool = True,
max_depth: int = 16,
max_num_nodes: Optional[int] = None,
maximum_model_size_in_memory_in_bytes: float = -1.0,
maximum_training_duration_seconds: float = -1.0,
mhld_oblique_max_num_attributes: Optional[int] = None,
mhld_oblique_sample_attributes: Optional[bool] = None,
min_examples: int = 5,
missing_value_policy: str = "GLOBAL_IMPUTATION",
num_candidate_attributes: Optional[int] = -1,
num_candidate_attributes_ratio: Optional[float] = None,
numerical_vector_sequence_num_examples: int = 1000,
numerical_vector_sequence_num_random_anchors: int = 100,
pure_serving_model: bool = False,
random_seed: int = 123456,
sorting_strategy: str = "IN_NODE",
sparse_oblique_max_num_features: Optional[int] = None,
sparse_oblique_max_num_projections: Optional[
int
] = None,
sparse_oblique_normalization: Optional[str] = None,
sparse_oblique_num_projections_exponent: Optional[
float
] = None,
sparse_oblique_projection_density_factor: Optional[
float
] = None,
sparse_oblique_weights: Optional[str] = None,
sparse_oblique_weights_integer_maximum: Optional[
int
] = None,
sparse_oblique_weights_integer_minimum: Optional[
int
] = None,
sparse_oblique_weights_power_of_two_max_exponent: Optional[
int
] = None,
sparse_oblique_weights_power_of_two_min_exponent: Optional[
int
] = None,
split_axis: str = "AXIS_ALIGNED",
uplift_min_examples_in_treatment: int = 5,
uplift_split_score: str = "KULLBACK_LEIBLER",
validation_ratio: float = 0.1,
working_dir: Optional[str] = None,
num_threads: Optional[int] = None,
tuner: Optional[AbstractTuner] = None,
feature_selector: Optional[
AbstractFeatureSelector
] = None,
explicit_args: Optional[Set[str]] = None
)
基类: GenericCCLearner
Cart 学习算法。
CART(分类与回归树)是一种决策树。非叶节点包含条件(也称为分裂),而叶节点包含预测值。训练数据集分为两部分。第一部分用于构建树,第二部分用于修剪树。
使用示例
import ydf
import pandas as pd
dataset = pd.read_csv("project/dataset.csv")
model = ydf.CartLearner().train(dataset)
print(model.describe())
超参数已配置为对典型数据集提供合理的结果。超参数也可以手动修改(参见下面的描述),或通过应用 CartLearner.hyperparameter_templates()
中提供的超参数模板(详细信息请参阅此函数的文档)。
属性
名称 | 类型 | 描述 |
---|---|---|
label |
数据集的标签。标签列不应在 |
|
task |
要解决的任务(例如 Task.CLASSIFICATION, Task.REGRESSION, Task.RANKING, Task.CATEGORICAL_UPLIFT, Task.NUMERICAL_UPLIFT)。 |
|
weights |
标识每个样本权重的特征名称。如果未指定权重,则假定单位权重。权重列不应在 |
|
ranking_group |
仅适用于 |
|
uplift_treatment |
仅适用于 |
|
features |
如果为 None,则所有列都用作特征。特征的语义会自动确定。否则,如果 include_all_columns=False(默认),则仅导入 |
|
include_all_columns |
参见 |
|
max_vocab_count |
存储为字符串的 CATEGORICAL 和 CATEGORICAL_SET 列的词汇表最大大小。如果存在更多唯一值,则仅保留最频繁的值,其余值被视为词汇外 (out-of-vocabulary)。 |
|
min_vocab_frequency |
CATEGORICAL 和 CATEGORICAL_SET 列中值的最小出现次数。出现次数少于 |
|
discretize_numerical_columns |
如果为 true,则在训练前对所有数值列进行离散化。离散化后的数值列训练速度更快,但可能会对模型质量产生负面影响。使用 |
|
num_discretized_numerical_bins |
对数值列进行离散化时使用的 bin 数量。 |
|
max_num_scanned_rows_to_infer_semantic |
在未明确指定列语义时,扫描多少行来推断其语义。仅在从文件读取时使用,内存中的数据集总是完整读取。将其设置为较小的值会加快数据集读取速度,但可能导致不正确的列语义。设置为 -1 扫描整个数据集。 |
|
max_num_scanned_rows_to_compute_statistics |
在计算列统计信息时扫描多少行。仅在从文件读取时使用,内存中的数据集总是完整读取。列的统计信息包括类别特征的字典和数值特征的均值/最小值/最大值。将其设置为较小的值会加快数据集读取速度,但会使 dataspec 中的统计信息失真,这可能会损害模型质量(例如,如果类别特征的一个重要类别被视为 OOV)。设置为 -1 扫描整个数据集。 |
|
data_spec |
要使用的数据规范 (dataspec)(高级)。如果提供了数据规范,则 |
|
extra_training_config |
训练配置 proto(高级)。如果设置,此训练配置 proto 将与学习器隐式定义的配置合并。可用于设置未作为构造函数参数公开的内部或高级参数。extra_training_config 中的参数优先于构造函数参数。 |
|
allow_na_conditions |
如果为 true,树训练会评估 |
|
categorical_algorithm |
如何学习类别属性上的分裂。- |
|
categorical_set_split_greedy_sampling |
用于类别集合分裂,例如文本。一个类别值成为正向集合候选的概率。采样应用于每个节点一次(即并非贪婪优化的每一步)。默认值:0.1。 |
|
categorical_set_split_max_num_items |
用于类别集合分裂,例如文本。项目(采样前)的最大数量。如果项目数量较多,则忽略出现频率最低的项目。更改此值类似于在加载数据集之前更改“max_vocab_count”,但有一个例外:使用 |
|
categorical_set_split_min_item_frequency |
用于类别集合分裂,例如文本。考虑一个项目的最小出现次数。默认值:1。 |
|
growing_strategy |
如何生长树。- |
|
honest |
在 honest 树中,使用不同的训练样本来推断结构和叶节点值。这种正则化技术用样本换取偏差估计。它可能会提高或降低模型质量。参见 Athey 等人的“广义随机森林”。在该论文中,Honest 树使用不放回采样 (sampling without replacement) 的随机森林算法进行训练。默认值:False。 |
|
honest_fixed_separation |
仅适用于 honest 树,即 honest=true。如果为 true,则为每棵树生成一个新的随机分离。如果为 false,则所有树使用相同的分离(例如,在包含多棵树的梯度提升树中)。默认值:False。 |
|
honest_ratio_leaf_examples |
仅适用于 honest 树,即 honest=true。用于设置叶节点值的样本比例。默认值:0.5。 |
|
in_split_min_examples_check |
是在分裂搜索中检查 |
|
keep_non_leaf_label_distribution |
是否保留非叶节点的节点值(即训练样本标签的分布)。此信息在服务期间不使用,但可用于模型解释和超参数调优。这会占用大量空间,有时可占模型大小的一半。默认值:True。 |
|
max_depth |
树的最大深度。 |
|
max_num_nodes |
树中的最大节点数。设置为 -1 可禁用此限制。仅适用于 |
|
maximum_model_size_in_memory_in_bytes |
限制模型存储在内存中的大小。不同的算法可能会以不同的方式强制执行此限制。请注意,当模型编译成推理引擎时,推理引擎的大小通常比原始模型小得多。默认值:-1.0。 |
|
maximum_training_duration_seconds |
模型的最大训练时长,以秒为单位。每个学习算法可以根据需要自由使用此参数。启用最大训练时长会使模型训练变得不确定。默认值:-1.0。 |
|
mhld_oblique_max_num_attributes |
用于 MHLD 斜向分裂,即 |
|
mhld_oblique_sample_attributes |
用于 MHLD 斜向分裂,即 |
|
min_examples |
一个节点中的最小样本数。默认值:5。 |
|
missing_value_policy |
处理缺失属性值的方法。- |
|
num_candidate_attributes |
每个节点测试的唯一有效属性数量。如果一个属性至少有一个有效分裂,则该属性有效。如果 |
|
num_candidate_attributes_ratio |
每个节点测试的属性比例。如果设置,则等同于 |
|
numerical_vector_sequence_num_examples |
对于具有 NUMERICAL_VECTOR_SEQUENCE 特征的数据集(即固定大小数值向量的序列)。用于寻找分裂的最大样本数量。较大的值可以提高模型质量,但训练时间更长。默认值:1000。 |
|
numerical_vector_sequence_num_random_anchors |
对于具有 NUMERICAL_VECTOR_SEQUENCE 特征的数据集(即固定大小数值向量的序列)。随机生成的锚点值的数量。较大的值可以提高模型质量,但训练时间更长。默认值:100。 |
|
pure_serving_model |
清除模型中任何模型服务不需要的信息。这包括调试、模型解释及其他元数据。序列化模型的大小可显著减小(模型大小减少 50% 很常见)。此参数对模型服务的质量、服务速度或 RAM 使用没有影响。默认值:False。 |
|
random_seed |
模型训练的随机种子。学习器应由随机种子决定性地运行。默认值:123456。 |
|
sorting_strategy |
如何对数值特征进行排序以寻找分裂 - AUTO:在 IN_NODE、FORCE_PRESORT 和 LAYER 中选择最有效的方法。- IN_NODE:特征在节点中使用前才进行排序。该方案速度慢,但内存消耗少。- FORCE_PRESORT:特征在训练开始时预排序。该方案速度快,但比 IN_NODE 消耗更多内存。- PRESORT:自动选择 FORCE_PRESORT 和 IN_NODE。默认值:“IN_NODE”。 |
|
sparse_oblique_max_num_features |
用于稀疏斜向分裂,即 |
|
sparse_oblique_max_num_projections |
用于稀疏斜向分裂,即 |
|
sparse_oblique_normalization |
用于稀疏斜向分裂,即 |
|
sparse_oblique_num_projections_exponent |
用于稀疏斜向分裂,即 |
|
sparse_oblique_projection_density_factor |
投影密度作为特征数量的指数。对于每个投影,每个特征独立地有“projection_density_factor / num_features”的概率被考虑在投影中。论文“Sparse Projection Oblique Random Forests”(Tomita 等人,2020 年)将此参数称为 |
|
sparse_oblique_weights |
用于稀疏斜向分裂,即 可能的值:- |
|
sparse_oblique_weights_integer_maximum |
用于稀疏斜向分裂,即 |
|
sparse_oblique_weights_integer_minimum |
用于稀疏斜向分裂,即 |
|
sparse_oblique_weights_power_of_two_max_exponent |
用于稀疏斜向分裂,即 |
|
sparse_oblique_weights_power_of_two_min_exponent |
用于稀疏斜向分裂,即 |
|
split_axis |
对数值特征考虑哪种分裂结构。- |
|
uplift_min_examples_in_treatment |
仅适用于提升模型。节点中每个处理类型的最小样本数。默认值:5。 |
|
uplift_split_score |
仅适用于提升模型。分裂器得分,即分裂器优化的得分。这些得分在 Rzepakowski 等人的论文“用于单处理和多处理提升建模的决策树”中介绍。符号: |
|
validation_ratio |
用于创建验证数据集以修剪树的训练数据集比例。如果设置为 0,则整个数据集用于训练,并且不修剪树。默认值:0.1。 |
|
working_dir |
学习算法可用于存储中间计算结果的目录路径。根据学习算法和参数的不同,working_dir 可能是可选的、必需的或被忽略。例如,分布式训练算法总是需要“working_dir”,如果提供了“working_dir”,梯度提升树和超参数调优器将导出工件到该目录。 |
|
num_threads |
用于训练模型的线程数。不同的学习算法使用多线程的方式和效率各不相同。如果为 |
|
tuner |
如果设置,则使用提供的调优器自动选择最佳超参数。使用分布式训练时,调优也是分布式的。 |
|
feature_selector |
如果设置,则使用指定的特征选择器通过自动化特征选择来自动选择模型的输入特征。 |
|
explicit_args |
用于内部使用的辅助参数。如果用户明确提供,则抛出错误。 |
hyperparameters property
¶
此学习器的(可变)超参数字典。
此对象可用于创建学习器后检查或修改超参数。在构建学习器后修改超参数适用于某些高级用例。由于这种方法绕过了对给定超参数集的一些可行性检查,因此通常最好为每个模型重新创建学习器。可以使用 validate_hyperparameters()
手动验证当前的超参数集。
cross_validation ¶
cross_validation(
ds: InputDataset,
folds: int = 10,
bootstrapping: Union[bool, int] = False,
parallel_evaluations: int = 1,
) -> Evaluation
hyperparameter_templates classmethod
¶
train ¶
train(
ds: InputDataset,
valid: Optional[InputDataset] = None,
verbose: Optional[Union[int, bool]] = None,
) -> RandomForestModel
在给定数据集上训练模型。
数据集读取选项在学习器上给出。有关 YDF 中数据集读取的更多信息,请查阅学习器或 ydf.create_vertical_dataset() 的文档。
使用示例
import ydf
import pandas as pd
train_ds = pd.read_csv(...)
learner = ydf.CartLearner(label="label")
model = learner.train(train_ds)
print(model.summary())
如果训练中断(例如,通过中断 Colab 中的单元格执行),模型将恢复到中断时的状态。
参数
名称 | 类型 | 描述 | 默认值 |
---|---|---|---|
ds
|
InputDataset
|
训练数据集。 |
必需 |
valid
|
Optional[InputDataset]
|
可选的验证数据集。某些学习器(例如 Random Forest)不需要验证数据集。某些学习器(例如 GradientBoostedTrees)如果在未提供验证数据集时会自动从训练数据集中提取验证数据集。 |
None
|
verbose
|
Optional[Union[int, bool]]
|
训练期间的详细程度。如果为 None,则使用 |
None
|
返回值
类型 | 描述 |
---|---|
RandomForestModel
|
训练好的模型。 |