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 叶大小传递给 BallTree 或KDTree 。 这会影响构造和查询的速度,以及存储树所需的内存。 最佳值取决于问题的性质。 |
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., .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 | 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的边的权重。 |
另见:
示例
>>> 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 估算器实例。 |