91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Python如何實現孤立隨機森林算法

發布時間:2022-03-25 10:43:30 來源:億速云 閱讀:468 作者:小新 欄目:開發技術

這篇文章主要介紹Python如何實現孤立隨機森林算法,文中介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們一定要看完!

1 簡介

孤立森林(isolation Forest)是一種高效的異常檢測算法,它和隨機森林類似,但每次選擇劃分屬性和劃分點(值)時都是隨機的,而不是根據信息增益或基尼指數來選擇。

2 孤立隨機森林算法

2.1 算法概述

Isolation,意為孤立/隔離,是名詞,其動詞為isolate,forest是森林,合起來就是“孤立森林”了,也有叫“獨異森林”,好像并沒有統一的中文叫法。可能大家都習慣用其英文的名字isolation forest,簡稱iForest 。

iForest算法是由南京大學的周志華和澳大利亞莫納什大學的Fei Tony Liu,Kai Ming Ting等人共同移除,用于挖掘數據,它是適用于連續數據(Continuous numerical data)的異常檢測,將異常定義為“容易被孤立的離群點(more likely to be separated)”——可以理解為分布稀疏且離密度高的群體較遠的點。用統計學來解釋,在數據空間里面,分布稀疏的區域表示數據發生在此區域的概率很低,因此可以認為落在這些區域里的數據是異常的。通常用于網絡安全中的攻擊檢測和流量異常等分析,金融機構則用于挖掘出欺詐行為。對于找出的異常數據,然后要么直接清除異常數據,如數據清理中的去噪數據,要么深入分析異常數據,比如分析攻擊,欺詐的行為特征。

2.2 原理介紹

iForest 屬于Non-parametric和unsupervised的方法,即不用定義數學模型也不需要有標記的訓練。對于如何查找哪些點是否容易被孤立(isolated),iForest使用了一套非常高效的策略。假設我們用一個隨機超平面來切割(split)數據空間(data  space),切一次可以生成兩個子空間(詳細拿刀切蛋糕一分為二)。之后我們再繼續用一個隨機超平面來切割每個子空間,循環下去,直到每個子空間里面只有一個數據點為止。直觀上來講,我們可以發現那些密度很高的簇是被切分很多次才會停止切割,但是那些密度很低的點很容易很早就停到一個子空間看了。

iForest 算法得益于隨機森林的思想,與隨機森林由大量決策樹組成一樣,iForest森林也由大量的二叉樹組成,iForest 中的樹叫 isolation tree,簡稱 iTree,iTree 樹和決策樹不太一樣,其構建過程也比決策樹簡單,是一個完全隨機的過程。

假設數據集有 N 條數據,構建一顆 ITree時,從 N條數據中均勻抽樣(一般是無放回抽樣)出 n 個樣本出來,作為這棵樹的訓練樣本。在樣本中,隨機選出一個特征,并在這個特征的所有值范圍內(最小值和最大值之間)隨機選一個值,對樣本進行二叉劃分,將樣本中小于該值的劃分到節點的左邊,大于等于該值的劃分到節點的右邊。由此得到一個分裂條件和左右兩邊的數據集,然后分別在左右兩邊的數據集上重復上面的過程,直到數據集只有一條記錄或者達到了樹的限定高度。

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

2.3 算法步驟

怎么來切這個數據空間是iForest的設計核心思想,本文僅學習最基本的方法,由于切割是隨機的,所以需要用ensemble的方法來得到一個收斂值(蒙特卡洛方法),即反復從頭開始切,然后平均每次切的結果。IForest由 t個iTree(Isolation Tree)孤立樹組成,每個iTree是一個二叉樹結構,所以下面我們先說一下iTree樹的構建,然后再看iForest樹的構建。

3 參數講解

(1)n_estimators:構建多少個itree,int,optional (default=100)指定該森林中生成的隨機樹數量

(2)max_samples:采樣數,自動是256,int,optional(default='auto)

用來訓練隨機數的樣本數量,即子采樣的大小:

1)如果設置的是一個int常數,那么就會從總樣本 X 拉取 max_samples個樣本生成一棵樹  iTree

2)如果設置的是一個float浮點數,那么就會從總樣本 X 拉取 max_samples*X.shape[0] 個樣本,X.shape[0] 表示總樣本個數

3) 如果設置的是 “auto”,則max_samples=min(256, n_samples),n_samples即總樣本的數量

如果max_samples 值比提供的總樣本的數量還大的話,所有的樣本都會用來構造數,意思就是沒有采樣了,構造的 n_estimators棵ITree使用的樣本都是一樣的,即所有的樣本。

(3)contamination:c(n)默認是0.1,float in (0, 0.5),optional(default=0.1),取值范圍為(0, 0.5),表示異常數據占給定的數據集的比例,就是數據集中污染的數量,定義該參數值的作用是在決策函數中定義閾值。如果設置為“auto”,則決策函數的閾值就和論文一樣,在版本0.20中有變換:默認值從0.1變為0.22的auto。

(4)max_features:最大特征數,默認為1,int or float,optional,指定從總樣本X中抽取來訓練每棵樹iTree 的屬性的數量,默認只使用一個屬性

