異常檢測Task05 高維異常

2021-10-17 11:25:07 字數 3947 閱讀 8394

主要內容:

高維資料異常檢測是指在現實生活中,一些資料集往往具有較多的維度,資料維度的增加一方面使得資料的大小飛快增加,另一方面可能會出現資料稀疏性,這種狀況被稱為維度詛咒。維度詛咒會使得距離的計算出現問題,進而對聚類方法也造成了困難。

特別在對距離的計算上,因為是高維的資料,所有點的距離幾乎都是相等的,基於距離進行異常點判斷可能會失效

1、通過主成分法,進行降維,選取低特徵值的降維後特徵進行異常點判斷(線性部分內容)

2、通過整合(ensemble)的思路.

整合方法將多個演算法或多個基檢測器的輸出結合起來。**其基本思想是一些演算法在某些子集上表現很好,一些演算法在其他子集上表現很好,然後整合起來使得輸出更加魯棒。**整合方法與基於子空間方法有著天然的相似性,子空間與不同的點集相關(其實就是bootstrap自助法),而整合方法使用基檢測器來探索不同維度的子集,將這些基學習器集合起來。

bagging一詞是bootstrap aggregating(自助法聚合),指的是對資料構建一組模型的方法

其中自助法的含義是從樣本本身中有放回地抽取更多的樣本,並對每次重抽樣重新計算統計量或模型。

自助法也可用於多變數資料。這時該方法使用資料行作為抽樣單元,可在自助資料上執行模型,估計模型引數的穩定性(或變異性),或是改進模型的**能力。如我們可以使用分類和回歸樹(也稱決策樹)在自助資料上執行多個樹模型,並平均多個樹給出的**值(或是使用分類,並選取多數人的投票),這通常要比使用單個樹的**效能更好。這一過程被稱為bagging方法。

feature bagging的基本思想與bagging相似,只是物件是 feature(特徵),即只對變數做抽樣,不對記錄做抽樣。feature bagging會按樣本的特徵進行重抽樣得到多個資料集,再使用一組(多個)模型對這些資料集進行訓練

(很像隨機森林)

整合方法的設計主要有兩步:

1.選擇基檢測器或者說模型

這些基本檢測器可以彼此完全不同,或不同的引數設定,或使用不同取樣的子資料集。feature bagging常用lof演算法為基演算法。下圖是feature bagging的通用演算法:

2.分數標準化和組合方法:

不同檢測器可能會在不同的尺度上產生分數。例如,平均k近鄰檢測器會輸出原始距離分數,而lof演算法會輸出歸一化值。另外,儘管一般情況是輸出較大的異常值分數,但有些檢測器會輸出較小的異常值分數。因此,需要將來自各種檢測器的分數轉換成可以有意義的組合的歸一化值。分數標準化之後,還要選擇乙個組合函式將不同基本檢測器的得分進行組合,最常見的選擇包括平均和最大化組合函式。

下面是兩個feature bagging兩個不同的組合方法

1)廣度優先:

2)累計求和

基探測器的設計及其組合方法都取決於特定整合方法的特定目標。很多時候,我們無法得知資料的原始分布,只能通過部分資料去學習。除此以外,演算法本身也可能存在一定問題使得其無法學習到資料完整的資訊。這些問題造成的誤差通常分為偏差和方差兩種。

方差:是指演算法輸出結果與演算法輸出期望之間的誤差,描述模型的離散程度,資料波動性。

偏差:是指**值與真實值之間的差距。即使在離群點檢測問題中沒有可用的基本真值

孤立森林(isolation forest)演算法是周志華教授等人於2023年提出的異常檢測演算法,是機器學習中少見的專門針對異常檢測設計的演算法之一,方法因為該演算法時間效率高,能有效處理高維資料和海量資料,無須標註樣本,在工業界應用廣泛。

樹演算法思想的**非常樸素,程式設計中的條件分支結構就是if-then結構,最早的決策樹就是利用這類結構分割資料的一種分類學習方法,將滿足條件和不滿足條件的按乙個個條件分割開來。

孤立森林屬於非引數和無監督的演算法,無需定義數學也不需要訓練資料有標籤。該演算法非常高效。

舉例:我們用乙個隨機平面來切割資料空間,會生成兩個子空間,再用乙個隨機超平面來切割每個子空間,一直迴圈,直到所有的子空間只有乙個資料點為止,直觀來講,那些具有高密度的簇需要被切很多次才會將其分離,而那些低密度的點很快就被單獨分配到乙個子空間了。

