1. 程式人生 > >異常(Outlier)檢測演算法綜述

異常(Outlier)檢測演算法綜述

什麼是異常(outlier)?Hawkins(1980)給出了異常的本質性的定義:異常是在資料集中與眾不同的資料,使人懷疑這些資料並非隨機偏差,而是產生於完全不同的機制。聚類演算法對異常的定義:異常是聚類嵌於其中的背景噪聲。異常檢測演算法對異常的定義:異常是既不屬於聚類也不屬於背景噪聲的點。它的行為與正常的行為有顯著的不同。在某個季節裡,某一天的氣溫很高或很低,這個溫度資料就是一個異常。異常檢測和分析是資料探勘中一個重要方面,也是一個非常有趣的挖掘課題。它用來發現“小的模式”(相對於聚類),即資料集中間顯著不同於其它資料的物件。異常檢測具有廣泛的應用,如電信和信用卡欺騙、貸款審批、藥物研究、醫療分析、消費者行為分析、氣象預報、金融領域客戶分類、網路入侵檢測等 。

  一、異常檢測方法的分類

  異常資料探勘是一個非常有趣的研究課題,國內外關於這方面的已提出的演算法文獻非常多,這些方法大致分為四類:基於統計(statistical-based)的方法、基於距離(distance-based)的方法、基於偏差(deviation-based)的方法、基於密度(density-based)的方法。

  (一)基於統計的方法

  假設給定的資料集服從一個隨機分佈(如正態分佈等),用不一致性測試(discordancy test)識別異常。存在問題是,在許多情況下,使用者並不知道這個資料分佈;而且現實資料也往往不符合任何一種理想狀態的數學分佈;即使在低維(一維或二維)時的資料分佈已知,在高維情況下,估計資料點的分佈是極其困難的。

  (二)基於距離的方法

  Knorr和Ng(VLDB’1998)提出一種基於距離的異常檢測方法,基於距離的異常定義:資料集S中一個物件O稱為DB(p,D)-outlier,如果它滿足下列性質:資料集S中至少p*100%的物件與O的距離大於距離D。簡單的說,基於距離的異常點就是那些沒有“足夠多”的鄰居的物件。採取不同的引數p和D , DB(p,D)-outlier可以表示所有的基於統計的異常。基於距離的異常檢測的演算法又分為三個基本型別:基於索引(index-based)的演算法、巢狀迴圈(nested-loop)演算法、基於單元(cell-based)的方法。

  1.基於索引的演算法

  尋找所有的DB(p,D)-outlier可以通過對最近鄰查詢或以O為中心的範圍查詢的回答來實現。基於多維索引結構R-Tree或kd-Tree演算法複雜度是O(kN2 ),其中k為維數,N為資料點數。缺點:需要建立多維索引結構,時間複雜度大。

  2.巢狀迴圈演算法NL

  將記憶體緩衝區空間劃分成相等的兩部分,資料集分成幾個大小和每部分緩衝區相等的邏輯塊,通過認真選擇調入每一部分緩衝區的次序,使I/O次數最小演算法複雜度是O(kN2)其中k為維數,N為資料點數。 特點:不需要建立多維索引結構,時間複雜度較大。

  3.基於單元的方法

  資料空間被劃分為邊長為D/(2k1/2)的單元;每個單元有兩個包圍層第一層為1倍的單元厚,第二層為int(2k1/2 -1)+1倍的單元厚確定異常,

  若cell_+_1_layer_count>M,單元中的物件都不是異常;

  若cell_+_2_layer_count<=M,單元中的所有物件都是異常;

  否則,單元中的一些物件可能為異常,逐個物件進行處理。演算法複雜度是O(ck+N)。

  由於索引建立的開銷很大,簡單索引演算法沒有競爭性當k<=4時,基於單元的演算法在N越大時優越性越明顯當k>=5之後,巢狀迴圈演算法開始顯現出優勢。

  4.基於距離的演算法的改進

  Knorr和Ng(VLDB’1998)基於距離的異常檢測方法的缺陷輸入引數p與D很難確定,並且對於不同引數,結果有很大不穩定性。這就需要使用者反覆輸入p與D進行測試,以確定一個滿意解;不能給定異常的程度;演算法的複雜度較高。Rastogi和Ramaswamy(SIGMOD’2000)提出了一個新的基於距離異常定義

  :Dnk 異常,用Dk(p)表示點p和它的第k個最近鄰的距離,給定d維空間中包含N個點的資料集,引數n和k(自然數),如果滿足Dk(p’)>Dk(p)的點p’不超過n-1個,那麼稱p為Dnk 異常。如果對資料點根據它們的Dk(p)距離進行排序,那麼前n個點就被看作異常。迴圈巢狀演算法(Nested-loop Algorithm),對每個點p,計算它的第k個最近鄰的距離Dk(p),把具有極大Dk值前n個點作為異常。上面的演算法每次處理一個點p,那麼需要掃描一遍資料庫,總共需要掃描N遍(N為資料點數)。 基於索引的演算法(Index-based Algo?鄄rithm),用如R*-樹的空間索引結構儲存。基於劃分的演算法(partition-based Algorithm) ,如果某個點的Dk(p)較小的話,那麼不可能是Dnk 異常,可以先對資料集進行劃分,然後估計每個劃分的Dk(p)的上、下界,如果能判定某個劃分不可能包含異常的話,那麼就可以直接把它刪除掉;然後再從剩下的劃分(侯選劃分)來計算異常。現有的許多聚類演算法可以用來劃分資料集,如BIRCH。

  (三)基於偏差的方法

  Argrawal和Ragaran(KDD’1995)提出一種“序列異常”(sequential exception)的概念。演算法介紹給定n個物件的集合S,建立一個子集序列{S1,S2,…,Sm},這裡2≤m≤n,滿足Sj-1

  (四)基於密度的方法

  距離異常的缺陷,基於密度的方法的有關概念物件p的k-距離(k-distance) 對任意的自然數k,定義p的k-距離(k-distance(p)),為p和某個物件o之間的距離,這裡的o滿足:

  至少存在k個物件o’∈D\{p},使得d(p, o’) d(p, o),並且至多存在k-1個物件o’ ∈D\{p},使得d(p, o’) < d(p, o)。 基於密度的方法的有關概念,

  1.物件p的k-距離鄰域(Nk-distance), 給定p的k-距離k-distance(p),p的k-距離鄰域包含所有與p的距離不超過k-distance(p)的物件。

  2.物件p相對於物件o的可達距離,給定自然數k,物件p相對於物件o的可達距離為:

  3. 物件p的區域性可達密度(Local Reachable Dis?鄄tance),物件p的區域性可達密度為物件p與它的MinPts-鄰域的平均可達距離的倒數。

  4.物件p的區域性異常因子(Local Outlier Factor), 區域性異常的性質物件p的區域性異常因子表示p的異常程度,區域性異常因子愈大,就認為它更可能異常;反之則可能性小。簇內靠近核心點的物件的LOF接近於1,那麼不應該被認為是區域性異常。而處於簇的邊緣或是簇的外面的物件的LOF相對較大。

  區域性異常因子計算:第一步先產生所有點的MinPts-鄰域(同時得到MinPts-距離),並計算到其中每個點的距離; 對低維資料,可以利用網格(Grid)來作k-NN查詢,整個計算時間為 O(n );對中維或中高維資料,必須採用索引結構如X-樹等,使得作k-NN查詢的時間為O(logn) ,整個計算時間為 O(n logn);對特高維資料,索引結構不再有效,時間複雜度提高到O(n2)。第二步計算每個點的區域性異常因子。

  二、演算法小結

  基於統計的異常檢測應用主要侷限於科研計算,這主要是因為必須事先知道資料的分佈特徵這就限制了它的應用範圍。 序列異常檢測演算法提出的序列異常的概念並沒有得到普遍的認同。這是因為序列異常在概念上仍然有一定缺陷,遺漏了不少的異常資料。基於距離的演算法跟基於統計的演算法相比,不需要使用者擁有任何領域知識。與“序列異常”相比,在概念上更加直觀。更重要的是,距離異常更接近Hawkins的異常本質定義。基於密度的異常觀點比基於距離的異常觀點更貼近Hawkins的異常定義,因此能夠檢測出基於距離異常演算法所不能識別的一類異常資料———區域性異常。區域性異常觀點擯棄了以前所有的異常定義中非此即彼的絕對異常觀念,更加符合現實生活中的應用。

  上述的異常檢測演算法是以靜態資料集為研究物件,需要對資料集進行多次掃描,才能得到輸出結果。在現實生活中,對動態的資料集,即流資料的線上處理的需求更為迫切,因此,只需進行一次掃描便得到結果的資料流異常檢測演算法,成為當前的研究熱點。