IsolationForest#

class sklearn.ensemble.IsolationForest(*, n_estimators=100, max_samples='auto', contamination='auto', max_features=1.0, bootstrap=False, n_jobs=None, random_state=None, verbose=0, warm_start=False)[原始碼]#

孤立森林演算法。

使用 IsolationForest 演算法返回每個樣本的異常分數。

IsolationForest 通過隨機選擇一個特徵,然後隨機選擇所選特徵的最大值和最小值之間的分裂值來「隔離」觀察值。

由於遞迴分割可以用樹結構表示,因此隔離樣本所需的分裂次數等同於從根節點到終止節點的路徑長度。

此路徑長度在這種隨機樹的森林中取平均值,是正常性和我們決策函數的度量。

隨機分割會為異常產生明顯較短的路徑。因此,當隨機樹森林集體為特定樣本產生較短的路徑長度時,它們很可能是異常值。

請在使用者指南中閱讀更多資訊。

於 0.18 版本新增。

參數:
n_estimatorsint,預設值=100

集成中的基礎估計器數量。

max_samples“auto”,int 或 float,預設值=”auto”

從 X 中抽取用於訓練每個基礎估計器的樣本數量。

  • 如果是 int,則抽取 max_samples 個樣本。

  • 如果是 float,則抽取 max_samples * X.shape[0] 個樣本。

  • 如果是 “auto”,則 max_samples=min(256, n_samples)

如果 max_samples 大於提供的樣本數量,則所有樣本將用於所有樹(不採樣)。

contamination‘auto’ 或 float,預設值=’auto’

資料集的汙染量,即資料集中離群值的比例。在擬合時用於定義樣本分數的閾值。

  • 如果是 ‘auto’,則閾值的確定方式與原始論文中相同。

  • 如果是 float,則汙染值應在 (0, 0.5] 範圍內。

在 0.22 版本中變更: contamination 的預設值從 0.1 變更為 'auto'

max_featuresint 或 float,預設值=1.0

從 X 中抽取用於訓練每個基礎估計器的特徵數量。

  • 如果是 int,則抽取 max_features 個特徵。

  • 如果是 float,則抽取 max(1, int(max_features * n_features_in_)) 個特徵。

注意:使用小於 1.0 的 float 數值或小於特徵數量的整數將啟用特徵子採樣,並導致更長的執行時間。

bootstrapbool,預設值=False

如果為 True,則在經過重複取樣的訓練資料的隨機子集上擬合個別樹。如果為 False,則執行不重複的採樣。

n_jobsint,預設值=None

對於 fitpredict,平行執行的作業數量。None 表示 1,除非在 joblib.parallel_backend 環境中。-1 表示使用所有處理器。請參閱詞彙表以瞭解更多詳細資訊。

random_stateint、RandomState 實例或 None,預設值=None

控制森林中每個分支步驟和每棵樹的特徵和分割值選擇的偽隨機性。

傳遞 int 以便在多次函數調用中獲得可重複的結果。請參閱詞彙表

verboseint,預設值=0

控制樹建構過程的詳細程度。

warm_startbool,預設值=False

當設定為 True 時,會重複使用先前擬合呼叫的解決方案,並向集成新增更多估計器,否則,只會擬合一個全新的森林。請參閱詞彙表

於 0.21 版本新增。

屬性:
estimator_ExtraTreeRegressor 實例

用於建立擬合子估計器集合的子估計器範本。

於 1.2 版本新增: base_estimator_ 已重新命名為 estimator_

estimators_ExtraTreeRegressor 實例清單

擬合子估計器的集合。

estimators_features_ndarray 清單

每個基礎估計器所抽取的特徵子集。

estimators_samples_ndarray 清單

每個基礎估計器所抽取的樣本子集。

max_samples_int

實際的樣本數量。

offset_float

用來從原始分數定義決策函數的偏移量。我們有以下關係: decision_function = score_samples - offset_offset_ 的定義如下。當 contamination 參數設定為 “auto” 時,偏移量等於 -0.5,因為內圍點的分數接近 0,而外圍點的分數接近 -1。當提供的 contamination 參數不是 “auto” 時,偏移量的定義方式是讓訓練時獲得預期的外圍點數量(決策函數 < 0 的樣本)。

新增於 0.20 版本。

n_features_in_int

fit 期間看到的特徵數量。

新增於 0.24 版本。

feature_names_in_形狀為 (n_features_in_,) 的 ndarray

