<tbody id="fuft6"><noscript id="fuft6"><video id="fuft6"></video></noscript></tbody>
    <tbody id="fuft6"><noscript id="fuft6"></noscript></tbody>
    <em id="fuft6"><acronym id="fuft6"></acronym></em>
          <button id="fuft6"><acronym id="fuft6"><u id="fuft6"></u></acronym></button>
          首頁技術文章正文

          孤立森林算法介紹,這次終于看懂了!

          更新時間:2019-11-08 來源:黑馬程序員 瀏覽量:

          孤立森林算法應用于網絡安全中的攻擊檢測,金融交易欺詐檢測,疾病偵測,和噪聲數據過濾等。

           

          1. 孤立森林簡介

          iForest(IsolationForest)孤立森林是一個基于Ensemble 的快速異常檢測方法,具有線性時間復雜度和高精準度,是符合大數據處理要求的state-of-the-art算法。


          iForest 適用于連續數據的異常檢測,將異常定義為“容易被孤立的離群點”,可以理解為分布稀疏且離密度高的群體較遠的點。用統計學來解釋,在數據空間里面,分布稀疏的區域表示數據發生在此區域的概率很低,因而可以認為落在這些區域里的數據是異常的。


          iForest 即不用定義數學模型也不需要有標記的訓練。對于如何查找哪些點是否容易被孤立,iForest 使用了一套非常高效的策略。


          假設我們用一個隨機超平面來切割數據空間, 切一次可以生成兩個子空間。之后我們再繼續用一個隨機超平面來切割每個子空間,循環下去,直到每子空間里面只有一個數據點為止。直觀上來講,我們可以發現那些密度很高的簇是可以被切很多次才會停止切割,但是那些密度很低的點很容易很早的就停到一個子空間了。

           

           

          1575879241325_孤立森林算法.png


          2. 算法思路

          怎么來切這個數據空間是iForest的設計核心思想,這里僅介紹最基本的方法。由于切割是隨機的,所以需要用ensemble的方法來得到一個收斂值(蒙特卡洛方法),即反復從頭開始切,然后平均每次切的結果。iForest由t個iTree(Isolation Tree)孤立樹組成,每個iTree

          是一個二叉樹結構,其實現步驟如下:

          1. 從訓練數據中隨機選擇Ψ個點樣本點作為子樣本,放入樹的根節點。

          2. 隨機指定一個維度,在當前節點數據中隨機產生一個切割點p——切割點產生于當前節點數據中指定維度的最大值和最小值之間。

          3. 以此切割點生成了一個超平面,然后將當前節點數據空間劃分為2 個子空間:把指定維度里小于p的數據放在當前節點的左邊,把大于等于p的數據放在當前節點的右邊。

          4. 在子節點中遞歸步驟2 和3,不斷構造新的子節點,直到子節點中只有一個數據(無法再繼續切割)或子節點已到達限定高度。

           

          獲得t個iTree之后,iForest訓練就結束,然后我們可以用生成的iForest來評估測試數據了。對于一個訓練數據x,我們令其遍歷每一棵iTree,然后計算x 最終落在每個樹第幾層(x在樹的高度)。然后我們可以得出x在每棵樹的高度平均值。獲得每個測試數據的高度平均值后,我們可以設置一個閾值(邊界值),高度平均值低于此閾值的測試數據即為異常。也就是說異常在這些樹中只有很短的平均高度?!就扑]了解黑馬程序員大數據課程

           

          1575879250727_孤立森林算法2.png


          b 和c 的高度為3,a的高度是2,d的高度是1??梢钥吹絛 最有可能是異常,因為其最早就被孤立(isolated)了。

           

          3. 算法建模

          3.1 參數設置

          (1)n_estimators:int,可選(默認值= 100),集合中的基本估計量的數量

          (2)max_samples:int 或float,optional(default =“auto”)

                   從X 中抽取的樣本數量,以訓練每個基本估計量。

                   ?如果為int,則繪制max_samples 采樣。

                   ?如果為float,則繪制max_samples * X.shape [0]個采樣。

                   ?如果是“auto”,那么max_samples = min(256,n_samples)。

                   ?如果max_samples 大于提供的樣本數量,則所有樣本都將用于所有樹木(不進行采樣)。

          (3)contamination:float(0.,0.5),可選(默認值= 0.1)

          (4)數據集的contamination 量,即數據集中異常值的比例。在擬合時用于定義決策函數的閾值。

          3.2 代碼實戰

          代碼實現:

          import pandas as pd
          import numpy as np
          from sklearn.ensemble import IsolationForest
          #todo:孤立森林建模
          #1. 生成訓練數據
          rng = np.random.RandomState(42)
          X = 0.3 * rng.randn(100, 2) #生成100 行,2 列
          X_train = np.r_[X + 2, X - 2]
          print(X_train)
          # 產生一些異常數據
          X_outliers = rng.uniform(low=-4, high=4, size=(20, 2))
          iForest= IsolationForest(contamination=0.1)
          iForest = iForest.fit(X_train)
          #預測
          pred = iForest.predict(X_outliers)
          print(pred)
          # [-1 1 -1 -1 -1 -1 -1 1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1]
          #-1 為異常值1 表示正常值


          代碼解釋:

          1575879261041_孤立森林算法3.jpg


          猜你喜歡:

          圖論算法介紹
          冒泡排序算法

          在線咨詢 我要報名
          和我們在線交談!

          黄色网站片

          <tbody id="fuft6"><noscript id="fuft6"><video id="fuft6"></video></noscript></tbody>
            <tbody id="fuft6"><noscript id="fuft6"></noscript></tbody>
            <em id="fuft6"><acronym id="fuft6"></acronym></em>
                  <button id="fuft6"><acronym id="fuft6"><u id="fuft6"></u></acronym></button>