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

Isolation Forest Algorithm.

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

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

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

这个路径长度,在一组随机树的森林中平均,是正常性的度量,也是我们的决策函数。

随机分区明显为异常生成更短的路径。因此,当一组随机树共同为特定样本生成较短的路径长度时,它们很可能是异常。

更多信息请参阅 用户指南

Added in version 0.18.

Parameters:
n_estimatorsint, default=100

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

max_samples“auto”, int or float, default=”auto”
从X中抽取的样本数量,用于训练每个基本估计器。
  • 如果是int,则抽取 max_samples 个样本。

  • 如果是float,则抽取 max_samples * X.shape[0] 个样本。

  • 如果是”auto”,则 max_samples=min(256, n_samples)

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

contamination‘auto’ or float, default=’auto’

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

  • 如果是’auto’,阈值的确定方式与原始论文相同。

  • 如果是float,污染量应在(0, 0.5]范围内。

Changed in version 0.22: contamination 的默认值从0.1改为 'auto'

max_featuresint or float, default=1.0

从X中抽取的特征数量,用于训练每个基本估计器。

  • 如果是int,则抽取 max_features 个特征。

  • 如果是float,则抽取 max(1, int(max_features * n_features_in_)) 个特征。

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

bootstrapbool, default=False

如果为True,每个树拟合时使用有放回的随机子集训练数据。如果为False,则进行无放回的采样。

n_jobsint, default=None

用于并行运行:meth:fit 和:meth:predict 的作业数量。 None 表示1,除非在:obj:joblib.parallel_backend 上下文中。 -1 表示使用所有处理器。更多详情请参见:term:术语 <n_jobs>

random_stateint, RandomState instance or None, default=None

控制每个分支步骤和森林中每棵树的特征和分割值选择的伪随机性。

传递一个int以在多次函数调用中获得可重复的结果。更多详情请参见:term:术语 <random_state>

verboseint, default=0

控制树构建过程的冗长程度。

warm_startbool, default=False

设置为 True 时,重用上一次调用fit的解决方案,并在集合中添加更多估计器,否则,拟合全新的森林。更多详情请参见:term:术语 <warm_start>

Added in version 0.21.

Attributes:
estimator_ExtraTreeRegressor 实例

用于创建已拟合子估计器集合的子估计器模板。

Added in version 1.2: base_estimator_ 重命名为 estimator_

estimators_ExtraTreeRegressor实例列表

已拟合子估计器的集合。

estimators_features_ndarray列表

每个基本估计器的抽取特征子集。

estimators_samples_ndarray列表

子集,每个基估计器绘制的样本。

max_samples_int

实际样本数量。

offset_float

用于定义决策函数从原始分数的偏移量。我们有关系: decision_function = score_samples - offset_offset_ 定义如下。当污染参数设置为”auto”时,偏移量为-0.5,因为内点分数接近0,异常分数接近-1。当提供不同于”auto”的污染参数时,偏移量定义为在训练中获得预期数量的异常(决策函数< 0的样本)。

Added in version 0.20.

n_features_in_int

在:term:fit 期间看到的特征数量。

Added in version 0.24.

feature_names_in_ndarray of shape ( n_features_in_ ,)

在:term:fit 期间看到的特征名称。仅当 X 的特征名称均为字符串时定义。

Added in version 1.0.

See also

sklearn.covariance.EllipticEnvelope

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

sklearn.svm.OneClassSVM

无监督异常检测。 估计高维分布的支持。 实现基于libsvm。

sklearn.neighbors.LocalOutlierFactor

使用局部异常因子(LOF)进行无监督异常检测。

Notes

实现基于ExtraTreeRegressor的集合。每个树的最大深度设置为 ceil(log_2(n)) ,其中:math:n 是用于构建树的样本数量(更多详情请参见(Liu et al., 2008))。

References

[1]

Liu, Fei Tony, Ting, Kai Ming and Zhou, Zhi-Hua. “Isolation forest.” Data Mining, 2008. ICDM’08. Eighth IEEE International Conference on.

[2]

Liu, Fei Tony, Ting, Kai Ming and Zhou, Zhi-Hua. “Isolation-based anomaly detection.” ACM Transactions on Knowledge Discovery from Data (TKDD) 6.1 (2012): 3.

Examples

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

有关使用隔离森林进行异常检测的示例,请参见:ref:sphx_glr_auto_examples_ensemble_plot_isolation_forest.py

decision_function(X)#

平均基分类器对X的异常评分。

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

给定树的观测值的常态度量是包含该观测值的叶子的深度,这相当于隔离该点所需的分割次数。在叶子中有几个观测值n_left的情况下,添加n_left样本隔离树的平均路径长度。

Parameters:
X{array-like, sparse matrix},形状为(n_samples, n_features)

