当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


Python sklearn LocalOutlierFactor用法及代码示例


本文简要介绍python语言中 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-nearest 个邻居给出,其距离用于估计局部密度。通过将样本的局部密度与其邻居的局部密度进行比较,可以识别出密度大大低于其邻居的样本。这些被认为是异常值。

参数

n_neighbors整数,默认=20

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

algorithm{‘auto’, ‘ball_tree’,‘kd_tree’, ‘brute’},默认='自动'

用于计算最近邻的算法:

  • ‘ball_tree’ 将使用 BallTree
  • ‘kd_tree’ 将使用 KDTree
  • ‘brute’ 将使用蛮力搜索。
  • ‘auto’ 将尝试根据传递给 fit 方法的值来决定最合适的算法。

注意:拟合稀疏输入将使用蛮力覆盖此参数的设置。

leaf_size整数,默认=30

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

metricstr 或可调用,默认='minkowski'

该度量用于距离计算。可以使用来自 scikit-learn 或 scipy.spatial.distance 的任何度量。

如果 metric 是“precomputed”,X 被假定为一个距离矩阵并且必须是正方形。 X 可能是一个稀疏矩阵,在这种情况下,只有 “nonzero” 个元素可以被视为邻居。

如果 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整数,默认=2

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

metric_params字典,默认=无

度量函数的附加关键字参数。

contamination‘auto’ 或浮点数,默认='auto'

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

  • 如果‘auto’,阈值的确定与原论文相同,
  • 如果是浮点数,则污染应在 (0, 0.5] 范围内。
novelty布尔,默认=假

默认情况下,LocalOutlierFactor 仅用于异常值检测(novelty=False)。如果您想使用 LocalOutlierFactor 进行新颖性检测,请将新颖性设置为 True。在这种情况下请注意,您应该只对新的看不见的数据而不是训练集使用预测、decision_function 和score_samples。

n_jobs整数,默认=无

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

属性

negative_outlier_factor_ndarray 形状 (n_samples,)

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

样本的局部异常值 (LOF) 捕获其假定的“异常程度”。它是样本的局部可达密度与其k-nearest邻居的局部可达密度之比的平均值。

n_neighbors_int

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

offset_浮点数

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

effective_metric_str

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

effective_metric_params_dict

度量函数的有效附加关键字参数。

n_features_in_int

拟合期间看到的特征数。

feature_names_in_ndarray 形状(n_features_in_,)

拟合期间看到的特征名称。仅当 X 具有全为字符串的函数名称时才定义。

n_samples_fit_int

它是拟合数据中的样本数。

参考

1

Breunig, M. M.、Kriegel, H. P.、Ng, R. T. 和 Sander, J.(2000 年 5 月)。 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...])

相关用法


注:本文由纯净天空筛选整理自scikit-learn.org大神的英文原创作品 sklearn.neighbors.LocalOutlierFactor。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。