LocalOutlierFactor#

class sklearn.neighbors.LocalOutlierFactor(n_neighbors=20, *, algorithm='auto', leaf_size=30, metric='minkowski', p=2, metric_params=None, contamination='auto', novelty=False, n_jobs=None)#

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

每个样本的异常分数称为局部异常因子。 它通过与相邻样本的密度比较来衡量给定样本的局部密度偏差。 它是局部的,因为异常分数取决于对象相对于周围邻域的隔离程度。 更确切地说,局部性由k近邻给出,其距离用于估计局部密度。 通过将样本的局部密度与其邻域的局部密度进行比较,可以识别出密度明显低于其邻域的样本。这些被认为是异常值。

Added in version 0.19.

Parameters:
n_neighborsint, default=20

默认用于 kneighbors 查询的邻居数量。 如果 n_neighbors 大于提供的样本数量,则所有样本都将被使用。

algorithm{‘auto’, ‘ball_tree’, ‘kd_tree’, ‘brute’}, default=’auto’

用于计算最近邻的算法:

  • ‘ball_tree’ 将使用 BallTree

  • ‘kd_tree’ 将使用 KDTree

  • ‘brute’ 将使用暴力搜索。

  • ‘auto’ 将尝试根据传递给 fit 方法的值决定最合适的算法。

注意:在稀疏输入上拟合将覆盖此参数的设置,使用暴力搜索。

leaf_sizeint, default=30

传递给 BallTreeKDTree 的叶子大小。这可以影响构建和查询的速度,以及存储树所需的内存。最佳值取决于问题的性质。

metricstr or callable, default=’minkowski’

用于距离计算的度量。默认是 “minkowski”,当 p = 2 时,结果为标准欧几里得距离。请参阅 scipy.spatial.distance 的文档和 distance_metrics 中列出的度量以获取有效的度量值。

如果度量是 “precomputed”,则假设 X 是距离矩阵,并且在拟合时必须是方阵。X 可以是 sparse graph ,在这种情况下,只考虑 “非零” 元素作为邻居。

如果度量是可调用函数,它接受两个表示一维向量的数组作为输入,并返回一个表示这两个向量之间距离的值。这适用于 Scipy 的度量,但比将度量名称作为字符串传递效率低。

pfloat, default=2

sklearn.metrics.pairwise_distances 中 Minkowski 度量的参数。当 p = 1 时,这相当于使用 manhattan_distance (l1),当 p = 2 时,相当于使用 euclidean_distance (l2)。对于任意 p,使用 minkowski_distance (l_p)。

metric_paramsdict, default=None

度量函数的额外关键字参数。

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

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

  • 如果 ‘auto’,阈值按原始论文中的方法确定,

  • 如果为浮点数,污染量应在 (0, 0.5] 范围内。

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

noveltybool, default=False

默认情况下,LocalOutlierFactor 仅用于异常检测(novelty=False)。如果希望使用 LocalOutlierFactor 进行新奇检测,请将 novelty 设置为 True。在这种情况下,请注意只能在新的未见数据上使用 predict、decision_function 和 score_samples,而不能在训练集上使用;并且请注意,以这种方式获得的结果可能与标准 LOF 结果不同。

Added in version 0.20.

n_jobsint, default=None

用于邻居搜索的并行作业数量。 None 表示 1,除非在 joblib.parallel_backend 上下文中。 -1 表示使用所有处理器。有关更多详细信息,请参阅 Glossary

Attributes:
negative_outlier_factor_ndarray of shape (n_samples,)

训练样本的相反 LOF。越高,越正常。内点往往具有接近 1 的 LOF 分数( negative_outlier_factor_ 接近 -1),而异常值往往具有更大的 LOF 分数。

样本的局部异常因子(LOF)捕获其“异常程度”。它是样本的局部可达密度与其 k 近邻的局部可达密度的比值的平均值。

n_neighbors_int

用于 kneighbors 查询的实际邻居数量。

offset_float

