Код
#статьи

Создаём первую модель машинного обучения: используем Colab, Pandas и Sklearn

Все вокруг обучают машины, пора попробовать и нам.

 vlada_maestro / shutterstock

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

Для этого:

  • Сформируем тренировочный датасет в виде датафреймов Pandas (наша статья об этой библиотеке).
  • Обучим модель из библиотеки Sklearn на получившемся датасете.
  • Напишем код на Python для дальнейших предсказаний (прочитайте статью про Python-минимум для занятий data science).

В исходной таблице собраны данные о тысяче туристов: возраст, доходы, предпочтения. Ключевая колонка называется target — это город, который конкретный турист выбрал в итоге для поездки. Наша модель научится предсказывать именно её значение — уже для новых туристов.

Основная часть таблицы содержит только числа, что удобно для модели. Например, если в колонке city_Екатеринбург стоит единица, а в остальных колонках, названия которых начинаются с city_, — нули, это означает, что этот турист екатеринбуржец.

Скачайте таблицу по этой ссылке на компьютер и загрузите её в свой Google Colab — сервис, позволяющий писать код и работать с данными прямо в браузере, без установки программ на компьютер. Предварительно прочитайте статью о том, как с ним работать.

Читаем данные

Данные нужно прочитать из файла и преобразовать в подходящий для работы формат. Для этого в колабе добавим новую кодовую ячейку с помощью кнопки «+ Код» вверху и напишем в ней:

import pandas as pd
df = pd.read_excel('trips_data_for_ML.xlsx', index_col = 0)
df.head()

В первой строчке мы импортировали популярную библиотеку Pandas, предназначенную для работы с табличными данными. Чтобы каждый раз в коде не писать её полное название, по сложившейся в data science традиции будем использовать для неё короткое имя pd.

Во второй строке мы создали переменную с названием df. Далее, после знака «равно», Pandas, под коротким именем pd, с помощью функции .read_excel () прочитала файл trips_data_for_ML.xlsx, который мы загрузили в наш колаб-ноутбук. Параметр index_col мы приравняли к нулю — это означает, что индексной колонкой (той, где идут номера строк) в нашей новой таблице df мы назначили колонку под номером 0 из прочитанной Excel-таблицы.

Наконец, в третьей строке мы применили к нашей переменной df метод .head ().

Он показывает первые строки свежесозданного датафрейма (по умолчанию 5). Этим удобно пользоваться, если нужно убедиться, что данные прочитались правильно.

Создаём датасет

Теперь датафрейм с нашими данными надо превратить в датасет, на котором модель машинного обучения сможет тренироваться.

Для этого разобьём df на две части, которые обозначим как X и y. Идея в том, чтобы в Х содержались все данные туристов, кроме колонки target, то есть выбранных ими городов, а в y — только колонка target c этими городами.

Это похоже на задачник: в одной, большой части находятся условия задач (данные туристов), а в другой части, поменьше, — правильные ответы (города, которые они выбрали). Модель будет учиться именно по этому «задачнику».

Добавляем ячейку кода и пишем:

X = df.drop('target', axis = 1)
y = df['target']

В первой строчке мы создали переменную X. В неё мы записали часть нашего датафрейма df, из которого специальным методом .drop () удалили колонку 'target'. Параметр axis переводится как «ось», и он равен единице. Это означает, что колонку 'target' мы выкинули по второй, вертикальной, или колоночной оси, то есть целиком.

Во второй строчке мы создали переменную y и записали туда часть переменной df, а конкретно — колонку с названием 'target'.

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

Создаём модель

Sklearn (или scikit-learn) — пожалуй, самая популярная библиотека для машинного обучения на языке Python и вторая главная библиотека дата-сайентиста после Pandas.

from sklearn.ensemble import RandomForestClassifier 

В этой строчке кода из раздела ensemble библиотеки sklearn мы импортировали конструктор моделей-классификаторов типа Random Forest («случайный лес») в наш проект.

model = RandomForestClassifier()

В переменную с названием model мы записали модель типа Random Forest Classifier с параметрами по умолчанию (в скобках пусто). Эта переменная и есть наша модель машинного обучения.

Обучаем модель

model.fit(X, y) # обучаем модель

