日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

异常检测算法之IForest

發(fā)布時間:2023/12/20 编程问答 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 异常检测算法之IForest 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

前言

IForest即孤立森林,可以用于做異常檢測。一句話總結(jié)IForest做異常檢測的原理:異常點密度小,基于樹模型容易被一下切割出來,正常值密度大,需要切割多次才能得到目標(biāo)值。

原理

iForest算法得益于隨機森林的思想,與隨機森林由大量決策樹組成一樣,iForest森林也由大量的二叉樹組成。iForest中的樹叫isolation tree,簡稱iTree。iTree樹和決策樹不太一樣,其構(gòu)建過程也比決策樹簡單,是一個完全隨機的過程。
每個iTree的實現(xiàn)步驟
1、 假設(shè)數(shù)據(jù)集有N條數(shù)據(jù),構(gòu)建一顆iTree時,從N條數(shù)據(jù)中均勻抽樣(一般是無放回抽樣)出ψ個樣本出來,作為這顆樹的訓(xùn)練樣本。
2、 在樣本中,隨機選一個特征,并在這個特征的所有值范圍內(nèi)(最小值與最大值之間)隨機選一個值,對樣本進行二叉劃分,將樣本中小于該值的劃分到節(jié)點的左邊,大于等于該值的劃分到節(jié)點的右邊。由此得到一個分裂條件和左、右兩邊的數(shù)據(jù)集。
3、 然后分別在左右兩邊的數(shù)據(jù)集上重復(fù)上面的過程,直到數(shù)據(jù)集只有一條記錄或者達到了樹的限定高度。

獲得t個iTree之后,iForest 訓(xùn)練就結(jié)束,然后我們可以用生成的iForest來評估測試數(shù)據(jù)了。對于一個訓(xùn)練數(shù)據(jù)x,我們令其遍歷每一棵iTree,然后計算x最終落在每個樹第幾層(x在樹的高度)。然后我們可以得出x在每棵樹的高度平均值,即 the average path length overt iTrees。
獲得每個測試數(shù)據(jù)的average path length后,我們可以設(shè)置一個閾值(邊界值),average path length 低于此閾值的測試數(shù)據(jù)即為異常。

圖1 iForest構(gòu)建iTree示例,異常數(shù)據(jù)點(17,17)通常離根節(jié)點很近

由于異常數(shù)據(jù)的數(shù)量較小且特征值和正常數(shù)據(jù)差別很大。因此,構(gòu)建iTree的時候,異常數(shù)據(jù)離根更近,而正常數(shù)據(jù)離根更遠。一棵iTree的結(jié)果往往不可信,iForest算法通過多次抽取樣本,構(gòu)建多棵二叉樹。最后整合所有樹的結(jié)果,并取平均深度作為最終的輸出深度,由此計算數(shù)據(jù)點的異常分值。

優(yōu)缺點

優(yōu)點:

iForest具有線性時間復(fù)雜度,IForest是集成算法,因此可以用在海量數(shù)據(jù)集上,通常樹的數(shù)量越多,算法越穩(wěn)定。

缺點:

1、不適用與特別高維的數(shù)據(jù)。由于每次切數(shù)據(jù)空間都是隨機選取一個維度,建完樹后仍然有大量的維度信息沒有被使用,導(dǎo)致算法可靠性降低。高維空間還可能存在大量噪音維度或無關(guān)維度(irrelevant attributes),影響樹的構(gòu)建。對這類數(shù)據(jù),建議使用子空間異常檢測(Subspace Anomaly Detection)技術(shù)
2、iForest僅對Global Anomaly 敏感,即全局稀疏點敏感,不擅長處理局部的相對稀疏點 (Local Anomaly)。目前已有改進方法發(fā)表于PAKDD,詳見“Improving iForest with Relative Mass”。

適用場景

適用于樣本維度不是特別高的場景

參數(shù)詳解

classpyod.models.iforest.IForest(n_estimators=100, max_samples='auto', contamination=0.1, max_features=1.0, bootstrap=False, n_jobs=1, random_state=None, verbose=0)n_estimators:估算器數(shù)量。默認(rèn)100棵樹 max_samples:訓(xùn)練每個估算器(tree)需要抽取的樣本數(shù)。默認(rèn)選256個樣本建樹 int:抽取max_samples個 float:抽取max_samples*X.shape[0](即樣本行數(shù))個 auto:抽取min(256, n_samples)個contamination:污染度即假設(shè)每個數(shù)據(jù)集包含的噪聲含量 ; max_features:訓(xùn)練每個估算器需要抽取的特征數(shù),高維數(shù)據(jù)時不必分割所有特征 int:抽取max_features個 float:抽取max_features*X.shape[1]即(樣本列數(shù))個<占比>bootstrap: true:單一樹需擬合替換的隨機樣本 false:進行無需更換的取樣n_jobs:并行作業(yè)數(shù)。-1時,n_jobs為CPU核心數(shù)random_state:隨機數(shù)種子/生成器verbose:控制建樹過程

總結(jié)

經(jīng)實踐,發(fā)現(xiàn)IForest針對數(shù)據(jù)量大,特征少的業(yè)務(wù)場景,進行異常識別的效果非常不錯。但是需要注意在調(diào)整contamination參數(shù)的時候,若數(shù)據(jù)中識別的噪聲數(shù)據(jù)量不滿足該參數(shù),則不會做任何處理。即若設(shè)置噪聲占比為10%,但是模型識別的噪聲數(shù)量小于10%(比如只識別了7%的噪聲),這個時候模型只會返回7%的噪聲,并不會按照10%噪聲占比量進行返回。一定要注意這種情況,這種情況可能的原因之一:當(dāng)噪聲數(shù)據(jù)聚成了一個簇時,若實際的噪聲占比為15%,但是我初始設(shè)置的是contamination為10%。這時候由于有約5%的噪聲在模型中對應(yīng)的深度相同,即異常分?jǐn)?shù)相同,則造成模型最終認(rèn)為這些數(shù)據(jù)在當(dāng)前的參數(shù)設(shè)定下不能認(rèn)定為噪聲。
PS:該模型最終是將每條數(shù)據(jù)在IForest中所處的深度轉(zhuǎn)化為一個異常值分?jǐn)?shù),按照異常值分?jǐn)?shù)進行排序,通過contamination的設(shè)定值截取前top的數(shù)據(jù)作為噪聲輸出來完成整個噪聲識別流程。

總結(jié)

以上是生活随笔為你收集整理的异常检测算法之IForest的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。