Те люди, которые читали мой последний пост, узнают, что я работал над табличным соревнованием Kaggle в мае 2021 года. Это соревнование особенно проблематично, потому что файл поезда имеет цель мультикласса с одним столбцом, которая должна быть преобразована в цель с одним горячим кодированием, когда делаются прогнозы. Нет четкого указания о том, какими должны быть значения в представлении, поэтому специалист по обработке данных обязан сделать наилучшее предположение. Мой последний пост на эту тему можно найти здесь: не так просто, как кажется | от Трейсирени | MLearning.ai | май 2021 г. | Середина"

Хотя я создал программу с подачей заявки на конкурс, точность была не очень высокой, поэтому я решил посмотреть, смогу ли я ее улучшить. Поскольку в цели был дисбаланс классов, я решил использовать синтетическую передискретизацию, или SMOTE, чтобы посмотреть, смогу ли я повысить точность в написанной мной программе. SMOTE — это аббревиатура от Synthetic Minority Oversampling Technique. Это статистический метод сбалансированного увеличения количества случаев в наборе данных о дисбалансе. Этот метод работает путем создания новых экземпляров из существующих меньшинств, которые уже существуют в кадре данных. Эта реализация SMOTE не меняет количество случаев большинства.

Я создал программу в своей личной учетной записи Kaggle, которую я настроил для совместного использования. Kaggle принадлежит Google, поэтому он очень близок к тому, как работает Google Colab. Общим для Google Colab и Kaggle является тот факт, что многие библиотеки уже установлены на платформе. Поэтому мне нужно было только импортировать pandas для управления кадрами данных, numpy для выполнения алгебраических вычислений и os для извлечения файлов csv из рабочего каталога. Я импортировал другие библиотеки в программу, но эти три программы должны были только начать вычислительный процесс:

Я прочитал в программе три файла: train, test и sample_submission:

Затем я проанализировал цель и обнаружил дисбаланс классов:

Я сопоставил цель и присвоил каждому классу номер:

Как только цель была нанесена на карту, я поместил ее содержимое под названием target и удалил цель из набора данных поезда:

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

Столбец id не нужен для выполнения вычислений, поэтому я исключил его из комбинированного набора данных:

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

Затем я определил переменные X и y. X определяется как комбинированный кадр данных от 0 до длины поезда, а X_test — это комбинированный кадр данных от длины поезда до его конца. Переменная y является целью: -

Затем мне пришлось инициировать процесс SMOTE. Сначала мне пришлось установить SMOTE в созданный мной блокнот Jupyter:

Затем я импортировал SMOTE и определил переменную oversampler. Затем я определил переменные X_samp и y_samp, которые будут использоваться для вычислительных целей:

После того, как я установил переменные X_samp и y_samp, я использовал функцию sklearn train_test_split(), чтобы разделить наборы данных для обучения и проверки:

Затем я выбрал модель. В этом случае я решил придерживаться логистической регрессии sklearn. Когда я выбрал модель, я обучил и подогнал ее:

Затем я сделал прогнозы на проверочном наборе: -

После того, как я успешно предсказал на проверочном наборе, я сделал прогнозы на тестовом наборе:

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

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

Когда я отправил свои прогнозы в Kaggke, я получил 22,81%, что было улучшением по сравнению с моим предыдущим представлением. Эта оценка не велика, и необходимо проделать большую работу, чтобы улучшить ее: -

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

Код для этого поста можно полностью найти в моей личной учетной записи Kaggle, ссылка находится здесь: Tab — May 2021 — SMOTE | Kaggle