孤立森林演算法應用於網路安全中的攻擊檢測,金融交易欺詐檢測,疾病偵測,和雜訊資料過濾等。
1. 孤立森林簡介
iforest(isolationforest)孤立森林是乙個基於ensemble 的快速異常檢測方法,具有線性時間複雜度和高精準度,是符合大資料處理要求的state-of-the-art演算法。
iforest 適用於連續資料的異常檢測,將異常定義為「容易被孤立的離群點」,可以理解為分布稀疏且離密度高的群體較遠的點。用統計學來解釋,在資料空間裡面,分布稀疏的區域表示資料發生在此區域的概率很低,因而可以認為落在這些區域裡的資料是異常的。
iforest 即不用定義數學模型也不需要有標記的訓練。對於如何查詢哪些點是否容易被孤立,iforest 使用了一套非常高效的策略。
假設我們用乙個隨機超平面來切割資料空間, 切一次可以生成兩個子空間。之後我們再繼續用乙個隨機超平面來切割每個子空間,迴圈下去,直到每子空間裡面只有乙個資料點為止。直觀上來講,我們可以發現那些密度很高的簇是可以被切很多次才會停止切割,但是那些密度很低的點很容易很早的就停到乙個子空間了。
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在每棵樹的高度平均值。獲得每個測試資料的高度平均值後,我們可以設定乙個閾值(邊界值),高度平均值低於此閾值的測試資料即為異常。也就是說異常在這些樹中只有很短的平均高度。【推薦了解黑馬程式設計師大資料課程】
b 和c 的高度為3,a的高度是2,d的高度是1。可以看到d 最有可能是異常,因為其最早就被孤立(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 表示正常值
**解釋:
猜你喜歡:
孤立森林 實現 孤立森林演算法介紹,這次終於看懂了
孤立森林演算法應用於網路安全中的攻擊檢測,金融交易欺詐檢測,疾病偵測,和雜訊資料過濾等。1.孤立森林簡介 iforest isolationforest 孤立森林是乙個基於ensemble 的快速異常檢測方法,具有線性時間複雜度和高精準度,是符合大資料處理要求的state of the art演算法...
孤立森林 Isolation Forest
前言 隨著機器學習近年來的流行,尤其是深度學習的火熱。機器學習演算法在很多領域的應用越來越普遍。最近,我在一家廣告公司做廣告點選反作弊演算法研究工作。想到了異常檢測演算法,並且上網調研發現有乙個演算法非常火爆,那就是本文要介紹的演算法 isolation forest,簡稱 iforest 南大周志...
周志華 孤立森林Isolation Forest
一 給定資料集x,是個二維陣列,row代表樣本數,col代表每個樣本的屬性維度 二 從這些資料集中隨機選取256個樣本。建立二叉樹,初始的高度預設為0 隨機選取某個屬性q 屬性集q 在該屬性q中從最大值和最小值之間選取屬性值p,將小於p的值劃分到左子樹,大於p的值劃分到右子樹。遞迴劃分左右子樹。遞迴...