用于从原始分数获得二进制标签的偏移量。具有小于 offset_ 的 negative_outlier_factor 的观察值被检测为异常。偏移量设置为 -1.5(内点分数约为 -1),除非提供了不同于 “auto” 的污染参数。在这种情况下,偏移量定义为在训练中获得预期数量的异常值。

Added in version 0.20.

effective_metric_str

用于距离计算的有效度量。

effective_metric_params_dict

度量函数的有效额外关键字参数。

n_features_in_int

fit 期间看到的特征数量。

Added in version 0.24.

feature_names_in_ndarray of shape ( n_features_in_ ,)

fit 期间看到的特征名称。仅当 X 具有全部为字符串的特征名称时定义。

Added in version 1.0.

n_samples_fit_int

拟合数据中的样本数量。

See also

sklearn.svm.OneClassSVM

使用支持向量机进行无监督异常检测。

References

[1]

Breunig, M. M., Kriegel, H. P., Ng, R. T., & Sander, J. (2000, May). LOF: identifying density-based local outliers. In ACM sigmod record.

Examples

>>> import numpy as np
>>> from sklearn.neighbors import LocalOutlierFactor
>>> X = [[-1.1], [0.2], [101.1], [0.3]]
>>> clf = LocalOutlierFactor(n_neighbors=2)
>>> clf.fit_predict(X)
array([ 1,  1, -1,  1])
>>> clf.negative_outlier_factor_
array([ -0.9821...,  -1.0370..., -73.3697...,  -0.9821...])
decision_function(X)#

Shifted opposite of the Local Outlier Factor of X.

Bigger is better, i.e. large values correspond to inliers.

Only available for novelty detection (when novelty is set to True). The shift offset allows a zero threshold for being an outlier. The argument X is supposed to contain new data: if X contains a point from training, it considers the later in its own neighborhood. Also, the samples in X are not considered in the neighborhood of any point.

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

查询样本或样本集,用于计算相对于训练样本的局部异常因子。

Returns:
shifted_opposite_lof_scoresndarray of shape (n_samples,)

每个输入样本的局部异常因子的偏移对立值。值越低,越异常。负分数表示异常点,正分数表示内点。

fit(X, y=None)#

拟合从训练数据集得到的局部异常因子检测器。

Parameters:
X{array-like, sparse matrix},形状为 (n_samples, n_features) 或 如果 metric=’precomputed’ 则为 (n_samples, n_samples)

训练数据。

y忽略

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

Returns:
selfLocalOutlierFactor

拟合的局部异常因子检测器。

fit_predict(X, y=None)#

拟合模型到训练集X并返回标签。

不适用于新奇检测(当novelty设置为True时)。 根据LOF分数和污染参数,标签为1表示内点,-1表示离群点。

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

查询样本或样本,用于计算相对于训练样本的局部离群因子。

yIgnored

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

Returns:
is_inlierndarray of shape (n_samples,)

返回-1表示异常/离群点,1表示内点。

get_metadata_routing()#

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

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

Returns:
routingMetadataRequest

MetadataRequest 封装的 路由信息。

get_params(deep=True)#

获取此估计器的参数。

Parameters:
deepbool, 默认=True

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

Returns:
paramsdict

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

kneighbors(X=None, n_neighbors=None, return_distance=True)#

查找一个点的K近邻。

返回每个点的邻居的索引和距离。

Parameters:
X{array-like, sparse matrix}, shape (n_queries, n_features), 或 (n_queries, n_indexed) 如果 metric == ‘precomputed’, default=None

查询点或点。 如果未提供,则返回每个索引点的邻居。 在这种情况下,查询点不视为其自身的邻居。

n_neighborsint, default=None

每个样本所需的邻居数量。默认值是在构造函数中传递的值。

return_distancebool, default=True

是否返回距离。

Returns:
neigh_distndarray of shape (n_queries, n_neighbors)

表示到点的长度的数组,仅在 return_distance=True 时存在。

neigh_indndarray of shape (n_queries, n_neighbors)

在总体矩阵中最接近点的索引。

Examples