孤立森林認為這些很快被孤立的點就是異常點。

用四個樣本做簡單直觀的理解,d是最早被孤立出來的,所以d最有可能是異常。

怎麼來切這個資料空間是孤立森林的核心思想。因為切割是隨機的,為了結果的可靠性,要用整合(ensemble)的方法來得到乙個收斂值,即反覆從頭開始切,平均每次切的結果。孤立森林由t棵孤立的數組成,每棵樹都是乙個隨機二叉樹,也就是說對於樹中的每個節點,要麼有兩個孩子節點,要麼乙個孩子節點都沒有。樹的構造方法和隨機森林(random forests)中樹的構造方法有些類似。流程如下:

1.從訓練資料中隨機選擇乙個樣本子集,放入樹的根節點;

2.隨機指定乙個屬性,隨機產生乙個切割點v,即屬性a的最大值和最小值之間的某個數;

3.根據屬性a對每個樣本分類,把a小於v的樣本放在當前節點的左孩子中,大於等於v的樣本放在右孩子中,這樣就形成了2個子空間;

4.在孩子節點中遞迴步驟2和3,不斷地構造左孩子和右孩子,直到孩子節點中只有乙個資料,或樹的高度達到了限定高度。

獲得t棵樹之後,孤立森林的訓練就結束,就可以用生成的孤立森林來評估測試資料。

孤立森林檢測異常的假設是:異常點一般都是非常稀有的,在樹中會很快被劃分到葉子節點,因此可以用葉子節點到根節點的路徑長度來判斷一條記錄是否是異常的。和隨機森林類似,孤立森林也是採用構造好的所有樹的平均結果形成最終結果的。在訓練時,每棵樹的訓練樣本是隨機抽樣的。從孤立森林的樹的構造過程看,它不需要知道樣本的標籤,而是通過閾值來判斷樣本是否異常。因為異常點的路徑比較短,正常點的路徑比較長,孤立森林根據路徑長度來估計每個樣本點的異常程度。

孤立森林也是一種基於子空間的方法,不同的分支對應於資料的不同區域性子空間區域,較小的路徑對應於孤立子空間的低維

1.feature bagging優勢:

可以降低方差,可以給不同維度組合採用最合適的演算法,依據權重最終得到乙個整體較高的訓練結果。

2.孤立森林的優勢:

計算成本相比基於距離或基於密度的演算法更小。

具有線性的時間複雜度。

在處理大資料集上有優勢。

孤立森林不適用於超高維資料,因為孤立森林每次都是隨機選取維度,如果維度過高,則會存在過多噪音。

6.1 feature bagging

使用pyod庫生成toy example並呼叫feature bagging

6.2 使用pyod庫生成toy example並呼叫isolation forests

6.3 思考:feature bagging為什麼可以降低方差?

方差的含義是輸出結果與輸出期望之間的誤差,feature bagging核心可以給不同維度組合採用最合適的演算法,依據權重進行得分加權最終得到乙個效果較好的訓練結果,其誤差比單一模型降低了波動性也就降低了方差。

6.34思考2feature bagging存在哪些缺陷,有什麼可以優化的idea?

基探測演算法無法實現最佳選擇,且進行自助法意味著需要多次執行演算法,會消耗較多的算力資源和時間

可以在選取特徵前,對整體資料劃分測試集和訓練集檢測一下當前資料適合的基探測演算法,再進行自助法抽取特徵之後的步驟

TASK05結構陣列

結構陣列與單元陣列的轉換 單元陣列的處理 實戰演練 總結思考 a.b c a為結構陣列名,b為欄位名,c為此欄位的內容 如果使用結構陣列函式建立,則書寫格式為 array name struct field1 val1,field2 val2,array name為結構陣列名,field為欄位名,v...

pandas學習 Task05合併

問題二 merge ordered和merge asof的作用是什麼?和merge是什麼關係?merge ordered 根據官方說明,適用與帶時間序列的資料,自帶ffill bfill 引數,可以方便填充 merge asof 模糊匹配版的merge 問題三 請構造乙個多級索引與多級索引合併的例子...

天池語義分割task05

乙個成熟合格的深度學習訓練流程至少具備以下功能 在訓練集上進行訓練,並在驗證集上進行驗證 模型可以儲存最優的權重,並讀取權重 記錄下訓練集和驗證集的精度,便於調參。一 學習目標 理解驗證集的作用,並使用訓練集和驗證集完成訓練 學會使用 pytorch 環境下的模型讀取和載入,並了解調參流程 二 構造...