Я изучаю машинное обучение последние несколько недель и пришел к уроку, на котором изучаются выбросы. По словам профессионалов в области науки о данных, один из способов повысить точность - это выявить выбросы, а затем удалить их из набора данных. Выявление выбросов пригодится при поиске мошенничества. Поскольку выбросы потенциально могут влиять на точность набора данных при прогнозировании, я решил написать сообщение в блоге на эту тему.

В главной библиотеке машинного обучения Python, sklearn, есть четыре функции, которые можно использовать для выявления выбросов: IsolationForest, EllepticEnvelope, LocalOutlierFactor и OneClassSVM.

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

Sklearn использует EllepticEnvelope в качестве детерминанта минимальной ковариации. Если входные переменные имеют гауссовское распределение, для обнаружения выбросов можно использовать статистические методы.

LocalOutlierFactor - это метод, который пытается использовать идею ближайших соседей для обнаружения выбросов.

Машину опорных векторов или SVM можно использовать для одноклассовой классификации. При моделировании одного класса алгоритм захватывает плотность большинства классов и классифицирует крайние значения функции плотности как выбросы. Этот метод обнаружения выбросов можно использовать как для классификации, так и для наборов данных регрессии.

Хотя я рассмотрел четыре функции, которые есть в библиотеке sklearn для устранения выбросов, я собираюсь использовать только одну из этих функций в программе, которую я написал по этому вопросу.

Я написал программу в Google Colab, которую я предпочитаю Jupyter Notebook, потому что она бесплатна и относительно проста в использовании. Единственный недостаток Google Colab, который я вижу, - это то, что у него нет функции отмены, поэтому нужно проявлять осторожность, чтобы не удалить или перезаписать ценный код, который может быть невозможно восстановить.

Создав программу, я импортировал библиотеки, которые потребуются мне для ее запуска. Библиотеки необходимы для написания программы на Python, поскольку они упрощают процесс выполнения сложных вычислительных задач. Изначально я импортировал библиотеки pandas, numpy, sklearn, matplotlib и seaborn. Pandas - это библиотека, которая создает фреймы данных и управляет ими, numpy выполняет сложные алгебраические вычисления, sklearn содержит множество функций, необходимых для выполнения машинного обучения, а matplotlib и seaborn используются для построения графиков прогнозируемых данных:

После импорта библиотек я создал набор данных многомерной регрессии, используя функцию make_regression в sklearn. Первое, что я сделал, - это создал фрейм данных, содержащий независимые переменные, функции: -

Затем я создал фрейм данных, в котором находится зависимая переменная y: -

После того, как функции и y были установлены, я объединил их, чтобы сформировать фрейм данных df, в котором находятся как независимые, так и зависимые переменные:

Я построил график одного столбца функций, в данном случае их было 4:

Затем я использовал statsmodels, чтобы распечатать отчет о жизненно важной статистике этого многомерного фрейма данных, чтобы включить ошибки, которые используются для определения точности регрессии:

Я определил переменные X и y, которые являются независимыми и зависимыми соответственно. Переменная X - это первые пять столбцов df, а переменная y - последний столбец: -

После того, как переменные X и y были установлены, я разделил набор данных для обучения и проверки: -

Затем я использовал LocalOutlierFactor sklearn, чтобы найти и удалить 1% выбросов в наборе данных, а затем распечатал строки, содержащие выбросы: -

Затем я сбрасываю x_train и y_train в новую форму после удаления выбросов из фрейма данных, а затем распечатываю их:

Когда выбросы были удалены из обучающей выборки, я определил модель, по которой буду делать прогнозы. В этом случае я выбрал ARDRegression от sklearn, который представляет собой тип линейной регрессии. Я достиг точности 96,66%, когда я тренировался и подогнал данные обучения, что было очень близко к точности, которую я достиг без исключения выбросов:

Затем я сделал прогнозы для набора проверки, который составил 98,06%, что снова было очень близко к точности, которую я достиг без исключения выбросов: -

Я оценил частоту ошибок, которую можно увидеть на скриншоте ниже: -

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

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

Следует иметь в виду, что при участии в соревнованиях по науке о данных, таких как Kaggle, выбросы нельзя удалить при отправке прогнозов. Из-за того, что я стараюсь участвовать в как можно большем количестве соревнований, у меня не так много опыта в играх с отклонениями. Это одна из областей науки о данных, которую я, конечно же, мог бы улучшить.