fit 期間看到的特徵名稱。僅當 X 具有全部都是字串的特徵名稱時才會定義。

新增於 1.0 版本。

另請參閱

sklearn.covariance.EllipticEnvelope

用於偵測高斯分佈資料集中離群值的物件。

sklearn.svm.OneClassSVM

無監督離群值偵測。估計高維分佈的支撐。實作基於 libsvm。

sklearn.neighbors.LocalOutlierFactor

使用局部離群因子 (LOF) 進行無監督離群值偵測。

註解

實作基於 ExtraTreeRegressor 的集成。每棵樹的最大深度設定為 ceil(log_2(n)),其中 \(n\) 是用於建立樹的樣本數量(詳情請參閱 (Liu et al., 2008))。

參考文獻

[1]

Liu, Fei Tony, Ting, Kai Ming 和 Zhou, Zhi-Hua。「Isolation forest」。資料探勘,2008 年。ICDM’08。第八屆 IEEE 國際會議。

[2]

Liu, Fei Tony, Ting, Kai Ming 和 Zhou, Zhi-Hua。「基於隔離的異常偵測」。ACM Transactions on Knowledge Discovery from Data (TKDD) 6.1 (2012): 3。

範例

>>> from sklearn.ensemble import IsolationForest
>>> X = [[-1.1], [0.3], [0.5], [100]]
>>> clf = IsolationForest(random_state=0).fit(X)
>>> clf.predict([[0.1], [0], [90]])
array([ 1,  1, -1])

如需使用隔離森林進行異常偵測的範例,請參閱 IsolationForest 範例

decision_function(X)[原始碼]#

X 的基礎分類器的平均異常分數。

輸入樣本的異常分數計算為森林中樹的平均異常分數。

給定樹時觀測的常態性度量是包含此觀測的葉子的深度,這相當於隔離此點所需的分裂次數。如果葉子中有幾個觀測值 n_left,則會加入 n_left 個樣本隔離樹的平均路徑長度。

參數:
X形狀為 (n_samples, n_features) 的 {類陣列、稀疏矩陣}

輸入樣本。在內部,它將轉換為 dtype=np.float32,如果提供稀疏矩陣,則會轉換為稀疏的 csr_matrix

傳回:
scores形狀為 (n_samples,) 的 ndarray

輸入樣本的異常分數。分數越低,異常程度越高。負分數表示離群值,正分數表示內圍點。

註解

可以透過設定 joblib 上下文來平行化 decision_function 方法。這本質上不使用類別中初始化的 n_jobs 參數,該參數在 fit 期間使用。這是因為,對於少量樣本(例如 1000 個或更少的樣本),在沒有平行化的情況下計算分數實際上可能會更快。使用者可以在 joblib 上下文中設定工作數量,以控制平行工作數量。

from joblib import parallel_backend

# Note, we use threading here as the decision_function method is
# not CPU bound.
with parallel_backend("threading", n_jobs=4):
    model.decision_function(X)
屬性 estimators_samples_#

每個基礎估計器所抽取的樣本子集。

傳回動態產生的索引清單,識別用於擬合集成中每個成員的樣本,即袋內樣本。

注意:此清單會在每次呼叫屬性時重新建立,以便透過不儲存取樣資料來減少物件記憶體佔用量。因此,擷取屬性可能會比預期的慢。

fit(X, y=None, sample_weight=None)[原始碼]#

擬合估算器。

參數:
X形狀為 (n_samples, n_features) 的 {類陣列、稀疏矩陣}

輸入樣本。使用 dtype=np.float32 以達到最大效率。也支援稀疏矩陣,使用稀疏的 csc_matrix 以達到最大效率。

y已忽略

未使用,為了 API 一致性而存在。

sample_weight形狀為 (n_samples,) 的類陣列,預設值為 None

樣本權重。如果為 None,則樣本的權重相等。

傳回:
self物件

擬合的估算器。

fit_predict(X, y=None, **kwargs)[原始碼]#

對 X 執行擬合並傳回 X 的標籤。

離群值傳回 -1,內圍點傳回 1。

參數:
X形狀為 (n_samples, n_features) 的 {類陣列、稀疏矩陣}

輸入樣本。

y已忽略

未使用,為了 API 一致性而存在。

**kwargsdict

要傳遞給 fit 的引數。

新增於 1.4 版本。

傳回:
y形狀為 (n_samples,) 的 ndarray