Да, вот так всё просто — в одну строчку. Мы показываем модели набор данных X, который, как мы уже точно знаем, дал нам столбец значений y. И просто говорим ей что-то вроде: «Если X, то y. Всё понятно?» Если модели «всё понятно», она выдаст в ответ целую пачку своих параметров, в смысле которых мы не будем сегодня разбираться:

Пора приступать к предсказанию.

Турист — это словарь

С точки зрения нашей модели любой турист выглядит примерно так:

example = {'age': [31],
 'city_Екатеринбург': [0],
 'city_Киев': [0],
 'city_Краснодар': [1],
 'city_Минск': [0],
 'city_Москва': [0],
 'city_Новосибирск': [0],
 'city_Омск': [0],
 'city_Петербург': [0],
 'city_Томск': [0],
 'city_Хабаровск': [0],
 'city_Ярославль': [0],
 'family_members': [0],
 'salary': [130000],
 'transport_preference_Автомобиль': [1],
 'transport_preference_Космический корабль': [0],
 'transport_preference_Морской транспорт': [0],
 'transport_preference_Поезд': [0],
 'transport_preference_Самолет': [0],
 'vacation_preference_Архитектура': [0],
 'vacation_preference_Ночные клубы': [0],
 'vacation_preference_Пляжный отдых': [0],
 'vacation_preference_Шопинг': [1]}

Переменная example содержит словарь — структуру данных языка Python, состоящую из пар «ключ — значение». Видим, что ключу 'age' в нашем словаре соответствует значение [31], и догадываемся, что здесь имеется в виду возраст: 31 год. И поскольку ключу 'city_Краснодар' соответствует единица, а всем остальным city-ключам нули, то делаем вывод, что наш новый турист — из Краснодара.

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

Предсказание

example_df = pd.DataFrame(example)

Эта строка кода преобразует словарь example в pandas-формат DataFrame и помещает его в переменную example_df.

А теперь: барабанная дробь! Делаем предсказание:

model.predict(example_df)

Мы запустили метод .predict () для нашей модели model на основе данных из переменной example_df. Куда же, по мнению модели, поедет 31-летний краснодарец, любитель шопинга и автомобилей? Это узнают только те, кто создал модель вместе с нами!

Меняя возраст, город и другие параметры в значениях словаря example, можно получать прогнозы модели для других туристов. Поместите все три команды в одну ячейку и запускайте её на выполнение каждый раз, когда вы меняете данные и вам нужно очередное предсказание:

example = {'age': [31],
 'city_Екатеринбург': [0],
 'city_Киев': [0],
 'city_Краснодар': [1],
 'city_Минск': [0],
 'city_Москва': [0],
 'city_Новосибирск': [0],
 'city_Омск': [0],
 'city_Петербург': [0],
 'city_Томск': [0],
 'city_Хабаровск': [0],
 'city_Ярославль': [0],
 'family_members': [0],
 'salary': [130000],
 'transport_preference_Автомобиль': [1],
 'transport_preference_Космический корабль': [0],
 'transport_preference_Морской транспорт': [0],
 'transport_preference_Поезд': [0],
 'transport_preference_Самолет': [0],
 'vacation_preference_Архитектура': [0],
 'vacation_preference_Ночные клубы': [0],
 'vacation_preference_Пляжный отдых': [0],
 'vacation_preference_Шопинг': [1]}
example_df = pd.DataFrame(example)
model.predict(example_df)

Итог (и полезные ссылки)

Мы сформировали обучающий датасет, разбив на две части датафрейм Pandas, натренировали на нём модель Random Forest из библиотеки Sklearn и даже сделали первое предсказание, написав код словаря на языке Python.

Ссылка на колаб-ноутбук — здесь. Вы можете открыть его и просто запускать код в браузере. А чтобы сохранить себе на Диск, воспользуйтесь опцией «Создать копию» в меню «Файл». Пожалуйста, не забудьте выгрузить в него исходную Excel-таблицу.

Изучайте IT на практике — бесплатно

Курсы за 2990 0 р.

Я не знаю, с чего начать
Научитесь: Профессия Python-разработчик Узнать больше
Понравилась статья?
Да

Пользуясь нашим сайтом, вы соглашаетесь с тем, что мы используем cookies 🍪

Ссылка скопирована