我一直在尝试使用隔离林从数据库中删除异常值,但是我不知道如何做到。我已经看到了信用卡欺诈和薪水的示例,但是由于数据库由3862900行和19列组成,所以我不知道如何将它们应用于每一列。我已经上传了数据库负责人的图片。我无法弄清楚如何在每列上应用隔离林然后永久删除这些离群值。python - 离群值清除隔离林-LMLPHP

谢谢。

python - 离群值清除隔离林-LMLPHP

最佳答案

根据docs用于检测异常值而不将其删除

df = pd.DataFrame({'temp': [1,2,3,345,6,7,5345, 8, 9, 10, 11]})
clf = IsolationForest().fit(df['temp'].values.reshape(-1, 1))
clf.predict([[4], [5], [3636]])


array([ 1, 1, -1])

从输出中可以看到,45不是异常值,而3636是。

如果要从数据框中删除异常值,则应使用IQR

quant = df['temp'].quantile([0.25, 0.75])
df['temp'][~df['temp'].clip(*quant).isin(quant)]


4     6
5     7
7     8
8     9
9    10


如您所见,异常值已被删除

对于整个df

def IQR(df, colname, bounds = [.25, .75]):
    s = df[colname]
    q = s.quantile(bounds)
    return df[~s.clip(*q).isin(q)]


注意:隔离林无法从数据集中删除异常值,它用于检测新的异常值

09-05 00:01