簡介
LOF算法(Local Outlier Factor麸塞,局部離群因子檢測方法)叛买,是一種無監(jiān)督的離群檢測方法椰憋,是基于密度的離群點(diǎn)檢測方法中一個比較有代表性的算法波势。該算法會給數(shù)據(jù)集中的每個點(diǎn)計(jì)算一個離群因子LOF如暖,通過判斷LOF是否接近于1來判定是否是離群因子笆檀。若LOF遠(yuǎn)大于1,則認(rèn)為是離群因子盒至,接近于1酗洒,則是正常點(diǎn)
舉例
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)
#當(dāng)我們設(shè)置相同的seed,每次生成的隨機(jī)數(shù)相同枷遂。如果不設(shè)置seed樱衷,則每次會生成不同的隨機(jī)數(shù)
# Generate train data 生成訓(xùn)練集
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_是將一系列的序列合并到一個數(shù)組中
#y = np.r_[[0,2,0], [1,2,3],[4,5,6]]
# fit the model 訓(xùn)練模型
clf = LocalOutlierFactor.LocalOutlierFactor(n_neighbors=20) #n_neighbors臨近距離,默認(rèn)20
clf.fit(X)
#predict預(yù)測
y_pred = clf.fit_predict(X)
y_pred_outliers = y_pred[200:]
#clf.get_params() #得到參數(shù)
# 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()