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