При обнаружении выбросов тестирование поезда разделяется после или до соответствия алгоритму - PullRequest
0 голосов
/ 08 июля 2019

Я реализую конвейер обнаружения выбросов.

3 сценария, возникающих при обучении алгоритма:

Должен ли я сначала разбить данные перед настройкой алгоритма обнаружения моего выброса?

Должен ли я соответствовать только в поезде?

Должен ли я разделиться, а затем вписаться в поезд и проверить отдельно?

В качестве иллюстрации я собираюсь использовать набор данных iris

Аналогичное обсуждение приведено здесь в случае масштабирования:

Зачем нам нужно повторно использовать параметры обучения для преобразования тестовых данных?


import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from sklearn.datasets import load_iris
from sklearn.ensemble import IsolationForest
from sklearn.neighbors import LocalOutlierFactor
from sklearn.svm import OneClassSVM
from sklearn.model_selection import train_test_split

from warnings import filterwarnings

filterwarnings('ignore')


X,y = load_iris(return_X_y= True)

X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = .3, random_state = 123)


# Option 1

Iso_outliers = IsolationForest().fit(X_train)

Iso_outliers_train = Iso_outliers.predict(X_train)

Iso_outliers_test = Iso_outliers.predict(X_test)

# Option 2

Iso_outliers_train = IsolationForest().fit_predict(X_train)

Iso_outliers_test = IsolationForest().fit_predict(X_test)

# Option 3

Iso_outliers_X = IsolationForest().fit_predict(X)

  1. Какой из 3-х приведенных выше вариантов является правильным и почему?

  2. Зависит ли это от используемого алгоритма или он будет применяться одинаково для любого алгоритма обнаружения выбросов?

1 Ответ

1 голос
/ 08 июля 2019

1- Правильный вариант - вариант 1. Правильно сделать так, чтобы модель соответствовала вашим данным поезда. Потому что это цель разделения данных на обучающие и тестовые наборы. Набор поездов - это информация, которую вы используете для построения своей модели, а набор тестов используется для проверки вашей модели, вычисления ошибок и точности. Если вы тренируете свою модель с использованием как тестовых, так и обучающих данных, то у вас нет данных для проверки вашей модели. Вот почему вариант 3 не является правильным. Первое утверждение в варианте 2 эквивалентно

    Iso_outliers = IsolationForest().fit(X_train)
    Iso_outliers_train = Iso_outliers.predict(X_train)

Так что в этом нет ничего плохого. Однако во втором утверждении вы подходите и прогнозируете, что означает, что вы используете тестовые данные для повторного построения модели и прогнозирования, используя модель, созданную с помощью набора тестов. Таким образом, поезд не используется.

2-Общая практика построения любой модели в машинном обучении (она не зависит от алгоритма, который вы хотите реализовать):

  1. Сначала используйте данные поезда для построения модели.
  2. Затем используйте тестовые данные для проверки и оценки модели.

Вы можете прочитать вики-страницу , чтобы лучше понять, как разделить данные на наборы для проверки соответствия поезда.

...