Каковы идеи эффективного управления выбросами в наборе данных, не удаляя его - PullRequest
0 голосов
/ 11 февраля 2019

Я новичок в науке о данных.Перед вызовом во время посещения хакатона.У меня есть набор данных поезда с множеством выбросов во многих столбцах.То же самое с данными испытаний (Поезд и данные испытаний предоставляются отдельно).Я не могу сразу удалить выбросы в наборе поездов, так как тестовый набор также имеет сходные характеристики.Если я выполню удаление в своем тесте, то количество строк в моих тестовых данных уменьшится, что приведет к ошибке при отправке.Пожалуйста, кто-нибудь может помочь мне справиться с выбросами.Масштабирование и преобразование логов также не сильно помогли.

1 Ответ

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

Хорошо.Как обнаруживать и обрабатывать выбросы - одна из моих интересных тем.

Я бы хотел ответить.Это может быть ответ с двух точек зрения.

  1. В соревновании по машинному обучению вы должны предварительно обработать данные (тренироваться и тестировать) перед тренировкой и прогнозированием.Обычно вы должны построить конвейер, который включает в себя этап .preprocess (очистка, преобразование, добавление / удаление функций, нормализация / стандартизация) этап 2. Этап обучения 3. этап перекрестной проверки4.Stacking Stage5.Предсказание.Вышеуказанный процесс должен быть повторен в большинстве случаев, чтобы получить хороший результат.И в Kaggle есть много хитростей.

  2. Выброс.Без правильного обнаружения и обработки выброса, ваша модель будет плохой, особенно для регрессионного типа соревнования.Выбросы влияют на данные значительно.Вот мой способ борьбы с выбросами. для неизменяемого (можно проверить выброс в элементах в режиме один за другим), обнаружить : если data - data.mean () / data.std ()> 3,Вы должны быть уверены, что это постороннее.дескриптор: замените его на mode (), или mean () или median (), основываясь на понимании данных.если вы знаете, что у неизменяемого есть линейная связь с другой переменной, вы можете применить агрегированное среднее значение, режим, медиану.

    для мульти-переменной (все функции работают вместе, чтобы найти некоторые особенности выпадающими). ​​ IЯ тоже изучаю путь.Ключевой проблемой является то, что данные поезда / теста должны быть разделены.в противном случае передача данных будет счастливой.Возможный режим: если у вас есть X1, X2, X3, Y в поезде, X1, X2, X3 в тесте.чтобы обнаружить выбросы X (i), вы можете использовать X (i) как new_y, остальные X (j) s имеют new_x.и использовать функции statemodels.api, как показано ниже:

    import statsmodels.api как sm

    X_od = data [X1] # предполагая, что мы хотим найти выбросы данных [X1] Y_od = data [[X2, X3]] lm = sm.OLS (X_od, Y_od) .fit () #it - это регрессия OLS-линии

    print (lm) outliers_test = lm.outlier_test () # используется остаточная ошибка для обнаружения выбросов print(outlier_test.query ('"unadj_p" <0,05)) # если значение unad p меньше 5%, мы знаем, что есть выбросы. </p>

Check The R-Square Обычно R-квадрат может превышать 50%, он слишком низкий, есть выброс или что-то не так.в некоторых крайних случаях R2 меньше 0,5%.

Bonferroni outlier test result

ручка: way1.добавьте новые столбцы с именем OD_flag_X1 и установите обнаруженный выброс как 1. другие сохраняют 0. way2.замените обнаруженный выброс другими агрегированными значениями (среднее, модальное, медианное или другое) way1 и way2.как я уже говорил ранее.Вы добавили обнаружение / обработку выброса в конвейер, чтобы избежать утечки данных или пропущенного шага.

Это мой способ обнаружения и обработки выброса.

Надеюсь, это поможет вам или другим читателям.

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