【问题标题】:Outlier detection with Local Outlier Factor (LOF)使用局部异常因子 (LOF) 检测异常值
【发布时间】:2019-07-26 17:59:58
【问题描述】:

我正在处理医疗保险索赔数据,并希望识别欺诈性索赔。一直在网上阅读以尝试找到更好的方法。我在 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

【问题讨论】:

    标签: python scikit-learn outliers


    【解决方案1】:

    前 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。请注意错误。

    【讨论】:

    • 谢谢。如果我可以问,您是如何发现错误的?您还知道如何将预测附加到原始数据集吗?
    猜你喜欢
    • 2012-02-28
    • 2018-05-28
    • 1970-01-01
    • 2019-07-24
    • 1970-01-01
    • 2015-01-09
    • 2019-07-22
    • 2020-04-03
    • 1970-01-01
    相关资源
    最近更新 更多