當前位置:
首頁 > 最新 > 機器學習——局部異常檢測

機器學習——局部異常檢測

今天介紹無監督機器學習中的異常檢測演算法,用來找出給定的輸入樣本中包含的異常值的問題。我們之前雖然也介紹過魯棒學習演算法,但是當樣本中包含較多異常值的時候,先出去異常值再進行學習的方法,一般會更有效。

首先介紹局部異常因子法,局部異常因子是指偏離大部分數據的異常數據進行檢測的方法。這裡我們需要用到幾個定義:

可達性距離(Reachability Distance,RD)

這裡的 d(A,B) 就是A與B的直接距離, k-distance 是 k-nearest distance,也就是第k近距離,k = 1,那就是距離最近的點,示例圖如下(Objects B and C have the same reachability distance (k=3), while D is not a k nearest neighbor):

定義了RD之後,再定義一個局部可達密度(Local Reachability Density,LRD),定義如下:

這裡我們把 A 的第 k 近鄰居。

局部可達密度反映了樣本的密集程度,應用該定義之後,我們可以定義局部異常因子(Local Outlier Factor,LOF),如下:

當A的局部因子比較小的話就被認為是正常的。這樣,我們就可以進行異常值檢測,借用維基百科中的例子做一個示例。

可以看出,紅圈比較大的就是LOF比較大,異常的概率也就更大,與事實基本符合,代碼如下:

closeall; clear; clc;

n = 100;

x = [(rand(n/2,2)-0.5)*20; randn(n/2,2)];

x(n,1) = 14;

k = 3; % k-nearest 中的k

x2 = sum(x.^2,2);

[s,t] = sort(sqrt(repmat(x2,1,n) + repmat(x2",n,1) - 2*x*x"),2);

for i = 1:k+1

for j = 1:k

RD(:,j) = max(s(t(t(:,i),j+1),k),s(t(:,i),j+1));

end

LRD(:,i) = 1./mean(RD,2);

end

LOF = mean(LRD(:,2:k+1),2)./LRD(:,1);

figure

holdon

plot(x(:,1),x(:,2),"b.","linewidth",2);

for i = 1:n

plot(x(i,1),x(i,2),"ro","Markersize",LOF(i)*10);

end

代碼的運行結果如下:

以上就是今天推送的內容,歡迎討論。


喜歡這篇文章嗎?立刻分享出去讓更多人知道吧!

本站內容充實豐富,博大精深,小編精選每日熱門資訊,隨時更新,點擊「搶先收到最新資訊」瀏覽吧!


請您繼續閱讀更多來自 機器學習 的精彩文章:

Win10將迎來重大更新 微軟推人工智慧平台 面向AI與機器學習
《後院怪獸》開發商想用機器學習提高營收,並用此獲得2000萬美元融資

TAG:機器學習 |