內圍點為 1,離群值為 -1。

get_metadata_routing()[原始碼]#

取得此物件的中繼資料路由。

請查看關於路由機制如何運作的 使用者指南

新增於 1.5 版本。

傳回:
routingMetadataRouter

封裝路由資訊的 MetadataRouter

get_params(deep=True)[原始碼]#

取得此估算器的參數。

參數:
deepbool,預設值為 True

若為 True,將會回傳此估算器及其包含的子物件(也是估算器)的參數。

傳回:
paramsdict

參數名稱對應到其值的字典。

predict(X)[原始碼]#

預測特定樣本是否為離群值。

參數:
X形狀為 (n_samples, n_features) 的 {類陣列、稀疏矩陣}

輸入樣本。在內部,它將轉換為 dtype=np.float32,如果提供稀疏矩陣,則會轉換為稀疏的 csr_matrix

傳回:
is_inlier形狀為 (n_samples,) 的 ndarray

對於每個觀測值,指出根據擬合的模型,它是否應被視為內群值(+1 或 -1)。

註解

predict 方法可以透過設定 joblib context 來平行化。這本質上不會使用類別中初始化的 n_jobs 參數,該參數在 fit 期間使用。這是因為,對於少量樣本(例如 1000 個或更少樣本),預測實際上可能在不平行化的情況下更快。使用者可以在 joblib context 中設定工作數量來控制平行工作的數量。

from joblib import parallel_backend

# Note, we use threading here as the predict method is not CPU bound.
with parallel_backend("threading", n_jobs=4):
    model.predict(X)
score_samples(X)[原始碼]#

與原始論文中定義的異常分數相反。

輸入樣本的異常分數計算為森林中樹的平均異常分數。

給定樹時觀測的常態性度量是包含此觀測的葉子的深度,這相當於隔離此點所需的分裂次數。如果葉子中有幾個觀測值 n_left,則會加入 n_left 個樣本隔離樹的平均路徑長度。

參數:
X形狀為 (n_samples, n_features) 的 {類陣列、稀疏矩陣}

輸入樣本。

傳回:
scores形狀為 (n_samples,) 的 ndarray

輸入樣本的異常分數。分數越低,異常程度越高。

註解

score 函數方法可以透過設定 joblib context 來平行化。這本質上不會使用類別中初始化的 n_jobs 參數,該參數在 fit 期間使用。這是因為,對於少量樣本(例如 1000 個或更少樣本),計算分數實際上可能在不平行化的情況下更快。使用者可以在 joblib context 中設定工作數量來控制平行工作的數量。

from joblib import parallel_backend

# Note, we use threading here as the score_samples method is not CPU bound.
with parallel_backend("threading", n_jobs=4):
    model.score(X)
set_fit_request(*, sample_weight: bool | None | str = '$UNCHANGED$') IsolationForest[原始碼]#

請求傳遞到 fit 方法的中繼資料。

請注意,只有在 enable_metadata_routing=True 時,此方法才相關(請參閱 sklearn.set_config)。 請參閱 使用手冊,了解路由機制的運作方式。

每個參數的選項為

  • True:請求中繼資料,並在提供時傳遞給 fit。如果未提供中繼資料,則忽略請求。

  • False:不請求中繼資料,且 meta-estimator 不會將其傳遞給 fit

  • None:不請求中繼資料,如果使用者提供中繼資料,meta-estimator 將會引發錯誤。

  • str:中繼資料應以給定的別名而非原始名稱傳遞給 meta-estimator。

預設值 (sklearn.utils.metadata_routing.UNCHANGED) 會保留現有的請求。這可讓您變更某些參數的請求,而不變更其他參數。

在 1.3 版本中新增。

注意

只有當此估算器用作 meta-estimator 的子估算器時,此方法才相關,例如在 Pipeline 內部使用。否則沒有任何效果。

參數:
sample_weightstr、True、False 或 None,預設值為 sklearn.utils.metadata_routing.UNCHANGED

用於 fit 中的 sample_weight 參數的中繼資料路由。

傳回:
self物件

更新後的物件。

set_params(**params)[原始碼]#

設定此估算器的參數。

此方法適用於簡單的估算器以及巢狀物件(例如 Pipeline)。後者具有 <component>__<parameter> 形式的參數,因此可以更新巢狀物件的每個元件。

參數:
**paramsdict

估算器參數。

傳回:
self估算器實例

估算器實例。