1. 程式人生 > >[資料探勘]離群點檢測---基於kNN的離群點檢測、LOF演算法和CLOF演算法

[資料探勘]離群點檢測---基於kNN的離群點檢測、LOF演算法和CLOF演算法

參考文獻

[1]. 陶晶. 基於聚類和密度的離群點檢測方法[D]. 華南理工大學, 2014.
[2].王雪英. 離群點預處理及檢測演算法研究[D]. 西南交通大學, 2009.
[3].胡婷婷. 資料探勘中的離群點檢測演算法研究[D]. 廈門大學, 2014.
[4]. 譚(美). 資料探勘導論[M]. 人民郵電出版社, 2007.
[5]. 百度文庫PPT(點選此處可進入該PPT頁面)

離群點檢測

在大多數研究領域中,離群點也被稱為異常值,在資料探勘中,往往是要剔除掉這些資料,可是離群點的出現也是有一點的意義的。比如下圖。該圖是一個使用者一年中的用水量情況,很明顯的可以看出,有一天的資料是明顯不正常的,該點是離群點。在我們研究他的用水規律時,該點是理當去除的。可是,它也提供給我們一個資訊,在資料統計方式正確的情況下,那天的用水出現了不合理性(可能是使用者忘記關水、水錶異常等)。應當利用起這些異常。離群點的檢測的意義也就存在了。
這裡寫圖片描述

LOF演算法

LOF演算法(Local Outlier Factor,區域性離群因子檢測方法),是基於密度的離群點檢測方法中一個比較有代表性的演算法。該演算法會給資料集中的每個點計算一個離群因子LOF,通過判斷LOF是否接近於1來判定是否是離群因子。若LOF遠大於1,則認為是離群因子,接近於1,則是正常點。為了敘述LOF演算法,首先引入以下概念:

(1)物件p的k距離
對於正整數k,物件p的第k距離可記作k-distance(p)。在樣本空間中,存在物件o,它與物件p之間的距離基座d(p,o)。如果滿足以下兩個條件,我們則認為k-distance(p)=d(p,o)
1)在樣本空間中,至少存在k個物件q,使得d

(p,q)<=d(d,o)
2)在樣本空間中,至多存在k-1個物件q,使得d(p,q)<d(p,o)
kdistance(p)=max|||po|||
顯然易見,如果使用kdistance(p)來量化物件p的區域性空間區域範圍,那麼對於物件密度較大的區域,kdistance(p)值較小,而物件密度較小的區域,kdistance(p)值較大。

(2)物件p的第k距離領域
已經物件p的第k距離,那麼,與物件p之間距離小於等於kdistance(p)的物件集合稱為物件p的第k距離領域,記作:Nk(p)
該領域其實是以p為中心,kdistanc

e(p)為半徑的區域內所有物件的集合(不包括p本身)。由於可能同時存在多個第k距離的資料,因此該集合至少包括k個物件。可以想象,離群度越大的物件的範圍往往比較大,而離群度比較小的物件範圍小。
(3)物件p相對於物件o的可達距離
公式:reachdist(p,o)=max{kdistance(o),||po||}
也就是說,如果物件p遠離物件o,則兩者之間的可達距離就是它們之間的實際距離,但是如果它們足夠近,則實際距離用o的k距離代替。

(4)區域性可達密度
物件p的區域性可達密度定義為p的k最近鄰點的平均可達密度的倒數

lrdk(p)=|Nk(p)|oNn(p)reachdistk(p,o)

(5)區域性離群點因子
表徵了稱p是離群點的程度,定義如下:
LOFk(p)=oNk(p)lrdk(o)lrdk(p)|Nk(p)|

如果物件p不是區域性離群點,則LOF(p)接近於1。即p是區域性離群點的程度較小,物件o的區域性可達密度和物件p的區域性可達密度相似,最後所得的LOF(p)值應該接近1。相反,p是區域性離群點的程度越大,最後所得的LOF(p)值越高。通過這種方式就能在樣本空間資料分佈不均勻的情況下也可以準確發現離群點。

可以想象下,一個離群點p,它的lrdk(o)是遠大於lrdk(p)的,通過特例很容易看出,這樣該演算法就可以很好的理解了

CLOF演算法

華南理工大學陶晶在他的畢業論文中,提出基於K-means演算法和LOF演算法的CLOP演算法。其實基於密度的聚類演算法的引入在離群點檢測演算法中很常見。下面簡單敘述下該演算法。
基於聚類的離群點檢測方法的基本思想是:在聚類過程中,將那些不屬於任何簇的點作為離群點。然而,基於聚類的離群點檢測方法主要目標是聚類,離群點只是聚類時產生的“副產物”。因此傳統的基於聚類的離群點離群點檢測方法檢測精度比較低。
基於密度的LOF演算法,能有效的檢測資料集中的區域性離群點和全域性離群點,檢測精度比較高。但是基於密度的LOF方法存在如下缺點,使其應用受到一定的限制。
LOF方法在檢測離群點的過程中,遍歷整個資料集以計算每個點的LOF值,使得演算法運算速度慢。同時,由於資料正常點的數量一般遠遠多於離群點的數量,而LOF方法通過比較所有資料點的LOF值判斷離群程度,這產生了大量沒必要的計算,造成時間成本太高,同時由於中間結果的儲存而浪費空間資源。因此,假如能在計算離群因子前,剪枝一部分正常資料點,則可以提高LOF方法的計算效率。
那麼如何進行剪枝呢?考慮到K-means是一種效率很高的聚類的演算法,CLOF演算法利用了該聚類演算法,對資料集進行剪枝,得到“離群點侯選集”,最後對該集合中的所有點執行LOF演算法,從而判斷是否是離群點。
綜上所述,CLOF演算法的第一階段是呼叫k均值聚類演算法,聚完類後,可以得到k個類的中心(質點),然後求出類中所有點到該質點距離的平均值,這個平均值記為半徑R,針對類中所有點,若該點到質點的距離大於等於R,則將其放入離群點候選集中。該演算法的流程圖如下。
CLOF演算法流程

基於kNN演算法的離群點檢測

基於k-近鄰平均距離(kNN)的離群點檢測演算法是一種比較簡單的檢測方法,k-近鄰演算法在機器學習的學習中已經學習過,這裡不再對他的理論進行闡述。那麼它是如何做離群點的檢測呢?其演算法流程如下。
這裡寫圖片描述

針對數值資料來說,基於距離的離群點檢測演算法比較簡單明瞭,是比較常用的演算法。但是,它在大規模資料集中,存在計算量比較大,演算法複雜度比較高的問題。為了解決這個問題,廈門大學碩士胡婷婷在她的碩士論文中提出了一種改進的基於距離的離群點檢測演算法(IDOD)。演算法先進行預先的剪枝,去除部分非離群點,結合聚類技術,並且通過剪枝規則,降低在資料集中計算的時間複雜度。