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
估算器實例。