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.

参数:
n_neighborsint,默认=20

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

algorithm'自动',' ball_tree ',',',默认='自动'

用于计算最近邻居的算法:

  • 'ball_tree'将使用 BallTree

  • 'kd_tree'将使用 KDTree

  • “brute”将使用暴力搜索。

  • “Auto”将尝试根据传递给 fit

注意:在稀疏输入上进行调整将使用暴力覆盖此参数的设置。

leaf_sizeint,默认=30

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

metric字符串或可调用,默认=' minkowski '

用于距离计算的指标。默认值是“minkowski”,当p = 2时,它会产生标准的欧几里得距离。请参阅文档 scipy.spatial.distance 以及中列出的指标 distance_metrics 获取有效的指标值。

如果“预先计算”指标,则假设X是距离矩阵,并且在匹配期间必须为平方。X可以是 sparse graph ,在这种情况下,只有“非零”元素可以被视为邻居。

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

pfloat,默认=2

Minkowski指标的参数来自 sklearn.metrics.pairwise_distances .当p = 1时,这相当于对于p = 2使用manhattan_Distance(l1)和euclidean_Distance(l2)。对于任意p,使用minkowski_Distance(l_p)。

metric_paramsdict,默认=无

指标函数的附加关键字参数。

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

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

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

  • 如果是浮动,则污染应在范围(0,0.5]内。

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

novelty布尔,默认=假

默认情况下,LocalOutlierFactor仅用于异常值检测(新颖性=False)。如果您想使用LocalOutlierFactor进行新奇检测,请将新奇性设置为True。在这种情况下,请注意,您应该仅对新的未见数据而不是训练集使用predicate、decision_function和score_samples;请注意,这种方式获得的结果可能与标准LOF结果不同。

Added in version 0.20.

n_jobsint,默认=无

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

属性:
negative_outlier_factor_形状的nd数组(n_samples,)

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

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

n_neighbors_int

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

offset_浮子

用于从原始分数获取二进制标签的偏移量。负离群值因子小于 offset_ 被检测为异常。偏差设置为-1.5(内值评分约为-1),除非提供了不同于“自动”的污染参数。在这种情况下,偏差的定义方式是我们在训练中获得期望数量的离群值。

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_ :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.

n_samples_fit_int

它是匹配数据中的样本数量。

参见

sklearn.svm.OneClassSVM

基于支持向量机的无监督离群点检测。

引用

[1]

布鲁尼格,M. M.,克里格尔,H. P.,Ng,R. T.,& Sander,J.(2000,May)。LOF:识别基于密度的本地异常值。在ACN sigmodd记录中。

示例

>>> 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)[源代码]#

与X的本地异常值因子相反。

越大越好,即大的值对应于内点。

Only available for novelty detection (when novelty is set to True). 位移偏差允许为零阈值作为离群值。参数X应该包含 new data :如果X包含来自训练的点,则它认为后者在自己的邻域中。此外,X中的样本不在任何点的邻域中考虑。

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

用于计算局部离群值因子w.r.t.训练样本。

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

与每个输入样本的本地异常值因子相反。越低,越不正常。负分数代表离群值,正分数代表内值。

fit(X, y=None)[源代码]#

从训练数据集匹配局部异常值因子检测器。

参数:
X形状(n_samples,n_features)的{类数组,稀疏矩阵}或 (n_samples,n_samples)如果指标='预先计算'

训练数据。

y忽视

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

返回:
selfLocalOutlierFactor

安装的局部异常值因子检测器。

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

将模型与训练集X匹配并返回标签。

Not available for novelty detection (when novelty is set to True). 根据LOF评分和污染参数,内部值的标签为1,异常值的标签为-1。

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

用于计算局部离群值因子w.r.t.训练样本。

y忽视

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

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

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

get_metadata_routing()[源代码]#

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

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

返回:
routingMetadataRequest

A MetadataRequest 封装路由信息。

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

获取此估计器的参数。

参数:
deep布尔,默认=True

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

返回:
paramsdict

参数名称映射到其值。

kneighbors(X=None, n_neighbors=None, return_distance=True)[源代码]#

找到点的K近邻。

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

参数:
X{类数组,稀疏矩阵},形状(n_questions,n_features), 或(n_queries,n_indexed),如果指标==“预计算”,默认=无

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

n_neighborsint,默认=无

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

return_distance布尔,默认=True

是否返回距离。

返回:
neigh_dist形状的nd数组(n_queries,n_neighbors)

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

neigh_ind形状的nd数组(n_queries,n_neighbors)

人口矩阵中最近点的索引。

示例

在下面的示例中,我们从代表数据集的数组中构建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,并且是样本的第三个元素(索引从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-邻居的(加权)图。

参数:
X形状的{类数组,稀疏矩阵}(n_questions,n_features), 或(n_queries,n_indexed),如果指标==“预计算”,默认=无

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

n_neighborsint,默认=无

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

mode'连通性',',默认='连通性'

返回的矩阵类型:“连通性”将返回包含1和0的连通性矩阵,在“距离”中,边是点之间的距离,距离类型取决于NearestNeighbors类中所选的指标参数。

返回:
A形状稀疏矩阵(n_questions,n_samples_fit)

n_samples_fit 是匹配数据中的样本数。 A[i, j] 给出连接边缘的重量 ij .该矩阵为CSR格式。

参见

NearestNeighbors.radius_neighbors_graph

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

示例

>>> 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)[源代码]#

根据LOF预测X的标签(1个内值,-1个离群值)。

Only available for novelty detection (when novelty is set to True). 这种方法允许将预测概括为 new observations (not在训练集上)。注意, clf.fit(X) 然后 clf.predict(X)novelty=True 可能与获得的结果不同 clf.fit_predict(X)novelty=False .

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

用于计算局部离群值因子w.r.t.训练样本。

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

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

score_samples(X)[源代码]#

与X的本地异常值因子相反。

情况恰恰相反,因为越大越好,即大的值对应于内点。

Only available for novelty detection (when novelty is set to True). 参数X应该包含 new data :如果X包含来自训练的点,则它认为后者在自己的邻域中。此外,X中的样本不在任何点的邻域中考虑。因此,通过获得的分数 score_samples 可能与标准LOF分数不同。训练数据的标准LOF分数可通过 negative_outlier_factor_ 属性

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

用于计算局部离群值因子w.r.t.训练样本。

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

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

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

设置此估计器的参数。

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

参数:
**paramsdict

估计参数。

返回:
self估计器实例

估计实例。