Я хочу найти выбросы в моем фрейме данных. Я написал код, который скажет мне, являются ли мои входные значения выбросами или нет, но я не могу найти способ проверить, содержат ли мои данные выбросы или нет. Кроме того, я думаю, что мой код не работает хорошо, потому что он говорит, что эти значения [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
Например, вы можете ясно видеть, что значения в 1-мряд и восьмой ряд являются выбросами. Вот код, который у меня есть:
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]
как выбросы, и если вы скажете мне, как я могу получить outlier column
в моем фрейме данных будут значения outlier
и not outlier
рядом со значениями.