В своих последних двух статьях я работал над учебниками по tensorflow, это отлично подходит для быстрого ознакомления с ML, но не так хорошо для развития более глубокой интуиции. Итак, сегодня я попытаюсь построить алгоритм машинного обучения с нуля, и я выбрал старый конкурс Kaggle. Цель этого конкурса - предсказать, будет ли проект одобрен для финансирования, учитывая описание проекта.

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

Найдите код на моем GitHub. Одна вещь о Kaggle заключается в том, что у вас нет доступа ко всем тестовым данным, чтобы предотвратить мошенничество во время соревнований. Таким образом, чтобы приступить к этой задаче, я должен разделить текущий тренировочный набор на тренировочный и тестовый. 80:20 — обычно используемое соотношение, поэтому я буду следовать этой традиции.

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

Что касается предварительной обработки, я хотел бы удалить много столбцов из набора данных. Я думаю, что такие вещи, как id, id_учителя, префикс_учителя и т. д., не будут иметь большого значения для нашего конечного результата. Вместо этого я объединим все столбцы формулировок в один столбец, к которому мы затем применим наш алгоритм машинного обучения. Идея состоит в том, что у нас есть один ввод наших объединенных столбцов (project_description) и один вывод «project_is_approved». Кроме того, я уберу все знаки препинания. Это направлено на упрощение входных данных, чтобы наш алгоритм мог сосредоточиться на самом важном — на формулировке предложения.

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

Наконец, я использую формулу среднеквадратичной ошибки, чтобы сравнить результаты, которые я получаю из своих прогнозов, с фактическими результатами. И в качестве окончательного результата для подмножества данных я получаю 0,123678792151 или около 12% ошибки.

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

Спасибо за прочтение, до завтра!