在以下示例中,我们从一个表示数据集的数组构造一个 NearestNeighbors 类,并询问谁是 [1,1,1] 最近的点

>>> samples = [[0., 0., 0.], [0., .5, 0.], [1., 1., .5]]
>>> from sklearn.neighbors import NearestNeighbors
>>> neigh = NearestNeighbors(n_neighbors=1)
>>> neigh.fit(samples)
NearestNeighbors(n_neighbors=1)
>>> print(neigh.kneighbors([[1., 1., 1.]]))
(array([[0.5]]), array([[2]]))

如你所见,它返回 [[0.5]] 和 [[2]],这意味着元素距离为 0.5,并且是 samples 的第三个元素(索引从 0 开始)。你也可以查询多个点:

>>> X = [[0., 1., 0.], [1., 0., 1.]]
>>> neigh.kneighbors(X, return_distance=False)
array([[1],
       [2]]...)
kneighbors_graph(X=None, n_neighbors=None, mode='connectivity')#

计算X中点的k-邻居的(加权)图。

Parameters:
X{array-like, sparse matrix},形状为(n_queries, n_features), 或者如果metric == ‘precomputed’,形状为(n_queries, n_indexed),默认=None

查询点或点。 如果没有提供,则返回每个索引点的邻居。 在这种情况下,查询点不被视为其自身的邻居。 对于 metric='precomputed' ,形状应为 (n_queries, n_indexed)。否则,形状应为 (n_queries, n_features)。

n_neighborsint, 默认=None

每个样本的邻居数量。默认值是在构造函数中传递的值。

mode{‘connectivity’, ‘distance’}, 默认=’connectivity’

返回矩阵的类型:’connectivity’将返回带有1和0的连通性矩阵,在’distance’中, 边是点之间的距离,距离的类型取决于NearestNeighbors类中选择的metric参数。

Returns:
A形状为(n_queries, n_samples_fit)的稀疏矩阵

n_samples_fit 是拟合数据中的样本数量。 A[i, j] 给出连接 ij 的边的权重。 矩阵为CSR格式。

See also

NearestNeighbors.radius_neighbors_graph

计算X中点的(加权)邻居图。

Examples

>>> X = [[0], [3], [1]]
>>> from sklearn.neighbors import NearestNeighbors
>>> neigh = NearestNeighbors(n_neighbors=2)
>>> neigh.fit(X)
NearestNeighbors(n_neighbors=2)
>>> A = neigh.kneighbors_graph(X)
>>> A.toarray()
array([[1., 0., 1.],
       [0., 1., 1.],
       [1., 0., 1.]])
predict(X=None)#

预测X的标签(1为内点,-1为异常点)根据LOF。

仅在novelty设置为True时可用(用于新奇检测)。 此方法允许将预测推广到*新观测值*(不在训练集中)。请注意,当 novelty=True 时, clf.fit(X) 然后 clf.predict(X) 的结果可能与 novelty=Falseclf.fit_predict(X) 的结果不同。

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

查询样本或样本,用于计算相对于训练样本的局部异常因子。

Returns:
is_inlierndarray,形状为(n_samples,)

返回-1表示异常/离群点,+1表示内点。

score_samples(X)#

与X的局部离群因子相反。

它是相反的,因为值越大越好,即大值对应内点。

仅适用于新颖性检测(当novelty设置为True时)。 参数X应包含*新数据*:如果X包含训练中的一个点,它会将后者视为其自身邻域中的一个点。 此外,X中的样本不被视为任何点的邻域中的样本。因此,通过 score_samples 获得的分数可能与标准LOF分数不同。 训练数据的标准LOF分数可通过 negative_outlier_factor_ 属性获得。

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

查询样本或样本,以相对于训练样本计算局部离群因子。

Returns:
opposite_lof_scoresndarray of shape (n_samples,)

每个输入样本的局部离群因子的相反值。值越低,越异常。

set_params(**params)#

设置此估计器的参数。

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

Parameters:
**paramsdict

估计器参数。

Returns:
selfestimator instance

估计器实例。