基於聚類的離群點檢測

2021-07-09 23:36:46 字數 2421 閱讀 2816

在利用r軟體進行資料探勘時,離群點檢測經常是必不可少的一部分。離群點檢測的任務是發現與大部分其它物件顯著不同的物件。大部分資料探勘方法都將這種差異資訊視為雜訊丟棄,然而在部分情況下,罕見的資料可能蘊含著更大的研究價值。

離群點檢測的方法很多,例如:

基於統計的離群點檢測:在已知目標概率分布模型的前提下,計算該物件符合該模型的概率,對於高維資料的檢驗效果不佳;

基於鄰近度的離群點檢測:量化資料集之間的鄰近度,把鄰近度低的視為離群點,缺點是不適合大資料集,不能處理具有不同區域密度的資料集;

基於密度:定義乙個密度值,乙個物件的離群點得分是該物件周圍密度的逆,缺點是大資料集不適用,引數選擇也十分困難;

基於聚類:基於聚類技術來發現離群點可能是高度有效的,聚類演算法產生的簇的質量對該演算法產生的離群點的質量影響非常大;

鑑於資料探勘中對於高維資料的大資料集的處理需要,以及各個離群點檢測方法的優劣。這裡我們重點討論基於聚類的離群點檢測。

聚類分析用於發現區域性強相關的物件組,而異常檢測用來發現不與其他物件強相關的物件。因此,聚類分析非常自然的可以用於離群點檢測。這裡介紹兩種基於聚類的離群點檢測方法:

1.丟棄遠離其他簇的小簇:

一種利用聚類檢測離群點的方法是丟棄遠離其他簇的小簇。通常,該過程可以簡化為丟棄小於某個最小閾值的所有簇。

這個方法可以與任何其它聚類技術一起使用,但是需要最小簇大小和小簇與其他簇之間距離的閾值。而且這種方案對簇個數的選擇高度敏感,使用這個方案很難將離群點得分附加到物件上。

2.基於原型的聚類:

另一種比較系統的方法,首先聚類所有物件,然後評估物件屬於簇的程度(離群點得分)。在這種方法中,可以用物件到它的簇中心的距離來度量屬於簇的程度。特別的,如果刪除乙個物件導致該目標的明顯改進,則可將該物件視為離群點。例如,在k均值演算法中,刪除遠離其相關簇中心的物件能夠顯著地改進該簇的誤差平方和(sse)。

對於基於原型的聚類,評估物件屬於簇的程度(離群點得分)主要有兩種方法:一是度量物件到簇原型的距離,並用它作為該物件的離群點得分;二是考慮到簇具有不同的密度,可以度量簇到原型的相對距離,相對距離是點到質心的距離與簇中所有點到質心距離的中位數之比。

可以注意到,在基於聚類的離群點檢測中,物件是否被認為是離群點可能高度依賴於簇的個數(如k很大時的雜訊簇)。該問題也沒有乙個簡單的答案,這裡提供兩種解決思路:一種是改變簇的個數重複檢測分析,另一種是聚類得到大量小簇,此時若存在離群點,則它多半真的是乙個離群點(但這樣的缺點是一組離群點可能形成小簇從而逃避檢測)。

下面提供乙個示例,利用資料檔案consumption_data.csv(此檔案包含940個樣本,4個屬性)進行聚類分析,並計算各個樣本到各自聚類中心的距離,分析離群樣本,示例程式如下:

data=read.csv("consumption_data.csv")

data1=scale(data[2:4])

set.seed(12)

km=kmeans(data1,center=3)

#各樣本歐式距離

x1=matrix(km$centers[1,],nrow=940,ncol=3,byrow=t)

juli1=sqrt(rowsums((data1-x1)^2))

x2=matrix(km$centers[2,],nrow=940,ncol=3,byrow=t)

juli2=sqrt(rowsums((data1-x2)^2))

x3=matrix(km$centers[3,],nrow=940,ncol=3,byrow=t)

juli3=sqrt(rowsums((data1-x3)^2))

dist=data.frame(juli1,juli2,juli3)

#歐氏距離最小值

#記住這種區分點的方式!

sub=which(y>2.5)

y1=y[-sub]

y2=y[sub]

plot(1:length(y),y,xlim=c(0,length(y)),xlab="樣本點",ylab="歐氏距離",col="blue")

points(which(y>2.5),y2,pch=19,col="red")

data$id[sub]

執行上面的**可以得到如圖:

以及對應的離群點序號:

> data$id

[sub]

[1] 30 39 226 339 484 525 654 670 935

實際應用中可以暫時不設定閾值,先做散點圖,觀察散點圖並針對散點圖的具體情況設定閾值,此處設定的閾值為2.5,那麼所給的資料中有9個離散點,在聚類以及相關的資料探勘時,這些資料應該剔除。

上述只是乙個比較簡單通用的尋找離散點的方法,可適用於高維資料,其它還有許多方法,各有優劣。

離群點檢測梳理

描述 離群點檢測,是發現於大部分其他物件顯著不同的物件。大部分分析都會把這些差異資訊丟棄,然而在一些場景中,這些資料可能存在巨大的價值 應用範圍 詐騙檢測 貸款審批 電子商務 網路入侵 天氣預報等領域 分類標準 分類標準 分類描述 資料範圍 全域性離群點和區域性離群點 離群特徵是從區域性和總體來看的...

離群點檢測方法 R語言單元序列離群點檢測

對於一組資料,要找到它的離群值,有很多方法。對於一組資料,要找到它的離群值,有很多方法。這裡在cran上蒐集了一些有趣而易用的離群點檢測包以供後續使用,基本每個r包都有自己的理論和實踐材料做支撐。cran package routliers cran.r project.org cran packa...

python離群點檢測例子 異常點 離群點檢測演算法

異常點 離群點檢測演算法 瀏覽次數 456 sklearn中關於異常檢測的方法主要有兩種 1 novelty detection 當訓練資料中沒有離群點,我們的目標是用訓練好的模型去檢測另外新發現的樣本 2 outlier detection 當訓練資料中包含離群點,模型訓練時要匹配訓練資料的中心樣...