IsolationForest#

class sklearn.ensemble.IsolationForest(*, n_estimators=100, max_samples='auto', contamination='auto', max_features=1.0, bootstrap=False, n_jobs=None, random_state=None, verbose=0, warm_start=False)[源代码]#

隔离森林算法。

使用IsolationForest算法返回每个样本的异常评分

IsolationForest通过随机选择一个要素,然后随机选择所选要素的最大值和最小值之间的拆分值来“隔离”观察结果。

由于递归分割可以用树结构表示,因此隔离样本所需的分割次数等于从根节点到终止节点的路径长度。

这个路径长度在一片此类随机树的森林中平均,是正常性的衡量标准和我们的决策函数。

随机划分会显著缩短异常路径。因此,当随机树的森林共同产生特定样本的较短路径长度时,它们极有可能是异常。

阅读更多的 User Guide .

Added in version 0.18.

参数:
n_estimatorsint,默认=100

集合中基本估计量的数量。

max_samples“Auto”,int或float,默认=“Auto”

从X提取以训练每个基本估计器的样本数。

  • 如果是int,那么画 max_samples 样品

  • 如果是浮动的,那就画画 max_samples * X.shape[0] 样品

  • 如果“自动”,那么 max_samples=min(256, n_samples) .

如果max_samples大于提供的样本数量,则所有样本将用于所有树(不采样)。

contamination“Auto”或float,默认=“Auto”

数据集的污染量,即数据集中异常值的比例。在匹配时用于定义样本分数的阈值。

  • 如果是“自动”,则阈值按照原始论文中的方式确定。

  • 如果漂浮,污染物应在(0,0.5]范围内。

在 0.22 版本发生变更: 的默认值 contamination 从0.1改为 'auto' .

max_featuresint或float,默认值为1.0

从X提取以训练每个基本估计器的特征数量。

  • 如果是int,那么画 max_features 功能.

  • 如果是浮动的,那就画画 max(1, int(max_features * n_features_in_)) 功能.

注意:使用小于1.0的浮点数或小于特征数量的整数将启用特征子采样并导致更长的运行时间。

bootstrap布尔,默认=假

如果为True,则将单个树与用替换采样的训练数据的随机子集进行匹配。如果为假,则执行不更换的抽样。

n_jobsint,默认=无

并行运行的作业数量 fit . None 意思是1,除非在a中 joblib.parallel_backend 上下文 -1 意味着使用所有处理器。看到 Glossary 了解更多详细信息。

random_stateint,RandomState实例或无,默认=无

控制森林中每个分支步骤和每棵树的要素和拆分值选择的伪随机性。

传递int以获得跨多个函数调用的可重复结果。看到 Glossary .

verboseint,默认=0

控制树构建过程的详细程度。

warm_start布尔,默认=假

如果设置为 True ,重复使用上一次调用的解决方案来适应并向集合添加更多估计量,否则,只适合一个全新的森林。看到 the Glossary .

Added in version 0.21.

属性:
estimator_ : ExtraTreeRegressor 例如ExtraTreeRegressor实例

用于创建匹配子估计量集合的子估计量模板。

Added in version 1.2: base_estimator_ 更名为 estimator_ .

estimators_ExtraTreeRegressor实例列表

拟合子估计量的集合。

estimators_features_ndray列表

每个基本估计器的绘制特征子集。

estimators_samples_ndray列表

为每个基本估计量绘制的样本的子集。

max_samples_int

The actual number of samples.

offset_浮子

用于根据原始分数定义决策函数的偏差。我们有这样的关系: decision_function = score_samples - offset_ . offset_ 定义如下。当污染参数设置为“自动”时,由于内值的分数接近0,异常值的分数接近-1,因此偏差等于-0.5。当提供不同于“Auto”的污染参数时,以这样的方式定义偏差:我们在训练中获得期望数量的离群值(决策函数< 0的样本)。

Added in version 0.20.

n_features_in_int

期间看到的功能数量 fit .

Added in version 0.24.

