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

Конкурс на август 2021 года касается убытков, понесенных в случае невыполнения кем-либо обязательств по кредиту со 101 столбцом данных или функций. Недавно я написал о своих усилиях по достижению высокого балла с помощью SelectKBest sklearn, и ссылку на этот пост можно найти здесь: https://medium.com/mlearning-ai/how-i-used-selectkbest-feature-selection. -on-kaggles-август-2021-таблица-соревнования-1b8a35ad429a

В этом посте я попытаюсь обсудить, как я использовал функцию sklearn GenericUnivariateSelect, чтобы улучшить оценку, которую я получил изначально. GenericUnivariateSelect — это один из инструментов выбора функций sklearn с настраиваемой стратегией. Эта функция выполняет одномерный выбор признаков с оценщиком поиска гиперпараметров. В этом посте GenericUnivariateSelect выполнит тест, чтобы выполнить только десять лучших функций. Функция принимает в качестве входных данных функцию оценки и возвращает одномерные оценки и p-функции.

Постановка задачи для табличных соревнований в августе 2021 года приведена ниже:

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

После того, как я создал программу, я импортировал библиотеки, которые мне понадобятся для ее выполнения. Обычно я импортирую библиотеки только по мере необходимости, но библиотеки, которые я изначально импортировал, были numpy, pandas, os, sklearn, matplotlib и seaborn. Numpy используется для вычисления алгебраических формул, pandas используется для создания фреймов данных и управления ими, os входит в операционную систему для извлечения файлов, используемых в программе, sklearn содержит множество функций машинного обучения, а matplotlib и seaborn преобразуют точки данных кадр данных для графических представлений: -

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

Затем я проанализировал цель и увидел, что имею дело с проблемой регрессии:

Я определил целевую переменную, которая представляет собой столбец loss в кадре данных поезда. Затем я удалил столбец loss из кадра данных поезда: -

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

Затем я удалил столбец id из combi, потому что в нем нет необходимости выполнять прогнозы, и он может даже быть помехой:

Как только кадр данных, combi, был завершен, я нормализовал данные, преобразовав каждую точку данных в значение от нуля до единицы, потому что модели будет легче делать прогнозы:

Когда кадр данных combi был предварительно обработан, я определил независимую и зависимую переменные, такие как X и y соответственно. Переменная y состояла из цели, которая была определена ранее. Переменная X состояла из комбинированного кадра данных до длины кадра данных, поезда. X_test состоял из кадра данных, комби, от длины кадра данных, поезда до конца: -

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

После того, как функции набора данных были сокращены до десяти лучших столбцов, функция sklearn train_test_split разделила набор данных на обучающий и проверочный наборы:

Пришло время выбрать модель, и в этом случае я решил попробовать линейную регрессию sklearn, обучить и подогнать данные к этой модели:

Затем я предсказал набор проверки: -

После того, как проверочный набор был предсказан, я оценил прогнозы:

Затем я сравнил фактические значения проверочного набора с прогнозами:

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

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

После того, как прогнозы были сделаны, я подготовил прогнозы для отправки в Kaggle для оценки. Я сделал это, разместив прогнозы в столбце loss кадра данных отправки:

Затем я преобразовал кадр данных отправки в CSV-файл, который был сохранен и отправлен в Kaggle для оценки по сравнению с другими отправками:

Когда я отправил CSV-файл отправки в Kaggle для оценки, я получил 7,97 балла, что было немного лучше, чем мой предыдущий результат, поэтому я решил написать об этом пост: -

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

Полностью код этой программы можно найти в моей личной учетной записи GitHub по ссылке: https://www.kaggle.com/tracyporter/aug-21-genunivariateselect?scriptVersionId=69573546.