跳到内容

IsolationForestLearner

IsolationForestLearner

IsolationForestLearner(
    label: Optional[str] = None,
    task: Task = ANOMALY_DETECTION,
    *,
    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,
    max_depth: int = -2,
    min_examples: int = 5,
    num_trees: int = 300,
    pure_serving_model: bool = False,
    random_seed: int = 123456,
    sparse_oblique_max_num_features: Optional[int] = None,
    sparse_oblique_normalization: Optional[str] = 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",
    subsample_count: Optional[int] = 256,
    subsample_ratio: Optional[float] = None,
    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

Isolation Forest 学习算法。

一种 Isolation Forest 算法是一种决策树集合,它们在没有标签的情况下独立训练,用于划分特征空间。Isolation Forest 的预测结果是一个异常分数,指示示例是否来自与训练示例相同的分布。我们将 Isolation Forest 指代 Liu 等人提出的原始算法及其扩展。

使用示例

import ydf
import pandas as pd

dataset = pd.read_csv("project/dataset.csv")

model = ydf.IsolationForestLearner().train(dataset)

print(model.describe())

超参数已配置为对典型数据集提供合理结果。超参数也可以手动修改(参见下面的描述),或通过应用 IsolationForestLearner.hyperparameter_templates() 提供的超参数模板(有关详细信息,请参阅此函数的文档)。

属性

名称 类型 描述
label

数据集的标签。标签列不应在 features 参数中被标识为特征。

task

要解决的任务(例如 Task.CLASSIFICATION, Task.REGRESSION, Task.RANKING, Task.CATEGORICAL_UPLIFT, Task.NUMERICAL_UPLIFT)。

weights

标识每个示例权重的特征名称。如果未指定权重,则假定为单位权重。权重列不应在 features 参数中被标识为特征。

ranking_group

仅适用于 task=Task.RANKING。在查询/文档排序任务中标识查询的特征名称。ranking group 不应在 features 参数中被标识为特征。

uplift_treatment

仅适用于 task=Task.CATEGORICAL_UPLIFTtask=Task.NUMERICAL_UPLIFT。标识提升问题中处理的数值特征名称。值 0 保留给对照处理。目前仅支持 0/1 二进制处理。

features

如果为 None,则所有列都用作特征。特征的语义是自动确定的。否则,如果 include_all_columns=False(默认),则仅导入 features 中列出的列。如果 include_all_columns=True,则所有列都作为特征导入,并且仅自动确定不在 columns 中的列的语义。如果指定,则定义特征的顺序 - 任何未列出的特征将在指定的特征之后按顺序附加(如果 include_all_columns=True)。标签、权重、提升处理和 ranking_group 列不应指定为特征。

include_all_columns

参见 features

max_vocab_count

存储为字符串的 CATEGORICAL 和 CATEGORICAL_SET 列词汇表的最大大小。如果存在更多唯一值,则仅保留最频繁的值,其余值被视为词汇外(out-of-vocabulary)。

min_vocab_frequency

CATEGORICAL 和 CATEGORICAL_SET 列中值的最小出现次数。出现次数少于 min_vocab_frequency 的值被视为词汇外(out-of-vocabulary)。

discretize_numerical_columns

如果为 true,则在训练前对所有数值列进行离散化。离散化的数值列训练速度更快,但可能会对模型质量产生负面影响。使用 discretize_numerical_columns=True 等同于在 column 参数中将列语义设置为 DISCRETIZED_NUMERICAL。有关更多详细信息,请参阅 DISCRETIZED_NUMERICAL 的定义。

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

要使用的数据规范(高级)。如果给定了数据规范,则将忽略 columnsinclude_all_columnsmax_vocab_countmin_vocab_frequencydiscretize_numerical_columnsnum_discretized_numerical_bins

extra_training_config

训练配置 proto(高级)。如果设置,此训练配置 proto 将与学习器隐式定义的配置合并。可用于设置未作为构造函数参数公开的内部或高级参数。extra_training_config 中的参数比构造函数参数具有更高的优先级。

max_depth

树的最大深度。max_depth=1 表示所有树都是根。max_depth=-1 表示树深不受此参数约束。max_depth=-2 表示最大深度为 log2(每棵树采样的示例数)(默认)。默认值: -2。

min_examples

节点中的最小示例数。默认值: 5。

num_trees

决策树的数量。增加树的数量可以提高模型质量,但会牺牲大小、训练速度和推理延迟。默认值: 300。

pure_serving_model

清除模型中任何与模型服务无关的信息。这包括调试、模型解释和其他元数据。序列化模型的大小可以显著减小(模型大小减小 50% 很常见)。此参数对模型服务的质量、服务速度或 RAM 使用没有影响。默认值: False。

random_seed

模型训练的随机种子。学习器应根据随机种子具有确定性。默认值: 123456。

sparse_oblique_max_num_features

用于稀疏倾斜分割,即 split_axis=SPARSE_OBLIQUE。控制分割中的最大特征数。设置为 -1 表示无最大值。仅在需要对变量数量设置硬性最大值时使用,否则优先使用 projection_density_factor 控制每个投影的特征数量。默认值: None。

sparse_oblique_normalization

用于稀疏倾斜分割,即 split_axis=SPARSE_OBLIQUE。在应用稀疏倾斜投影之前对特征应用的归一化。- NONE: 不进行归一化。- STANDARD_DEVIATION: 根据整个训练数据集上的估计标准差对特征进行归一化,也称为 Z-Score 归一化。- MIN_MAX: 根据整个训练数据集上的估计范围(即最大值-最小值)对特征进行归一化。默认值: None。

sparse_oblique_projection_density_factor

投影密度,表示为特征数量的指数。对于每个投影,每个特征都有一个概率“projection_density_factor / num_features”被考虑在投影中。论文“Sparse Projection Oblique Random Forests”(Tomita 等人,2020)将此参数称为 lambda 并建议值在 [1, 5] 之间。增加此值会增加训练和推理时间(平均)。此值最适合针对每个数据集进行调优。默认值: None。

sparse_oblique_weights

用于稀疏倾斜分割,即 split_axis=SPARSE_OBLIQUE。请注意,归一化是在权重采样后应用的,例如,仅当归一化为 NONE 时,二进制权重才保证是二进制的。

可能的值:- BINARY: 倾斜权重在 {-1,1} 中采样(默认)。- CONTINUOUS: 倾斜权重在 [-1,1] 中采样。- POWER_OF_TWO: 倾斜权重是 2 的幂。指数在 [sparse_oblique_weights_power_of_two_min_exponent, sparse_oblique_weights_power_of_two_max_exponent] 中均匀采样,符号均匀采样。- INTEGER: 权重是在范围 [sparse_oblique_weights_integer_minimum, sparse_oblique_weights_integer_maximum] 内均匀采样的整数。默认值: None。

sparse_oblique_weights_integer_maximum

用于稀疏倾斜分割,即 split_axis=SPARSE_OBLIQUE,且权重为整数,即 sparse_oblique_weights=INTEGER。权重的最大值 默认值: None。

sparse_oblique_weights_integer_minimum

用于稀疏倾斜分割,即 split_axis=SPARSE_OBLIQUE,且权重为整数,即 sparse_oblique_weights=INTEGER。权重的最小值。默认值: None。

sparse_oblique_weights_power_of_two_max_exponent

用于稀疏倾斜分割,即 split_axis=SPARSE_OBLIQUE,且权重为 2 的幂,即 sparse_oblique_weights=POWER_OF_TWO。权重的最大指数 默认值: None。

sparse_oblique_weights_power_of_two_min_exponent

用于稀疏倾斜分割,即 split_axis=SPARSE_OBLIQUE,且权重为 2 的幂,即 sparse_oblique_weights=POWER_OF_TWO。权重的最小指数 默认值: None。

split_axis

数值特征要考虑的分割结构。- AXIS_ALIGNED: 轴对齐分割(即一次一个条件)。这是训练决策树的“经典”方法。默认值。- SPARSE_OBLIQUE: 来自“Sparse Projection Oblique Random Forests”(Tomita 等人,2020)的稀疏倾斜分割(即对少量特征进行随机分割)。这包括“Extended Isolation Forests”(Sahand Hariri 等人,2018)中描述的分割。默认值: "AXIS_ALIGNED"。

subsample_count

用于生成每棵树的示例数。只能设置“subsample_ratio”和“subsample_count”之一。默认情况下,每棵树采样 256 个示例。请注意,此参数还限制了树的最大深度为 log2(每棵树使用的示例数),除非显式设置了 max_depth。默认值: 256。

subsample_ratio

用于生成每棵树的训练示例数量比例。只能设置“subsample_ratio”和“subsample_count”之一。默认情况下,每棵树采样 256 个示例。请注意,此参数还限制了树的最大深度为 log2(每棵树使用的示例数),除非显式设置了 max_depth。默认值: None。

working_dir

供学习算法存储中间计算结果的目录路径。根据学习算法和参数,working_dir 可能是可选的、必需的或被忽略。例如,分布式训练算法总是需要一个“working_dir”,并且梯度提升树和超参数调优器如果提供了“working_dir”,会将工件导出到其中。

num_threads

用于训练模型的线程数。不同的学习算法使用多线程的方式和效率不同。如果为 Nonenum_threads 将自动设置为处理器数量(最多 32 个;如果处理器数量不可用,则设置为 6)。将 num_threads 设置得远大于处理器数量可能会降低训练速度。默认值逻辑未来可能会改变。

tuner

如果设置,则使用提供的调优器自动选择最佳超参数。使用分布式训练时,调优也是分布式的。

feature_selector

如果设置,则使用指定的特征选择器自动选择模型的输入特征。

explicit_args

内部使用的辅助参数。如果用户显式提供,则抛出异常。

hyperparameters property

hyperparameters: HyperParameters

此学习器的(可变)超参数字典。

此对象可用于在创建学习器后检查或修改超参数。在构建学习器后修改超参数适用于某些高级用例。由于此方法绕过了对给定超参数集的一些可行性检查,通常最好为每个模型重新创建学习器。当前超参数集可以使用 validate_hyperparameters() 手动验证。

learner_name property

learner_name: str

capabilities classmethod

capabilities() -> LearnerCapabilities

cross_validation

cross_validation(
    ds: InputDataset,
    folds: int = 10,
    bootstrapping: Union[bool, int] = False,
    parallel_evaluations: int = 1,
) -> Evaluation

extract_input_feature_names

extract_input_feature_names(ds: InputDataset) -> List[str]

hyperparameter_templates classmethod

hyperparameter_templates() -> (
    Dict[str, HyperparameterTemplate]
)

此学习器的超参数模板。

此学习器当前不提供任何超参数模板,提供此方法是为了与其他学习器保持一致性。

返回值

类型 描述
Dict[str, HyperparameterTemplate]

空字典。

post_init

post_init()

train

train(
    ds: InputDataset,
    valid: Optional[InputDataset] = None,
    verbose: Optional[Union[int, bool]] = None,
) -> IsolationForestModel

在给定数据集上训练模型。

数据集读取选项在学习器上给出。有关 YDF 中数据集读取的更多信息,请查阅学习器或 ydf.create_vertical_dataset() 的文档。

使用示例

import ydf
import pandas as pd

train_ds = pd.read_csv(...)

learner = ydf.IsolationForestLearner(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,则使用 ydf.verbose 的全局详细程度。级别包括:0 或 False:无日志,1 或 True:在 Notebook 中打印少量日志;在终端中打印所有日志。2:在所有界面上打印所有日志。

None

返回值

类型 描述
IsolationForestModel

一个已训练的模型。

train_imp

train_imp(
    ds: InputDataset,
    valid: Optional[InputDataset],
    verbose: Optional[Union[int, bool]],
) -> ModelType

validate_hyperparameters

validate_hyperparameters() -> None