lof(local outlier factor)演算法是基於密度的異常點檢測演算法,適合於高維資料檢測。
離群點處的密度應該較鄰域內其他點的密度小。
k距離:對於點p,將其他點與之距離進行從小到大排序,第k個即為k距離
k距離鄰域:到點p的距離小於等於k距離點,共k個
可達距離:若到點p的實際距離小於k距離,則為k距離,反之為實際距離
區域性可達密度:鄰域內點到p點可達距離平均值的倒數。(注意方向不要搞反)lrd
(p)=
k∑rd
is
tlrd(p)=\frac
lrd(p)
=∑rd
istk
區域性離群因子:領域內點的區域性可達密度的均值除以p點的區域性可達密度lof
(p)=
∑lrd
klrd
(p
)lof(p)=\frac}
lof(p)
=lrd
(p)k
∑lrd
區域性離群因子(lof)的大小代表該點為離群點的可信度。即因子越大,該點越可能是離群點。
from scipy.spatial.distance import cdist
import numpy as np
class
lof:
def__init__
(self, data, k, epsilon=
1.0)
: self.data = data
self.k = k
self.epsilon = epsilon
self.n = self.data.shape[0]
defget_dist
(self)
:# 計算歐式距離矩陣
return cdist(self.data, self.data)
def_kdist
(self, arr)
:# 計算k距離
inds_sort = np.argsort(arr)
neighbor_ind = inds_sort[
1:self.k +1]
# 鄰域內點索引
return neighbor_ind, arr[neighbor_ind[-1
]]defget_rdist
(self)
:# 計算可達距離
dist = self.get_dist()1
, dist)
nei_inds, kdist =
zip(
*nei_kdist)
for i, k in
enumerate
(kdist)
: ind = np.where(dist[i]
< k)
# 實際距離小於k距離,則可達距離為k距離
dist[i]
[ind]
= k return nei_inds, dist
defget_lrd
(self, nei_inds, rdist)
:# 計算區域性可達密度
lrd = np.zeros(self.n)
for i, inds in
enumerate
(nei_inds)
: s =
0for j in inds:
s += rdist[j, i]
lrd[i]
= self.k / s
return lrd
defrun(self)
:# 計算區域性離群因子
nei_inds, rdist = self.get_rdist(
) lrd = self.get_lrd(nei_inds, rdist)
score = np.zeros(self.n)
for i, inds in
enumerate
(nei_inds)
: n =
len(inds)
lrd_nei =
sum(lrd[inds]
) score[i]
= lrd_nei / self.k / lrd[i]
return score, np.where(score > self.epsilon)[0
]if __name__ ==
'__main__'
: np.random.seed(42)
x_inliers =
0.3* np.random.randn(
100,2)
x_inliers = np.r_[x_inliers +
2, x_inliers -2]
x_outliers = np.random.uniform(low=-4
, high=
4, size=(20
,2))
data = np.r_[x_inliers, x_outliers]
lof = lof(data,
5, epsilon=
1.2)
score, out_ind = lof.run(
) outliers = data[out_ind]
import matplotlib.pyplot as plt
plt.scatter(data[:,
0], data[:,
1], color=
'b')
plt.scatter(outliers[:,
0], outliers[:,
1], color=
'r')
plt.show(
)
注:**未經嚴格測試,僅作示例。如有不當之處,請指正。
異常點 離群點檢測演算法 LOF
在資料探勘方面,經常需要在做特徵工程和模型訓練之前對資料進行清洗,剔除無效資料和異常資料。異常檢測也是資料探勘的乙個方向,用於反作弊 偽基站 金融詐騙等領域。異常檢測方法,針對不同的資料形式,有不同的實現方法。常用的有基於分布的方法,在上 下 分位點之外的值認為是異常值 例如圖1 對於屬性值常用此類...
異常點 離群點檢測演算法 LOF
在資料探勘方面,經常需要在做特徵工程和模型訓練之前對資料進行清洗,剔除無效資料和異常資料。異常檢測也是資料探勘的乙個方向,用於反作弊 偽基站 金融詐騙等領域。異常檢測方法,針對不同的資料形式,有不同的實現方法。常用的有基於分布的方法,在上 下 分位點之外的值認為是異常值 例如圖1 對於屬性值常用此類...
異常點 離群點檢測演算法 LOF解析
在資料探勘方面,經常需要在做特徵工程和模型訓練之前對資料進行清洗,剔除無效資料和異常資料。異常檢測也是資料探勘的乙個方向,用於反作弊 偽基站 金融詐騙等領域。異常檢測方法,針對不同的資料形式,有不同的實現方法。常用的有基於分布的方法,在上 下分位點之外的值認為是異常值 例如圖1 對於屬性值常用此類方...