feature_names_in_ :nd形状数组 (n_features_in_ ,)nd数组形状(

Names of features seen during fit. Defined only when X has feature names that are all strings.

Added in version 1.0.

参见

sklearn.covariance.EllipticEnvelope

用于检测高斯分布数据集中异常值的对象。

sklearn.svm.OneClassSVM

无监督离群点检测。估计多维分布的支持。该实现基于libsvm。

sklearn.neighbors.LocalOutlierFactor

使用本地异常值因子(LOF)的无监督异常值检测。

注意到

该实现基于ExtraTreeRegressor的集成。每棵树的最大深度设置为 ceil(log_2(n)) 哪里 \(n\) 是用于构建树的样本数量(参见(Liu等人,2008年)了解更多详细信息)。

引用

[1]

刘、飞托尼、丁、启明和周志华。“隔离森林。数据挖掘,2008年。ICDM'08。第八届IEEE国际会议。

[2]

刘、飞托尼、丁、启明和周志华。“基于隔离的异常检测。' ASM关于从数据发现知识的交易(TKDD)6.1(2012):3。

示例

>>> from sklearn.ensemble import IsolationForest
>>> X = [[-1.1], [0.3], [0.5], [100]]
>>> clf = IsolationForest(random_state=0).fit(X)
>>> clf.predict([[0.1], [0], [90]])
array([ 1,  1, -1])

有关使用隔离林进行异常检测的示例,请参阅 隔离森林示例 .

decision_function(X)[源代码]#

基本分类器X的平均异常分数。

输入样本的异常分数被计算为森林中树木的平均异常分数。

给定一棵树的观测值的正态性度量是包含该观测值的叶子的深度,它相当于隔离该点所需的分裂次数。如果叶中有多个观测值n_left,则添加n_left样本隔离树的平均路径长度。

参数:
X形状(n_samples,n_features)的{类数组,稀疏矩阵}

输入样本。在内部,它将被转换为 dtype=np.float32 并且如果将稀疏矩阵提供给稀疏矩阵 csr_matrix .

返回:
scores形状的nd数组(n_samples,)

输入样本的异常评分。越低,越不正常。负分数代表离群值,正分数代表内值。

注意到

decision_index方法可以通过设置jobib上下文来并行化。这本质上并不使用 n_jobs 在类中初始化的参数,该参数在期间使用 fit .这是因为,对于少量样本(例如1000个或更少的样本),计算分数实际上可能会更快。用户可以设置jobib上下文中的作业数量来控制并行作业的数量。

from joblib import parallel_backend

# Note, we use threading here as the decision_function method is
# not CPU bound.
with parallel_backend("threading", n_jobs=4):
    model.decision_function(X)
fit(X, y=None, sample_weight=None)[源代码]#

拟合估计量。

参数:
X形状(n_samples,n_features)的{类数组,稀疏矩阵}

输入样本。使用 dtype=np.float32 以获得最大效率。还支持稀疏矩阵,使用稀疏 csc_matrix 以获得最大效率。

y忽视

未使用,按照惯例,为了API一致性而存在。

sample_weight形状类似数组(n_samples,),默认=无

样本重量。如果无,则样本的加权相等。

返回:
self对象

拟合估计量。

fit_predict(X, y=None, **kwargs)[源代码]#

在X上执行fit并返回X的标签。

异常值返回-1,内值返回1。

参数:
X形状(n_samples,n_features)的{类数组,稀疏矩阵}

输入样本。

y忽视

未使用,按照惯例,为了API一致性而存在。

**kwargsdict

将传递给的论点 fit .

Added in version 1.4.

返回:
y形状的nd数组(n_samples,)

1代表内部值,-1代表异常值。

get_metadata_routing()[源代码]#

获取此对象的元数据路由。

请检查 User Guide 关于路由机制如何工作。

Added in version 1.5.

返回:
routingMetadataRouter

A MetadataRouter 封装路由信息。

get_params(deep=True)[源代码]#

获取此估计器的参数。

参数:
deep布尔,默认=True

如果为True,将返回此估计量和包含的作为估计量的子对象的参数。

返回:
paramsdict

参数名称映射到其值。

predict(X)[源代码]#

预测特定样本是否为离群值。

参数:
X形状(n_samples,n_features)的{类数组,稀疏矩阵}

输入样本。在内部,它将被转换为 dtype=np.float32 并且如果将稀疏矩阵提供给稀疏矩阵 csr_matrix .

返回:
is_inlier形状的nd数组(n_samples,)

对于每个观察结果,告诉是否(+1或-1)应根据匹配模型将其视为内点。

注意到

预测方法可以通过设置作业上下文来并行化。这本质上并不使用 n_jobs 在类中初始化的参数,该参数在期间使用 fit .这是因为,对于少量样本(例如1000个或更少的样本),预测实际上可能会更快。用户可以设置joblib上下文中的作业数量以控制并行作业的数量。

from joblib import parallel_backend

# Note, we use threading here as the predict method is not CPU bound.
with parallel_backend("threading", n_jobs=4):
    model.predict(X)
score_samples(X)[源代码]#

与原始论文中定义的异常分数相反。

输入样本的异常分数被计算为森林中树木的平均异常分数。

给定一棵树的观测值的正态性度量是包含该观测值的叶子的深度,它相当于隔离该点所需的分裂次数。如果叶中有多个观测值n_left,则添加n_left样本隔离树的平均路径长度。

参数:
X形状(n_samples,n_features)的{类数组,稀疏矩阵}

输入样本。

返回:
scores形状的nd数组(n_samples,)

输入样本的异常评分。越低,越不正常。

注意到

可以通过设置jobib上下文来并行化分数函数方法。这本质上并不使用 n_jobs 在类中初始化的参数,该参数在期间使用 fit .这是因为,对于少量样本(例如1000个或更少的样本),计算分数实际上可能会更快。用户可以设置jobib上下文中的作业数量来控制并行作业的数量。

from joblib import parallel_backend

# Note, we use threading here as the score_samples method is not CPU bound.
with parallel_backend("threading", n_jobs=4):
    model.score(X)
set_fit_request(*, sample_weight: bool | None | str = '$UNCHANGED$') IsolationForest[源代码]#

请求元数据传递给 fit

请注意,此方法仅适用于以下情况 enable_metadata_routing=True (见 sklearn.set_config ).请参阅 User Guide 关于路由机制如何工作。

The options for each parameter are:

  • True :元数据被请求并传递给 fit 如果提供的话。如果未提供元数据,则会忽略请求。

  • False :未请求元数据,元估计器不会将其传递给 fit .

  • None :不请求元数据,如果用户提供元估计器,则元估计器将引发错误。

  • str :元数据应通过此给定别名而不是原始名称传递给元估计器。

默认 (sklearn.utils.metadata_routing.UNCHANGED )保留现有请求。这允许您更改某些参数的请求,而不是其他参数。

Added in version 1.3.

备注

只有当该估计器用作元估计器的子估计器时,该方法才相关,例如在 Pipeline .否则就没有效果了。

参数:
sample_weight字符串、真、假或无, 默认=sklearn.utils. metalics_Routing.UNChanged

元数据路由 sample_weight 参数 fit .

返回:
self对象

更新的对象。

set_params(**params)[源代码]#

设置此估计器的参数。

该方法适用于简单估计器以及嵌套对象(例如 Pipeline ).后者具有以下形式的参数 <component>__<parameter> 以便可以更新嵌套对象的每个组件。

参数:
**paramsdict

估计参数。

返回:
self估计器实例

估计实例。