如果設置為 int 整數,則抽取 max_features 個屬性

如果是float浮點數,則抽取 max_features *X.shape[1] 個屬性

(5)bootstrap:boolean,optional(default = False),構建Tree時,下次是否替換采樣,為True為替換,則各個樹可放回地對訓練數據進行采樣;為False為不替換,即執行不放回的采樣

(6)n_jobs:int or None, optional (default = None), 在運行 fit() 和 predict() 函數時并行運行的作業數量。除了在 joblib.parallel_backend 上下文的情況下,None表示為1,設置為 -1 則表示使用所有可以使用的處理器 

(7)behaviour:str,default='old',決策函數 decision_function 的行為,可以是“old”和‘new’。設置為 behavior='new'將會讓 decision_function 去迎合其它異常檢測算法的API,這在未來將會設置為默認值。正如在 offset_ 屬性文檔中詳細解釋的那樣,decision_function 變得依賴于 contamination 參數,以 0 作為其檢測異常值的自然閾值。

New in version 0.20:behaviour參數添加到了0.20版本中以實現后向兼容

behaviour='old'在0.20版本中以經棄用,在0.22版本中將不能使用

behaviour參數將在0.22版本中棄用,將在0.24版本中移除

(8)random_state:int,RandomState instance or None,optional(default=None)

如果設置為 int 常數,則該 random_state 參數值是用于隨機數生成器的種子

如果設置為RandomState實例,則該 random_state 就是一個隨機數生成器

如果設置為None,則該隨機數生成器就是使用在 np.random中RandomState實例

(9)verbose:int,optional(default=0)控制樹構建過程的冗長性

(10)warm_start:bool,optional(default=False),當設置為TRUE時,重用上一次調用的結果去 fit,添加更多的樹到上一次的森林1集合中;否則就 fit一整個新的森林

4 Python代碼實現 

# _*_coding:utf-8_*_
 
#~~~~歡迎關注公眾號:電力系統與算法之美~~~~~~~·
#~~~~~~~~導入相關庫~~~~~~~~~~~·
import numpy as np
import matplotlib.pyplot as plt
from pylab import *
import matplotlib; matplotlib.use('TkAgg')
mpl.rcParams['font.sans-serif'] = ['SimHei']
mpl.rcParams['axes.unicode_minus'] = False
from sklearn.ensemble import IsolationForest  #孤立隨機森林
 
rng = np.random.RandomState(42)  #該方法為np中的偽隨機數生成方法,其中的42表示種子,只要種子一致 產生的偽隨機數序列即為一致。
 
#~~~~~~~產生訓練數據~~~~~~~~~~
X = 0.3 * rng.randn(100, 2)  #randn:標準正態分布;rand的隨機樣本位于[0, 1)中
X_train = np.r_[X + 2, X - 2]
X = 0.3 * rng.randn(20, 2)
X_test = np.r_[X + 2, X - 2]
X_outliers = rng.uniform(low=-4, high=4, size=(20, 2))
 
#~~~~~~~~~訓練模型~~~~~~~~~~~~·
clf = IsolationForest( max_samples=100,random_state=rng, contamination='auto')
clf.fit(X_train)
y_pred_train = clf.predict(X_train)
y_pred_test = clf.predict(X_outliers)
 
xx, yy = np.meshgrid(np.linspace(-5, 5, 50), np.linspace(-5, 5, 50))
Z = clf.decision_function(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)
 
#~~~~~~~~~~~~~~~~可視化~~~~~~~~~~~~~~~~~~·
plt.title("孤立隨機森林")
plt.contourf(xx, yy, Z, camp=plt.cm.Blues_r)
b1 = plt.scatter(X_train[:, 0], X_train[:, 1], c='green',
                 s=20, edgecolor='k')
b2 = plt.scatter(X_test[:, 0], X_test[:, 1], c='white',
                 s=20, edgecolor='k')
c = plt.scatter(X_outliers[:, 0], X_outliers[:, 1], c='red',
                s=20, edgecolor='k')
plt.axis('tight')
plt.xlim((-5, 5))
plt.ylim((-5, 5))
plt.legend([b1, b2, c],
           ["training observations",
            "new regular observations", "new abnormal observations"],
           loc="upper left")
plt.show()

5 結果 

Python如何實現孤立隨機森林算法

以上是“Python如何實現孤立隨機森林算法”這篇文章的所有內容,感謝各位的閱讀!希望分享的內容對大家有幫助,更多相關知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

陆良县| 博兴县| 铜山县| 历史| 武义县| 拜泉县| 法库县| 兴城市| 宁波市| 克拉玛依市| 武冈市| 射阳县| 瓦房店市| 海南省| 阿坝| 孝昌县| 台北市| 吉林省| 万载县| 孟津县| 石渠县| 理塘县| 唐海县| 扎赉特旗| 治县。| 都安| 屏东县| 深州市| 集贤县| 灌云县| 军事| 博乐市| 边坝县| 乡城县| 东山县| 睢宁县| 和田市| 永新县| 沽源县| 常德市| 深州市|