sklearn.neighbors.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个近邻给出的,其距离用于估计局部密度。 通过将样本的局部密度与其临近点的局部密度进行比较,可以识别出密度远低于其临近点的样本。 这些被认为是离群值。

版本0.19中的新功能。

参数 说明
n_neighbors int, default=20
默认情况下用于kneighbors查询的临近点数。 如果n_neighbors大于提供的样本数,则将使用所有样本。
algorithm {‘auto’, ‘ball_tree’, ‘kd_tree’, ‘brute’}, default=’auto’
用于计算最近临近点的算法:
“ ball_tree”将使用BallTree
“ kd_tree”将使用KDTree
“brute”将使用暴力搜索。
“auto”将尝试根据传递给fit方法的值来决定最合适的算法。
注意:稀疏输入上的拟合将使用蛮力覆盖此参数的设置。
leaf_size int, default=30
叶大小传递给BallTreeKDTree。 这会影响构造和查询的速度,以及存储树所需的内存。 最佳值取决于问题的性质。
metric str or callable, default=’minkowski’
用于距离计算的度量。 可以使用scikit-learn或scipy.spatial.distance中的任何度量。
如果度量是“预先计算的”,则将X假定为距离矩阵,并且必须为平方。 X可能是一个稀疏矩阵,在这种情况下,只有“非零”元素可以被视为临近点。
如果metric是可调用的函数,则会在每对实例(行)上调用它,并记录结果值。 可调用对象应将两个数组作为输入并返回一个值,指示它们之间的距离。 这适用于Scipy的指标,但效率不如将指标名称作为字符串传递。
指标的有效值为:
来自scikit-learn:['cityblock','cosine','euclidean','l1','l2','manhattan']
来自scipy.spatial.distance: [‘braycurtis’, ‘canberra’, ‘chebyshev’, ‘correlation’, ‘dice’, ‘hamming’, ‘jaccard’, ‘kulsinski’, ‘mahalanobis’, ‘minkowski’, ‘rogerstanimoto’, ‘russellrao’, ‘seuclidean’, ‘sokalmichener’, ‘sokalsneath’, ‘sqeuclidean’, ‘yule’]
有关这些指标的详细信息,请参见scipy.spatial.distance文档:
https://docs.scipy.org/doc/scipy/reference/spatial.distance.html
p int, default=2
sklearn.metrics.pairwise.pairwise_distances中的Minkowski指标的参数。 当p = 1时,这等效于对p = 2使用manhattan_distance(l1)和euclidean_distance(l2)。对于任意p,使用minkowski_distance(l_p)。
metric_params dict, default=None
度量功能的其他关键字参数。
contamination 'auto’ or float, default=’auto’
数据集的污染量,即数据集中异常值的比例。 拟合时,用于定义样本得分的阈值。
如果是“自动”,则阈值的确定与原始论文相同
如果是浮子,则污染应在[0,0.5]范围内。
Changed in version 0.22: The default value of contamination changed from 0.1 to 'auto'.
novelty bool, default=False
默认情况下,LocalOutlierFactor仅用于异常值检测(novelty = False)。 如果要使用LocalOutlierFactor进行新颖性检测,请将新颖性设置为True。 在这种情况下,请注意,您只应在看不见的新数据上而不是训练集上使用predict,decision_function和score_samples。
0.20.版的新功能。
n_jobs int, default=None
为临近点搜索运行的并行作业数。 除非在joblib.parallel_backend上下文中,否则None表示1。 -1表示使用所有处理器。 有关更多详细信息,请参见词汇表
属性 说明
negative_outlier_factor ndarray of shape (n_samples,)
训练样本的相反LOF。 越高,越正常。 异常值的LOF得分往往接近1(negative_outlier_factor_接近-1),而异常值的LOF得分往往更高。
样本的局部离群因子(LOF)反映了其所谓的“异常程度”。 它是样本及其k最近邻的局部可达性密度之比的平均值。
n_neighbors int
用于kneighbors查询的临近点的实际数量。
offset_ float
偏移量用于从原始分数获得二进制标签。 negative_outlier_factor小于offset_的观测值被检测为异常。 偏移设置为-1.5(内部分数约为-1),除非提供的污染参数不同于“自动”。 在这种情况下,以这样的方式定义偏移量,即我们可以在训练中获得预期的异常值数量。
0.20版中的新功能。

参考资料

1 Breunig, M. M., Kriegel, H. P., Ng, R. T., & Sander, J. (2000, May). LOF: 确定基于密度的局部离群值。 在ACM sigmod记录中。

示例

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

方法

参数 说明
fit(X[, y]) 使用X作为训练数据拟合模型。
get_params([deep]) 获取此估计量的参数。
kneighbors([X, n_neighbors, return_distance]) 查找点的K临近点。
kneighbors_graph([X, n_neighbors, mode]) 计算X中点的k临近点的(加权)图
set_params(**params) 设置此估算器的参数。
__init__(n_neighbors=20, *, algorithm='auto', leaf_size=30, metric='minkowski', p=2, metric_params=None, contamination='auto', novelty=False, n_jobs=None)

