<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          【機(jī)器學(xué)習(xí)】異常檢測算法之(HBOS)-Histogram-based Outlier Score

          共 4125字,需瀏覽 9分鐘

           ·

          2022-04-11 19:01

          HBOS全名為:Histogram-based Outlier Score。它是一種單變量方法的組合,不能對特征之間的依賴關(guān)系進(jìn)行建模,但是計算速度較快,對大數(shù)據(jù)集友好,其基本假設(shè)是數(shù)據(jù)集的每個維度相互獨(dú)立,然后對每個維度進(jìn)行區(qū)間(bin)劃分,區(qū)間的密度越高,異常評分越低。理解了這句話,基本就理解了這個算法。下面我專門畫了兩個圖來解釋這句話。

          一、HBOS算法流程

          1、靜態(tài)寬度直方圖

          標(biāo)準(zhǔn)的直方圖構(gòu)建方法,在值范圍內(nèi)使用k個等寬箱,樣本落入每個箱的頻率(相對數(shù)量)作為密度(箱子高度)的估計,時間復(fù)雜度:O(n)
          注意:等寬分箱,每個箱中的數(shù)據(jù)寬度相同,不是指數(shù)據(jù)個數(shù)相同。例如序列[5,10,11,13,15,35,50,55,72,92,204,215],數(shù)據(jù)集中最大值是215,最小值是5,分成3個箱,故每個箱的寬度應(yīng)該為(215-5)/3=70,所以箱的寬度是70,這就要求箱中數(shù)據(jù)之差不能超過70,并且要把不超過70的數(shù)據(jù)全放在一起,最后的分箱結(jié)果如下:
          箱一:5,10,11,13,15,35,50,55,72;箱二:92;箱三:204,215

          這個是分5箱的圖

          2、動態(tài)寬度直方圖

          首先對所有值進(jìn)行排序,然后固定數(shù)量的N/k 個連續(xù)值裝進(jìn)一個箱里,其 中N是總實(shí)例數(shù),k是箱個數(shù),直方圖中的箱面積表示實(shí)例數(shù),因?yàn)橄涞膶挾仁怯上渲械谝粋€值和最后一個值決定的,所有箱的面積都一樣,因此每一個箱的高度都是可計算的。這意味著跨度大的箱的高度低,即密度小,只有一種情況例外,超過k個數(shù)相等,此時允許在同一個箱里超過N/k值,時間復(fù)雜度:O(n×log(n))
          還是用序列[5,10,11,13,15,35,50,55,72,92,204,215]舉例,也是假如分3箱,那么每箱都是4個,寬度為邊緣之差,第一個差為15-5=10,第二差為72-35=37,第三個箱寬為215-92=123,為了保持面積相等,所以導(dǎo)致后面的很矮,前面的比較高,如下圖所示(非嚴(yán)格按照規(guī)則):

          二、算法推導(dǎo)過程

          對每個維度都計算了一個獨(dú)立的直方圖,其中每個箱子的高度表示密度的估計,然后為了使得最大高度為1(確保了每個特征與異常值得分的權(quán)重相等),對直方圖進(jìn)行歸一化處理。最后,每一個實(shí)例的HBOS值由以下公式計算:
          推導(dǎo)過程:
          假設(shè)樣本p第 i 個特征的概率密度為p i ( p ) ,則p的概率密度可以計算為,d為總的特征的個數(shù):
          兩邊取對數(shù):
          概率密度越大,異常評分越小,為了方便評分,兩邊乘以“-1”:
          最后可得:

          PyOD是一個可擴(kuò)展的Python工具包,用于檢測多變量數(shù)據(jù)中的異常值。它可以在一個詳細(xì)記錄API下訪問大約20個離群值檢測算法。

          三、應(yīng)用案例詳解

          1、基本用法

          from pyod.models.hbos HBOSHBOS(       n_bins=10,        alpha=0.1,        tol=0.5,        contamination=0.1       )

          2、模型參數(shù)

          n_bins:分箱的數(shù)量
          alpha:用于防止邊緣溢出的正則項(xiàng)
          tol:用于設(shè)置當(dāng)數(shù)據(jù)點(diǎn)落在箱子外時的寬容度
          contamination:用于設(shè)置異常點(diǎn)的比例
          3、應(yīng)用案例
          #導(dǎo)入包from pyod.utils.data import generate_data,evaluate_print
          # 樣本的生成X_train, y_train, X_test, y_test = generate_data(n_train=200, n_test=100, contamination=0.1)
          X_train.shape(200, 2)
          X_test.shape(100, 2)
          from pyod.models import hbosfrom pyod.utils.example import visualize
          # 模型訓(xùn)練clf = hbos.HBOS()clf.fit(X_train)y_train_pred = clf.labels_y_train_socres = clf.decision_scores_
          #返回未知數(shù)據(jù)上的分類標(biāo)簽 (0: 正常值, 1: 異常值)y_test_pred = clf.predict(X_test) # 返回未知數(shù)據(jù)上的異常值 (分值越大越異常)y_test_scores = clf.decision_function(X_test)
          print(y_test_pred)array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1])
          print(y_test_scores)array([1.94607743, 1.94607743, 1.94607743, 3.18758465, 2.99449223, 1.94607743, 3.18758465, 2.99449223, 1.94607743, 3.18758465, 1.94607743, 1.94607743, 3.18758465, 1.94607743, 1.94607743, 1.94607743, 3.18758465, 1.94607743, 2.99449223, 1.94607743, 1.94607743, 1.94607743, 1.94607743, 3.18758465, 3.18758465, 2.99449223, 1.94607743, 1.94607743, 1.94607743, 3.18758465, 1.94607743, 2.99449223, 1.94607743, 1.94607743, 1.94607743, 1.94607743, 2.99449223, 1.94607743, 1.94607743, 1.94607743, 1.94607743, 1.94607743, 3.18758465, 1.94607743, 1.94607743, 2.99449223, 2.99449223, 3.18758465, 2.99449223, 1.94607743, 1.94607743, 1.94607743, 1.94607743, 1.94607743, 3.18758465, 1.94607743, 3.18758465, 3.18758465, 1.94607743, 1.94607743, 1.94607743, 2.99449223, 3.18758465, 2.99449223, 1.94607743, 1.94607743, 3.18758465, 1.94607743, 1.94607743, 1.94607743, 1.94607743, 1.94607743, 1.94607743, 2.99449223, 1.94607743, 2.99449223, 1.94607743, 3.18758465, 3.18758465, 1.94607743, 2.99449223, 2.99449223, 1.94607743, 1.94607743, 1.94607743, 1.94607743, 2.99449223, 1.94607743, 3.18758465, 1.94607743, 6.36222028, 6.47923046, 6.5608128 , 6.52101746, 6.36222028, 6.52015473, 6.44010653, 5.30002108, 6.47923046, 6.51944504])
          # 模型評估clf_name = 'HBOS'evaluate_print(clf_name, y_test, y_test_scores)HBOS ROC:1.0, precision @ rank n:1.0
          # 模型可視化visualize(clf_name, X_train, y_train, X_test, y_test, y_train_pred,y_test_pred, show_figure=True, save_figure=False )


          四、總?? 結(jié)

          HBOS這個算法原理簡單,復(fù)雜度低,在大數(shù)據(jù)場景比較好用,但是異常識別的效果一般,且針對特征間比較獨(dú)立的場景,簡單點(diǎn)講該算法就是把數(shù)據(jù)劃分為多個區(qū)間,然后根據(jù)每個區(qū)間的頻次根據(jù)概率密度函數(shù)轉(zhuǎn)化為對應(yīng)的出現(xiàn)概率,在將這個概率轉(zhuǎn)化為異常分?jǐn)?shù),以此來區(qū)分異常數(shù)據(jù)
          因此HBOS在全局異常檢測問題上表現(xiàn)良好,但在局部異常的檢測上效果一般。
          往期精彩回顧




          瀏覽 109
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  性爱视频久久 | 91av ai | 久久久久久久久久免费 | 色久婷婷综合在线亚洲 | 免费做爱网站在线观看 |