异常检测之LOF算法

简介

LOF算法(Local Outlier Factor,局部离群因子检测方法),是一种无监督的离群检测方法,是基于密度的离群点检测方法中一个比较有代表性的算法。该算法会给数据集中的每个点计算一个离群因子LOF,通过判断LOF是否接近于1来判定是否是离群因子。若LOF远大于1,则认为是离群因子,接近于1,则是正常点

举例

异常检测之LOF算法_第1张图片
LOF.png
import numpy as np
import matplotlib.pyplot as plt
from sklearn.neighbors import LocalOutlierFactor

np.random.seed(42)
#np.random.seed(0) ; np.random.rand(4) 
#当我们设置相同的seed,每次生成的随机数相同。如果不设置seed,则每次会生成不同的随机数

# Generate train data 生成训练集
X = 0.3 * np.random.randn(100, 2)
# Generate some abnormal novel observations 生成一些异常新颖的观察
X_outliers = np.random.uniform(low=-4, high=4, size=(20, 2)) 
X = np.r_[X + 2, X - 2, X_outliers] #np.r_是将一系列的序列合并到一个数组中
#y = np.r_[[0,2,0], [1,2,3],[4,5,6]]

# fit the model 训练模型
clf = LocalOutlierFactor.LocalOutlierFactor(n_neighbors=20)             #n_neighbors临近距离,默认20
clf.fit(X)

#predict预测
y_pred = clf.fit_predict(X)
y_pred_outliers = y_pred[200:]
#clf.get_params() #得到参数


# plot画图
xx, yy = np.meshgrid(np.linspace(-5, 5, 50), np.linspace(-5, 5, 50))
Z = clf._decision_function(np.c_[xx.ravel(), yy.ravel()])
Z = Z.reshape(xx.shape)

plt.title("Local Outlier Factor (LOF)")
plt.contourf(xx, yy, Z, cmap=plt.cm.Blues_r)

a = plt.scatter(X[:200, 0], X[:200, 1], c='white',
            edgecolor='k', s=20)
b = plt.scatter(X[200:, 0], X[200:, 1], c='red',
            edgecolor='k', s=20)
plt.axis('tight')
plt.xlim((-5, 5))
plt.ylim((-5, 5))
plt.legend([a, b],
       ["normal observations",
        "abnormal observations"],
       loc="upper left")
plt.show()

例子借鉴http://scikit-learn.org/stable/auto_examples/neighbors/plot_lof.html#sphx-glr-auto-examples-neighbors-plot-lof-py

你可能感兴趣的:(异常检测之LOF算法)