在数据框中使用IsolationForest查找异常值

时间:2019-10-01 12:49:07

标签: python pandas scikit-learn

我想在我的数据框中找到异常值。 我写了一段代码,告诉我输入值是否离群值,但是我找不到一种方法来检查我的数据是否包含离群值。另外,我认为我的代码不能很好地工作,因为它说这些值[1,4,64]不是异常值,我认为它们是异常值。

   first  second  third  result
0      1       2      7    3.00
1     28      85     74    0.04
2      5       2      3    3.00
3      6       4      8    4.00
4      3       6      2    3.00
5      5       8      4    5.00
6      4       3      7    6.00
7      2       5      1    6.00
8      7       7    533    0.80
9      5       3      6    9.00

例如,您可以清楚地看到第一行和第八行的值是异常值。 这是我的代码:

import pandas as pd
from sklearn.ensemble import IsolationForest  

df = pd.DataFrame({'first': [1,28,5,6,3,5,4,2,7,5],
                   'second': [2,85,2,4,6,8,3,5,7,3],
                   'third': [7,74,3,8,2,4,7,1,533,6],
                   'result': [3,0.04,3,4,3,5,6,6,0.8,9]})

print(df)

x = df.iloc[:,:-1]
print(x)

isolation_forest = IsolationForest(n_estimators=100, behaviour="new",
                                   contamination='auto')
model = isolation_forest.fit(x)

list_of_val = [[1,35,3], [3,4,5], [1,4,64]]

for val in list_of_val:

    outlier = isolation_forest.predict([val])
    print(outlier)

    if outlier[0] == -1:
        print('Values', val, 'are outliers')

    else:
        print('Values', val, 'are not outliers')

如果您告诉我为什么我的代码未将值[1,4,64]检测为离群值,并且如果您告诉我如何在具有值{{ 1}}和outlier column旁边的值。

1 个答案:

答案 0 :(得分:2)

找到一种方法

isolation_forest = IsolationForest(n_estimators=100, behaviour="new",
                                   contamination='auto')
model = isolation_forest.fit(x)
df['outliers'] = model.predict(x)
print(df)