Привет, ребята!

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

Прежде чем продолжить этот блог, я перечислил контент, который будет здесь объяснен. Давайте приступим!

  1. Проблема Kaggle
  2. Связанных с работой
  3. Мои подходы помимо смежных работ
  4. Исследовательский анализ данных (EDA)
  5. Функциональная инженерия
  6. Мой первый подход к сокращению
  7. Моделирование
  8. Эксперимент и результаты
  9. Вывод
  10. Будущая работа
  11. использованная литература

1. Задача Kaggle

Не переоснащайте! II - сложная проблема, когда мы должны избегать переобучения моделей (или искаженного способа обучения) при очень небольшом количестве обучающих выборок.

Согласно Kaggle,

«Это было соревнование, в котором простым смертным предлагалось смоделировать матрицу непрерывных переменных 20 000x200, используя всего 250 обучающих выборок… без переобучения. «

Источник данных -

Набор данных можно скачать здесь:

Https://www.kaggle.com/c/dont-overfit-ii/overview

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

Что нам нужно предсказать? Мы прогнозируем двоичное целевое значение (двоичная классификация), связанное с каждой строкой, содержащей 300 непрерывных значений признаков. Также без переобучения с предоставленным минимальным набором обучающих выборок.

Оценка -

Согласно постановке задачи Kaggle, оценка будет оцениваться на основе AUROC (область под характеристикой оператора приемника) между прогнозируемой целью и фактической целью.

ROC - вычисляет измерение производительности при различных пороговых значениях для двоичной классификации. Затем мы получаем кривую после измерения ROC, находим площадь под кривой ROC. Это называется Областью под КР.

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

