Удаление выбросов Изоляция Лес - PullRequest
1 голос
/ 09 февраля 2020

Я пытался удалить выбросы из своей базы данных с помощью изолированного леса, но не могу понять, как. Я видел примеры мошенничества с кредитными картами и зарплатой, но я не могу понять, как применять их в каждом столбце, поскольку моя база данных состоит из 3862900 строк и 19 столбцов. Я загрузил изображение главы моей базы данных. Я не могу понять, как применить лес изоляции к каждому столбцу, а затем навсегда удалить эти выбросы. enter image description here

Спасибо.

enter image description here

1 Ответ

1 голос
/ 10 февраля 2020

В соответствии с документами используется для обнаружения выбросов, не удаляя их

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])

Как видно из вывода 4 и 5 не являются выбросами, а 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)]

Примечание. Лес изоляции не может удалить выбросы из набора данных, он используется для обнаружения новых выбросов

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...