В моем последнем посте я рассказал, как я использовал 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.