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