我正在使用医疗保险索赔数据,并希望识别欺诈性索赔。一直在网上阅读以尝试找到更好的方法。我在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
答案 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。请注意这些错误。