Лес изоляции в Python - PullRequest
       35

Лес изоляции в Python

0 голосов
/ 18 февраля 2019

В настоящее время я работаю над обнаружением выбросов в моем наборе данных, используя Isolation Forest в Python, и я не совсем понял пример и объяснение, приведенные в документации scikit-learn

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

Нужен ли отдельный набор данных для обучения модели?Если да, необходимо ли, чтобы этот учебный набор данных был свободным от выбросов?

Это мой код:

rng = np.random.RandomState(42)
X = 0.3*rng.randn(100,2)
X_train = np.r_[X+2,X-2]
clf = IsolationForest(max_samples=100, random_state=rng, contamination='auto'
clf.fit(X_train)
y_pred_train = clf.predict(x_train)
y_pred_test = clf.predict(x_test)
print(len(y_pred_train))

Я попытался загрузить свой набор данных в X_train, но, похоже, это не работает.

1 Ответ

0 голосов
/ 18 февраля 2019

Нужен ли отдельный набор данных для обучения модели?

Короткий ответ - «Нет».Вы обучаете и прогнозируете выбросы по одним и тем же данным.

IsolationForest - это алгоритм обучения без контроля, предназначенный для очистки ваших данных от выбросов (подробнее см. документы ).В обычных настройках машинного обучения вы должны запустить его, чтобы очистить ваш тренировочный набор данных.Что касается примера вашей игрушки:

rng = np.random.RandomState(42)
X = 0.3*rng.randn(100,2)
X_train = np.r_[X+2,X-2]

from sklearn.ensemble import IsolationForest
clf = IsolationForest(max_samples=100, random_state=rng, behaviour="new", contamination=.1)

clf.fit(X_train)
y_pred_train = clf.predict(X_train)
y_pred_train
array([ 1,  1,  1, -1,  1,  1,  1,  1,  1,  1, -1,  1,  1,  1,  1,  1,  1,
        1, -1,  1,  1,  1,  1,  1, -1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1, -1,  1, -1,  1, -1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1, -1,  1, -1,  1,  1,  1,  1,  1, -1, -1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  1, -1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1, -1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
        1, -1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1,
       -1,  1,  1, -1,  1,  1,  1,  1, -1, -1,  1,  1,  1,  1,  1,  1,  1,
        1,  1,  1,  1,  1,  1,  1,  1, -1,  1,  1,  1,  1,  1,  1,  1,  1,
        1,  1, -1,  1,  1,  1,  1,  1,  1,  1,  1,  1,  1])

, где 1 представляет выбросы, а -1 - выбросы.Как указано в параметре contamination, доля выбросов составляет 0.1.

Наконец, вы должны удалить выбросы, такие как:

X_train_cleaned = X_train[np.where(y_pred_train == 1, True, False)]
...