В моем последнем посте я рассказал, как я использовал Pytorch, чтобы делать прогнозы на соревнованиях вентиляторов Kaggle. Это соревнование было задачей табличной регрессии, поэтому я хотел посмотреть, насколько хорошо я наберу баллы, если попробую Pytorch в задаче табличной классификации. Поэтому я выбрал соревнование Kaggle по выявлению бедствий, которое является проблемой классификации. Наборы данных для твитов о стихийных бедствиях можно найти здесь: https://www.kaggle.com/c/nlp-getting-started.

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

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

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

Поскольку конкурс «Определить бедствие» — это постоянное соревнование Kaggle, я решил написать программу, которую буду использовать для прогнозирования набора данных в бесплатной онлайн-блокноте Kaggle Jupyter Notebook.

Описание конкурса «Определи бедствие» приведено ниже:

Как только программа была создана, я импортировал библиотеки. Я импортировал библиотеки по мере необходимости, и эти библиотеки включали numpy, pandas, os, torch, nltk, re, spacy, matplotlib и seaborn. Этот конкурсный вопрос имеет много библиотек, потому что он выполняет обработку естественного языка в дополнение к предсказаниям на этикетке. Pandas создает кадры данных и управляет ими; numpy создает массивы и выполняет алгебраические вычисления; os переходит в операционную систему; sklearn содержит множество функций машинного обучения; nltk, re и spacy выполняют обработку естественного языка; факел — нейронная сеть; и, matplotlib и seaborn используются для построения точек данных на графике: -

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

Затем я использовал pandas, чтобы прочитать три CSV-файла в системе и преобразовать их в фреймы данных:

Я создал переменную target и поместил в нее содержимое train.target.

Затем я удалил цель из кадра данных поезда: -

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

Затем я вменил ноль; значений, заполнив их строкой «нет в списке». Этот метод не был строго необходим, потому что я использую только содержимое двух столбцов, чтобы делать прогнозы в кадре данных: -

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

Я создал переменную tweets и поместил в нее содержимое combi.text:

Затем я почистил твиты.

Я преобразовал твиты в нижний регистр.

Я удалил хештеги из твитов.

Я удалил слова меньше двух символов.

Я также удалил стоп-слова из твитов. Стоп-слова — это очень распространенные слова, которые практически не добавляют значения прогнозу:

Затем я вставил код для удаления часто используемых слов из твитов. Я отметил, что слово «огонь» является третьим наиболее часто используемым словом, поэтому теоретически я мог бы удалить этот шаг и посмотреть, улучшит ли он точность предсказания:

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

Именно в этот момент я импортирую spacy, библиотеку расширенной обработки естественного языка, или НЛП:

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

Затем я преобразовал токены в векторы:

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

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

Затем я использовал sklearn train_test_split, чтобы разделить набор данных X и Y на наборы для обучения и проверки:

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

Я преобразовал обучающие и проверочные наборы в тензоры: -

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

Затем я определил модель, которая принимает функции в качестве входных данных:

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

Затем я обучил данные, настроив модель на повторение 10 000 раз:

Я предсказал на проверочном месте и добился точности 81,36%:

Затем я сделал прогнозы на тестовом наборе и подготовил эти прогнозы для отправки в Kaggle:

Когда я отправил прогнозы в Kaggle, я набрал 78,30%. Когда я сделал прогноз на тех же данных, используя MLPC sklearn, я добился точности 78,36%. В этом случае MLPC превзошел Pytorch на 0,06%:

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

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

Код для этого поста можно полностью найти в моей личной учетной записи Kaggle по ссылке: https://www.kaggle.com/tracyporter/identify-the-disaster-spacy-pytorch/notebook.