输入样本。内部将转换为 dtype=np.float32 ,如果提供稀疏矩阵,则转换为稀疏 csr_matrix

Returns:
scoresndarray,形状为(n_samples,)

输入样本的异常评分。 评分越低,越异常。负分表示异常值,正分表示正常值。

Notes

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

from joblib import parallel_backend

# 注意,我们在这里使用线程,因为decision_function方法不是CPU绑定的。
with parallel_backend("threading", n_jobs=4):
    model.decision_function(X)
property estimators_samples_#

子集,每个基估计器绘制的样本。

返回一个动态生成的索引列表,标识用于拟合集成中每个成员的样本,即,袋内样本。

注意:为了减少对象的内存占用,不在存储采样数据,每次调用该属性时都会重新创建列表。因此,获取该属性可能比预期的要慢。

fit(X, y=None, sample_weight=None)#

拟合估计器。

Parameters:
X{array-like, sparse matrix},形状为 (n_samples, n_features)

输入样本。为了最大效率,使用 dtype=np.float32 。稀疏矩阵也支持,为了最大效率,使用稀疏的 csc_matrix

y忽略

未使用,为了保持API一致性而存在。

sample_weightarray-like,形状为 (n_samples,),默认=None

样本权重。如果为None,则样本等权重。

Returns:
selfobject

拟合的估计器。

fit_predict(X, y=None, **kwargs)#

对X进行拟合并返回X的标签。

对于异常值返回-1,对于正常值返回1。

Parameters:
X{array-like, sparse matrix},形状为 (n_samples, n_features)

输入样本。

y忽略

未使用,为了API一致性而存在。

**kwargsdict

传递给 fit 的参数。

Added in version 1.4.

Returns:
yndarray,形状为 (n_samples,)

正常值为1,异常值为-1。

get_metadata_routing()#

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

请查看 用户指南 以了解路由机制的工作原理。

Added in version 1.5.

Returns:
routingMetadataRouter

MetadataRouter 封装的 路由信息。

get_params(deep=True)#

获取此估计器的参数。

Parameters:
deepbool, 默认=True

如果为True,将返回此估计器和包含的子对象(也是估计器)的参数。

Returns:
paramsdict

参数名称映射到它们的值。

predict(X)#

预测一个特定样本是否为异常值。

Parameters:
X{array-like, sparse matrix} 形状为 (n_samples, n_features)

输入样本。内部将转换为 dtype=np.float32 ,如果提供稀疏矩阵, 则转换为稀疏 csr_matrix

Returns:
is_inlier形状为 (n_samples,) 的 ndarray

对于每个观察值,根据拟合的模型,告诉它是否应被视为内部值(+1 或 -1)。

Notes

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

from joblib import parallel_backend

# 注意,我们在这里使用线程,因为预测方法不是 CPU 绑定的。
with parallel_backend("threading", n_jobs=4):
    model.predict(X)
score_samples(X)#

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

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

给定树的观测值的正常性度量是包含该观测值的叶子的深度,这相当于隔离该点所需的分割次数。在叶子中有多个观测值n_left的情况下,添加n_left样本隔离树的平均路径长度。

Parameters:
X{array-like, sparse matrix} of shape (n_samples, n_features)

输入样本。

Returns:
scoresndarray of shape (n_samples,)

输入样本的异常分数。 越低,越异常。

Notes

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

from joblib import parallel_backend

# 注意,我们在这里使用线程,因为score_samples方法不是CPU绑定的。
with parallel_backend("threading", n_jobs=4):
    model.score(X)
set_fit_request(*, sample_weight: bool | None | str = '$UNCHANGED$') IsolationForest#

Request metadata passed to the fit method.

Note that this method is only relevant if enable_metadata_routing=True (see sklearn.set_config ). Please see User Guide on how the routing mechanism works.

The options for each parameter are:

  • True : metadata is requested, and passed to fit if provided. The request is ignored if metadata is not provided.

  • False : metadata is not requested and the meta-estimator will not pass it to fit .

  • None : metadata is not requested, and the meta-estimator will raise an error if the user provides it.

  • str : metadata should be passed to the meta-estimator with this given alias instead of the original name.

The default ( sklearn.utils.metadata_routing.UNCHANGED ) retains the existing request. This allows you to change the request for some parameters and not others.

Added in version 1.3.

Note

This method is only relevant if this estimator is used as a sub-estimator of a meta-estimator, e.g. used inside a Pipeline . Otherwise it has no effect.

Parameters:
sample_weightstr, True, False, or None, default=sklearn.utils.metadata_routing.UNCHANGED

Metadata routing for sample_weight parameter in fit .

Returns:
selfobject

The updated object.

set_params(**params)#

设置此估计器的参数。

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

Parameters:
**paramsdict

估计器参数。

Returns:
selfestimator instance

估计器实例。