2. Сопутствующие работы

  1. Настройка гиперпараметров (Блог: https://towardsdatascience.com/hyperparameter-tuning-c5619e7e6624) - он использовал Ridge, Lasso, Elastic, LassoLars (модель лассо подходит при наименьшей угловой регрессии), регрессию Байесовского хребта, логистическую регрессию и SGD. Классификаторы использовались в моделях машинного обучения и оценивали средний балл с перекрестной проверкой и их стандартное отклонение. Параметры остаются в соответствии со значениями по умолчанию. Выяснилось, что логистическая регрессия и SGD - две лучшие модели, чем другие. Затем они применяют стратегию настройки (GridSearchCV и RandomSearchCV) только в этих моделях. Наилучшая оценка CV (не оценка Kaggle), полученная с использованием GridSearchCV в модели логистической регрессии: 0,789
  2. Просто не переоснащайте (Блог: https://medium.com/analytics-vidhya/just-dont-overfit-e2fddd28eb29) - он использовал стандартизацию, чтобы соответствовать диапазону от -1 до 1 в обучающих данных и преобразовывать в данные тестирования, основанные на среднем значении и стандартном отклонении, оцененном на основе данных обучения. Использовалась регрессионная модель LASSOCV (перекрестная проверка оператора наименьшей абсолютной усадки и выбора). Эта модель LASSO использовалась для поиска гиперплоскости, которая уменьшает остаточную ошибку с помощью дополнительного параметра усадки 𝜆 с абсолютными весами, чтобы избежать переобучения, и они провели перекрестную проверку с различными значениями 𝜆, чтобы найти правильную гиперплоскость. Оценка тестовых данных: 0,843
  3. Не переоснащайте! - Как предотвратить переоснащение в ваших моделях глубокого обучения (Блог: https://nilsschlueter.de/blog/articles/dont-overfit-%E2%80%8A-%E2%80%8Ahow-to-prevent-overfitting- in-your-deep-learning% C2% A0models /) - Он использовал базовую модель как MLP Deep Learning, которая содержит два скрытых уровня: 128 единиц и 64 единицы. Поскольку это двоичный классификатор, в проигрывателе используется двоичная кросс-энтропия и оптимизатор Адама. Оценка Kaggle: 59%. В следующем подходе они создают упрощенную модель, которая содержит одну скрытую единицу слоя 8 и применяет слой Dropout с коэффициентом отсева 0,4. Кроме того, они поместили ранний обратный вызов в val_loss с терпением, равным 3. Для этой новой модели показатель Kaggle достиг 80%.
  4. Как не переобучать (ядро: https://www.kaggle.com/artgor/how-to-not-overfit) - Выполнение EDA: графики по функциям оплаты, оценка корреляции между функциями и базовое моделирование (логистическая регрессия ). Получил оценку Kaggle: 0,7226. Использование инструментов ELI5, которые придают модели значение веса. Наблюдал и взял 32 главных значения и снова обучил базовому моделированию. Оценка Kaggle: 0,7486. В заключение, после выполнения различных техник выбора функций, таких как важность перестановки, SHAP и SequentialFeatureSelector, он не сильно улучшился. Затем они выполняют различные модели с гиперпараметром - логистическая регрессия, гауссовский наивный байес, Adaboost, Extratrees, Random Forest, гауссовская классификация процессов, классификация опорных векторов (SVC), kNN, Bernoulli Naïve Bayes, SGD. Смешайте с логистической регрессией и SVC, оценка Kaggle: 0,831. Они попробовали разработать функции, такие как полиномиальные функции, добавление статистики, добавление функций расстояния, взяв kNN с k = 5 для расчета среднего, максимального и минимального расстояния. Затем выполните выбор нескольких функций, используя пакет sklearn, например процентиль, SelectKBest, RFE, и примените логистическую регрессию модели и GLM. Тем не менее, рейтинг CV остается ниже 80%.

3. Мои подходы помимо смежных работ

Я внес еще 5 изменений

  1. Применить Feature Engineering
  2. Примените технику передискретизации: SMOTE (методы передискретизации синтетических меньшинств)
  3. Выполните функцию первостепенной важности этой модели, используя прямой выбор функции, и повторите обучение.
  4. Примените технику уменьшения размеров с помощью PCA и усеченного SVD
  5. Откалибруйте модель

4. Исследовательский анализ данных (EDA)

** О наборе данных **

О train.csv - 250 образцов и 300 функций, 1 ярлык класса и 1 идентификатор: (250,302)

О test.csv - 19750 образцов, 300 функций и 1 идентификатор: (19750,301)

** Опишите данные тренировки **

df_train.describe()

Информация об обучающих данных (просто чтобы проверить, есть ли пропущенное значение)

df_train.info()

** Функция плотности вероятности (PDF) **

Из Википедии

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

Теперь давайте посмотрим, как каждая функция соответствует типам распределений.

Давайте посмотрим, как каждая функция перекрывается друг с другом.

Давайте посмотрим, как каждая функция перекрывается на основе целевого значения.

** Функция кумулятивной плотности (CDF) **

Из Википедии

В теории вероятностей и статистике кумулятивная функция плотности вещественной случайной величины X, или просто функция распределения X, оцениваемая как X, представляет собой вероятность того, что X будет принимать значение, меньшее или равное x.

Давайте посмотрим CDF каждой функции.

Давайте попробуем наложить CDF друг на друга, чтобы увидеть разницу в графике.

Давайте посмотрим, как каждая функция перекрывается на основе целевого значения.

** Коробчатая диаграмма **

** Сюжет для скрипки **

** Точечная диаграмма **

** Визуализировать в 2D (используя TSNE) **

В трехмерном сюжете

** Как работает набор данных баланса? Дисбаланс или баланс? **

Очень важно отметить!

Это не очень несбалансированные данные, но достойные.

5. Разработка функций

Все функции непрерывны. Итак, я создал базовую статистику, такую ​​как среднее и стандартное отклонение, тригонометрические, гиперболические функции и функция экспонент.

** Среднее значение и стандартное отклонение для каждого образца **

** Тригонометрическая функция **

Здесь я определил visual_fe для построения графика фактической функции по сравнению с тем, как она была применена.

Давайте посмотрим, как выглядит график после применения тригонометрической функции к фактическим данным объекта, а затем сравним его на основе целевого значения.

Для функции sin (x)

Для функции cos (x)

Для функции tan (x)

После этого мы берем «среднее значение каждой тригонометрической функции».

** Гиперболическая функция **

Точно так же посмотрите, как он изменился.

Для функции sinh (x)

Для функции cosh (x)

Для функции tanh (x)

Аналогичным образом мы также берем его «среднее значение гиперболической функции».

** Функция экспонент **

Для функции exp (x)

Для exp (x) -1

Для функции 2 ^ (x)

Возьмите «среднее значение каждой функции экспоненты».

** Некоторая полиномиальная операция **

Подобно x², x³ и x⁴ и принимают «среднее значение каждой полиномиальной операции»

Для визуализации

Для

Для

Для x⁴,

** Чтобы обернуть в единую функцию **

6. Мой первый подход к сокращению

До сих пор мы исследовали такие данные, как количество предоставленных обучающих выборок, то, как каждая функция отслеживается, какой тип распределения, сбалансирован или несбалансирован набор данных и т. Д. Мы также видим, как некоторые базовые функции применяются с использованием базовой математики.

Теперь: "Поскольку это несбалансированный набор данных, мы должны сначала разобраться с ним".

Моя первая мысль (или понимание подхода к решению проблемы):

Есть два способа справиться с этим, используя методы недостаточной дискретизации и передискретизации.

Недостаточная выборка означает просто уменьшение количества выборок большинства классов путем повторной выборки. Как? Мы берем ’n’ случайных выборок из класса большинства, так что ’n’ - такое же количество представленных выборок меньшинства.

Недостаток: мы потеряли некоторую информацию из класса большинства (при повторной выборке из 990 выборок, чтобы получить только 10 выборок, мы потеряли 980 частей информации целевого класса 1 (или класса большинства) на приведенном выше рисунке).

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

SMOTE (методы передискретизации синтетических меньшинств) - один из методов передискретизации.

Как это работает
1. В частности, сначала выбирается случайный пример из класса меньшинства.

2. Затем для этого примера находятся ‘k’ ближайших соседей (обычно k = 5).

3. Выбирается случайно выбранный сосед и создается синтетический пример в случайно выбранной точке между двумя примерами в пространстве признаков.

Пример и иллюстрация в этом блоге.

Второй момент:

Поскольку мы поняли, что это несбалансированный набор данных, AUROC - это правильный способ использования в качестве показателей оценки.

Примечание:

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

Третий момент:

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

Четвертый пункт:

Поскольку это несбалансированный набор данных, мы не можем привести прогноз моделей к неопределенности. Нам необходимо откалибровать наши модели.

Последний пункт:

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

Теперь нам нужно привести данные в ограниченный диапазон, который также называется масштабированием функции. Это можно сделать двумя способами: Нормализация и Стандартизация.

Нормализация - это метод сжатия, позволяющий привести все значения каждой функции в диапазон от 0 до 1 с параметрическими значениями max и min для каждой функции.

Стандартизация - это метод сжатия, который приводит все функции в среднее положение и принимает стандартное отклонение от среднего, то есть переводит все значения в диапазон -1 и 1 от среднего положения. Параметрическими являются среднее значение и стандартное отклонение.

Никакое эмпирическое правило не работает лучше всего. Итак, мы попробуем как нормализацию, так и стандартизацию.

7. Моделирование

Я использовал 7 моделей с гиперпараметрами.

  1. kNN (k-ближайший сосед)
  2. Логистическая регрессия
  3. SVC (классификация опорных векторов)
  4. Случайный лес
  5. XGBoost (оптимизированное усиление распределенного градиента)
  6. Классификатор стекирования
  7. Классификатор голосования

Я использовал гиперпараметр, используя GridSearchCV с CrossValidation с целевой переменной стратификации, которая предоставляется набором инструментов sklearn.

Разница между моделированием и другой связанной работой заключается в том, что за каждой моделью после настройки гиперпараметров следует Калиброванная модель. Поэтому после подбора наилучшего гиперпараметра я передал эти модели в калибровку, потому что я уже сказал ранее, что поскольку набор данных является несбалансированным набором данных, он может привести прогноз моделей к неопределенности. (См. Рисунок ниже)

Я также показал ROC сюжета и важность каждой модели. (Здесь невозможно показать все графики. Вы можете проверить код в конце заключительного раздела)

В приведенном ниже фрагменте кода я создал 4 функции, и в каждой функции я также написал строку документации и объяснил, какой тип переменной следует передать и что будет возвращать.

Прежде чем переходить к «эксперименту и результатам», давайте займемся некоторыми другими операциями, которые я проделал:

Особенность первостепенной важности:

Для того, чтобы найти наиболее важные функции. Сначала я обучил модель (конкретно). В той же модели я находил лучшие функции, которые могут придать ей большее значение. Итак, я использовал выбор прямой функции.

Идея проста:

  1. Инициализируйте количество наиболее важных характеристик вашего желания.
  2. Перебрать все функции в данных поезда.
  3. Остановитесь, когда условие вашего желания выполнено или оценка перекрестной проверки не улучшится после добавления новых функций.

Иллюстрация следующая:

‹F₁, F₂,…, Fn› - это список функций, и в модели одна предназначена для обучения данных на основе функций, а другая - для тестовых данных для оценки оценки этой функции.

Ниже приведен фрагмент кода для проиллюстрированного выше случая.

Техника уменьшения размеров:

  1. PCA (анализ главных компонентов): это метод уменьшения размеров, при котором определяется направление оси (или компонентов PCA), которое дает максимум информации. Количество компонентов (или желаемый размер d ’) может быть определено путем построения графика отношения объясненной дисперсии к d (количество функций).

Из приведенного выше графика мы можем сделать вывод, что желаемый размер d ’= 175 является вполне приличным, при этом зарезервированы данные о 90–99% данных.

2. TruncatedSVD: он исходит из концепции факторизации матрицы. SVD означает однозначное разложение, которое пытается разложить одну матрицу на продукт матриц.

где U - левая сингулярная матрица, V - правая сингулярная матрица, а ∑ - диагональная матрица. Подробнее читайте в pdf.

В усеченном SVD мы выбрали k-размерность, а не d-размерность. См. Изображение ниже, после рассмотрения размера k (удаление остальных показанных данных d-dim)

Чтобы найти правильный k -размер, мы строим график отношения объясненной дисперсии к d-измерению.

Мы рассматриваем k = 175 как измерения, где данные составляют примерно 90–95% прибл.

8. Эксперимент и результаты.

1. SMOTE + FE + Стандартизация + Модель классификации машинного обучения

2. SMOTE + FE + Нормализация + Модель классификации машинного обучения

3. SMOTE + Стандартизация + ML

4. SMOTE + Нормализация + ML

5. Стандартизация + модель классификации машинного обучения с / без основных функций

6. Модель классификации Normzalization + ML с / без основных функций

7. FE + сокращение размеров + стандартизация + модель классификации ML (PCA d ’= 100)

8. FE + сокращение размеров + стандартизация + модель классификации ML (PCA d ’= 175)

9. FE + сокращение размеров + стандартизация + модель классификации ML (TruncatedSVD d ’= 175)

Мой лучший результат в Kaggle!

Левый столбец - это частный рейтинг (0,833), а правый столбец - публичный рейтинг (0,839).

9. Заключение

  1. Мы выполнили EDA, и большинство функций на основе цели перекрывались. Предполагалось, что для любой модели будет сложнее предсказать.
  2. Мы выполнили проектирование функций, используя базовую статистику, тригонометрическую функцию, гиперболическую функцию и функцию экспонент, а также показали график фактической функции по сравнению с после применения инженерии, а также построили проектирование функций на основе целевой метки.
  3. Если вы наблюдаете эксперименты 1, 2 и 3, 4, то, применяя разработку функций, мы получили больше очков, чем без применения разработки функций.
  4. Мы применяем прямой выбор функций, чтобы получить только те функции, которые дают больше баллов AUROC в экспериментах 5 и 6. Мы получили даже более высокий балл, чем при рассмотрении всех функций.
  5. Мы попробовали уменьшить размерность, чтобы увидеть, что, возможно, мы получим лучшие результаты в экспериментах 7,8 и 9. Но не повезло, даже хуже, чем рассмотрение всех функций.

После этого я не остался доволен результатом. Я прошел обсуждение и узнал, что, используя стратегии LB-зондирования, мы можем попасть в топ 5–10%. Однако такая стратегия не используется в реальных сценариях и даже не является хорошим способом изучить такие методы, которые нельзя применить в реальных бизнес-задачах.

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

10. Будущая работа

  1. Попробуйте выполнить Рекурсивное исключение признаков, чтобы узнать важность функции.
  2. Попробуйте использовать те же подходы, что и я, но без калибровки. А затем сравните их, модель с откалиброванной или модель без калибровки, которая работает лучше?
  3. Попробуйте объединить стратегию недостаточной и избыточной выборки. Это означает, что один из большинства будет уменьшаться, а другой из класса меньшинства увеличивает выборки. Он не обязательно должен совпадать с рядом образцов класса меньшинства или класса большинства.

11. Ссылки

  1. Настройка гиперпараметров (блог с наибольшим количеством голосов: https://towardsdatascience.com/hyperparameter-tuning-c5619e7e6624)
  2. Just Don’t Overfit (Блог: https://medium.com/analytics-vidhya/just-dontoverfit- сексe2fddd28eb29)
  3. Не переоснащайте! - Как предотвратить переоснащение в ваших моделях глубокого обучения (Блог: «https://nilsschlueter.de/blog/articles/dont-overfit-%E2%80%8A- тру%E2%80%8Ahow-to-prevent-overfitting -в-вашем-углубленном изучении% C2% A0models /)
  4. Как не переобучать (ядро, получившее наибольшее количество голосов: h ttps: //www.kaggle.com/artgor/howto- not-overfit)
  5. AppliedAICourse: www.appliedaicourse.com

Спасибо, что прочитали! Вот мой профиль в Linkedin и Код в Github.