[源码]

初始化. 请参阅help(type())以获得准确的说明。

property decision_function

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

越大越好,即较大的值对应于整数。

仅可用于新颖性检测(新颖性设置为True时)。 移位偏移允许零阈值作为异常值。 参数X应该包含新数据:如果X包含来自训练的点,则它将在其自己的邻域中考虑后者。 同样,在任何点附近都不会考虑X中的样本。

参数 说明
X array-like of shape (n_samples, n_features)
查询样本或多个样本以计算局部离群因子w.r.t. 训练样本。
返回值 说明
shifted_opposite_lof_scores ndarray of shape (n_samples,)
每个输入样本的本地离群值因数的相反偏移。 越低,越异常。 负分数代表离群值,正分数代表离群值。
fit(X, y=None)

[源码]

使用X作为训练数据拟合模型。

参数 说明
X BallTree, KDTree or {array-like, sparse matrix} of shape (n_samples, n_features) or (n_samples, n_samples)
训练数据。 如果是数组或矩阵,则形状为(n_samples,n_features),或者如果metric =“ precomputed”,则形状为(n_samples,n_samples)。
y Ignored
未使用,按惯例提供API一致性。
返回值 说明
self object
property fit_predict

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

仅可用于新颖性检测(新颖性设置为True时)。 根据LOF得分和污染参数,标签的1表示正确值,-1表示离群值。

参数 说明
X array-like of shape (n_samples, n_features), default=None
查询样本或多个样本以计算局部离群因子w.r.t. 训练样本。
y Ignored
未使用,按惯例提供API一致性。
返回值 说明
is_inlier ndarray of shape (n_samples,)
对于异常/异常值,返回-1;对于异常值,则返回1。
get_params(deep=True)

[源码]

获取此估计量的参数。

参数值 说明
deep bool, default=True
如果为True,则将返回此估算器和作为估算器的所包含子对象的参数。
返回值 说明
params mapping of string to any
参数名称映射到其值。
kneighbors(X=None, n_neighbors=None, return_distance=True)

[源码]

查找点的K临近点。 返回每个点的临近点的索引和与之的距离

参数 说明
X array-like, shape (n_queries, n_features), or (n_queries, n_indexed) if metric == ‘precomputed’
查询点。 如果未提供,则返回每个索引点的临近点。 在这种情况下,查询点不被视为其自己的临近点。
n_neighbors int
要获取的临近点数(默认值为传递给构造函数的值)
return_distance boolean, optional. Defaults to True.
如果为False,则不会返回距离
返回值 说明
neigh_dist array, shape (n_queries, n_neighbors)
表示点的长度的数组,仅在return_distance = True时存在
neigh_ind array, shape (n_queries, n_neighbors)
总体矩阵中最近点的索引。

示例

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

>>> samples = [[0.0.0.], [0..50.], [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 array-like, shape (n_queries, n_features), or (n_queries, n_indexed) if metric == ‘precomputed’
查询点。 如果未提供,则返回每个索引点的临近点。 在这种情况下,查询点不被视为其自己的临近点。
n_neighbors int
每个样本的临近点数。 (默认值为传递给构造函数的值)。
mode {‘connectivity’, ‘distance’}, optional
返回矩阵的类型:“连通性”将返回具有1和0的连通性矩阵,在“距离”中,边为点之间的欧几里得距离。
返回值 结果
A sparse graph in CSR format, shape = [n_queries, n_samples_fit]
n_samples_fit是拟合数据中的样本数A [i,j],分配了将i连接到j的边的权重。

另见:

NearestNeighbors.radius_neighbors_graph

示例

>>> 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.]])
property predict

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

仅可用于新颖性检测(新颖性设置为True时)。 这种方法可以将预测推广到新的观测值(不在训练集中)。

参数 说明
X array-like of shape (n_samples, n_features)
查询样本或多个样本以计算局部离群因子w.r.t. 训练样本。
返回值 说明
is_inlier ndarray of shape (n_samples,)
对于异常/异常值,返回-1;对于正常值,则返回+1。
property score_samples

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

相反,越大越好,即较大的值对应于整数。

仅可用于新颖性检测(新颖性设置为True时)。 参数X应该包含新数据:如果X包含来自训练的点,则它将在其自己的邻域中考虑后者。 同样,在任何点附近都不会考虑X中的样本。 可以通过考虑negative_outlier_factor_属性来获得训练数据的score_samples。

参数 说明
X array-like of shape (n_samples, n_features)
查询样本或多个样本以计算局部离群因子w.r.t. 训练样本。
返回值 说明
opposite_lof_scores ndarray of shape (n_samples,)
每个输入样本的局部离群因子的反义词。 越低,越异常。
set_params(**params)

[源码]

设置此估算器的参数。

该方法适用于简单的估计器以及嵌套对象(例如管道)。 后者的参数格式为 __ ,以便可以更新嵌套对象的每个组件。

参数 说明
**params dict
估算器参数。
返回值 说明
self object
估算器实例。