使用局部离群因子(LOF)进行离群检测

时间:2019-07-26 17:59:58

标签: python scikit-learn outliers

我正在使用医疗保险索赔数据,并希望识别欺诈性索赔。一直在网上阅读以尝试找到更好的方法。我在scikit-learn.org上遇到了以下代码

有人知道如何选择离群值吗?代码将它们绘制在图形中,但我想尽可能选择那些离群值。

我尝试将y_predictions附加到x数据帧,但这没有用。

print(__doc__)

import numpy as np
import matplotlib.pyplot as plt
from sklearn.neighbors import LocalOutlierFactor

np.random.seed(42)

# 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]

# fit the model
clf = LocalOutlierFactor(n_neighbors=20)
y_pred = clf.fit_predict(X)
y_pred_outliers = y_pred[200:]

下面是我尝试的代码。

X['outliers'] = y_pred

1 个答案:

答案 0 :(得分:0)

前200个数据是异常值,后20个数据是异常值。在X上执行fit_predict时,您将在y_pred中获得离群值(-1)或离群值(1)。因此,要获取预测的离群值,您需要获取y_pred = -1并在X中获取相应的值。下面的脚本将为您提供X的离群值。

X_pred_outliers = [each[1] for each in list(zip(y_pred, X.tolist())) if each[0] == -1]

我将y_pred和X组合成一个数组,并检查y = -1,如果是,则收集X值。

但是,预测中有8个错误(220个错误中的8个)。这些错误在y_pred [:200]中为-1,在y_pred [201:220]中为1。请注意这些错误。