HTML Diff
0 added 0 removed
Original 2026-01-01
Modified 2026-02-21
1 <p><a>#статьи</a></p>
1 <p><a>#статьи</a></p>
2 <ul><li>25 янв 2021</li>
2 <ul><li>25 янв 2021</li>
3 <li>0</li>
3 <li>0</li>
4 </ul><p>Все вокруг обучают машины, пора попробовать и нам.</p>
4 </ul><p>Все вокруг обучают машины, пора попробовать и нам.</p>
5 <p> vlada_maestro / shutterstock</p>
5 <p> vlada_maestro / shutterstock</p>
6 <p>Кандидат философских наук, специалист по математическому моделированию. Пишет про Data Science, AI и программирование на Python.</p>
6 <p>Кандидат философских наук, специалист по математическому моделированию. Пишет про Data Science, AI и программирование на Python.</p>
7 <p>Возьмём данные о предпочтениях туристов, обучим на них популярную модель машинного обучения и сделаем предсказание - в точности как настоящие дата-сайентисты, разрабатывающие рекомендательные системы.</p>
7 <p>Возьмём данные о предпочтениях туристов, обучим на них популярную модель машинного обучения и сделаем предсказание - в точности как настоящие дата-сайентисты, разрабатывающие рекомендательные системы.</p>
8 <p>Для этого:</p>
8 <p>Для этого:</p>
9 <ul><li><strong>Сформируем</strong>тренировочный<em>датасет</em>в виде<em>датафреймов</em><em>Pandas</em>(<a>наша статья</a>об этой библиотеке).</li>
9 <ul><li><strong>Сформируем</strong>тренировочный<em>датасет</em>в виде<em>датафреймов</em><em>Pandas</em>(<a>наша статья</a>об этой библиотеке).</li>
10 <li><strong>Обучим</strong>модель из библиотеки<em>Sklearn</em>на получившемся датасете.</li>
10 <li><strong>Обучим</strong>модель из библиотеки<em>Sklearn</em>на получившемся датасете.</li>
11 <li><strong>Напишем</strong>код на Python для дальнейших предсказаний (прочитайте<a>статью</a>про Python-минимум для занятий data science).</li>
11 <li><strong>Напишем</strong>код на Python для дальнейших предсказаний (прочитайте<a>статью</a>про Python-минимум для занятий data science).</li>
12 </ul><p>В исходной таблице собраны данные о тысяче туристов: возраст, доходы, предпочтения. Ключевая колонка называется target - это город, который конкретный турист выбрал в итоге для поездки. Наша модель научится предсказывать именно её значение - уже для новых туристов.</p>
12 </ul><p>В исходной таблице собраны данные о тысяче туристов: возраст, доходы, предпочтения. Ключевая колонка называется target - это город, который конкретный турист выбрал в итоге для поездки. Наша модель научится предсказывать именно её значение - уже для новых туристов.</p>
13 <p>Основная часть таблицы содержит только числа, что удобно для модели. Например, если в колонке city_Екатеринбург стоит единица, а в остальных колонках, названия которых начинаются с city_, - нули, это означает, что этот турист екатеринбуржец.</p>
13 <p>Основная часть таблицы содержит только числа, что удобно для модели. Например, если в колонке city_Екатеринбург стоит единица, а в остальных колонках, названия которых начинаются с city_, - нули, это означает, что этот турист екатеринбуржец.</p>
14 <p>Скачайте таблицу по <a>этой ссылке</a>на компьютер и загрузите её в свой Google Colab - сервис, позволяющий писать код и работать с данными прямо в браузере, без установки программ на компьютер. Предварительно прочитайте<a>статью о том, как с ним работать</a>.</p>
14 <p>Скачайте таблицу по <a>этой ссылке</a>на компьютер и загрузите её в свой Google Colab - сервис, позволяющий писать код и работать с данными прямо в браузере, без установки программ на компьютер. Предварительно прочитайте<a>статью о том, как с ним работать</a>.</p>
15 <p>Данные нужно прочитать из файла и преобразовать в подходящий для работы формат. Для этого в колабе добавим новую кодовую ячейку с помощью кнопки "+ Код" вверху и напишем в ней:</p>
15 <p>Данные нужно прочитать из файла и преобразовать в подходящий для работы формат. Для этого в колабе добавим новую кодовую ячейку с помощью кнопки "+ Код" вверху и напишем в ней:</p>
16 import pandas as pd df = pd.read_excel('trips_data_for_ML.xlsx', index_col = 0) df.head()<p>В первой строчке мы импортировали популярную библиотеку Pandas, предназначенную для работы с табличными данными. Чтобы каждый раз в коде не писать её полное название, по сложившейся в data science традиции будем использовать для неё короткое имя pd.</p>
16 import pandas as pd df = pd.read_excel('trips_data_for_ML.xlsx', index_col = 0) df.head()<p>В первой строчке мы импортировали популярную библиотеку Pandas, предназначенную для работы с табличными данными. Чтобы каждый раз в коде не писать её полное название, по сложившейся в data science традиции будем использовать для неё короткое имя pd.</p>
17 <p>Во второй строке мы создали переменную с названием df. Далее, после знака "равно", Pandas, под коротким именем pd, с помощью функции .read_excel () прочитала файл trips_data_for_ML.xlsx, который мы загрузили в наш колаб-ноутбук. Параметр index_col мы приравняли к нулю - это означает, что индексной колонкой (той, где идут номера строк) в нашей новой таблице df мы назначили колонку под номером 0 из прочитанной Excel-таблицы.</p>
17 <p>Во второй строке мы создали переменную с названием df. Далее, после знака "равно", Pandas, под коротким именем pd, с помощью функции .read_excel () прочитала файл trips_data_for_ML.xlsx, который мы загрузили в наш колаб-ноутбук. Параметр index_col мы приравняли к нулю - это означает, что индексной колонкой (той, где идут номера строк) в нашей новой таблице df мы назначили колонку под номером 0 из прочитанной Excel-таблицы.</p>
18 <p>Наконец, в третьей строке мы применили к нашей переменной df метод .head ().</p>
18 <p>Наконец, в третьей строке мы применили к нашей переменной df метод .head ().</p>
19 <p>Он показывает первые строки свежесозданного датафрейма (по умолчанию 5). Этим удобно пользоваться, если нужно убедиться, что данные прочитались правильно.</p>
19 <p>Он показывает первые строки свежесозданного датафрейма (по умолчанию 5). Этим удобно пользоваться, если нужно убедиться, что данные прочитались правильно.</p>
20 <p>Теперь датафрейм с нашими данными надо превратить в датасет, на котором модель машинного обучения сможет тренироваться.</p>
20 <p>Теперь датафрейм с нашими данными надо превратить в датасет, на котором модель машинного обучения сможет тренироваться.</p>
21 <p>Для этого разобьём df на две части, которые обозначим как X и y. Идея в том, чтобы в Х содержались все данные туристов, кроме колонки target, то есть выбранных ими городов, а в y - только колонка target c этими городами.</p>
21 <p>Для этого разобьём df на две части, которые обозначим как X и y. Идея в том, чтобы в Х содержались все данные туристов, кроме колонки target, то есть выбранных ими городов, а в y - только колонка target c этими городами.</p>
22 <p>Это похоже на задачник: в одной, большой части находятся условия задач (данные туристов), а в другой части, поменьше, - правильные ответы (города, которые они выбрали). Модель будет учиться именно по этому "задачнику".</p>
22 <p>Это похоже на задачник: в одной, большой части находятся условия задач (данные туристов), а в другой части, поменьше, - правильные ответы (города, которые они выбрали). Модель будет учиться именно по этому "задачнику".</p>
23 <p>Добавляем ячейку кода и пишем:</p>
23 <p>Добавляем ячейку кода и пишем:</p>
24 X = df.drop('target', axis = 1) y = df['target']<p>В первой строчке мы создали переменную X. В неё мы записали часть нашего датафрейма df, из которого специальным методом .drop () удалили колонку 'target'. Параметр axis переводится как "ось", и он равен единице. Это означает, что колонку 'target' мы выкинули по второй, вертикальной, или колоночной оси, то есть целиком.</p>
24 X = df.drop('target', axis = 1) y = df['target']<p>В первой строчке мы создали переменную X. В неё мы записали часть нашего датафрейма df, из которого специальным методом .drop () удалили колонку 'target'. Параметр axis переводится как "ось", и он равен единице. Это означает, что колонку 'target' мы выкинули по второй, вертикальной, или колоночной оси, то есть целиком.</p>
25 <p>Во второй строчке мы создали переменную y и записали туда часть переменной df, а конкретно - колонку с названием 'target'.</p>
25 <p>Во второй строчке мы создали переменную y и записали туда часть переменной df, а конкретно - колонку с названием 'target'.</p>
26 <p>Теперь наши исходные данные поделены на два датафрейма, готовых для обучения модели.</p>
26 <p>Теперь наши исходные данные поделены на два датафрейма, готовых для обучения модели.</p>
27 <p><a>Sklearn</a>(или scikit-learn) - пожалуй, самая популярная библиотека для машинного обучения на языке Python и вторая главная библиотека дата-сайентиста после Pandas.</p>
27 <p><a>Sklearn</a>(или scikit-learn) - пожалуй, самая популярная библиотека для машинного обучения на языке Python и вторая главная библиотека дата-сайентиста после Pandas.</p>
28 from sklearn.ensemble import RandomForestClassifier<p>В этой строчке кода из раздела ensemble библиотеки sklearn мы импортировали конструктор моделей-классификаторов типа Random Forest ("случайный лес") в наш проект.</p>
28 from sklearn.ensemble import RandomForestClassifier<p>В этой строчке кода из раздела ensemble библиотеки sklearn мы импортировали конструктор моделей-классификаторов типа Random Forest ("случайный лес") в наш проект.</p>
29 model = RandomForestClassifier()<p>В переменную с названием model мы записали модель типа Random Forest Classifier с параметрами по умолчанию (в скобках пусто).<strong>Эта переменная и есть наша модель машинного обучения</strong>.</p>
29 model = RandomForestClassifier()<p>В переменную с названием model мы записали модель типа Random Forest Classifier с параметрами по умолчанию (в скобках пусто).<strong>Эта переменная и есть наша модель машинного обучения</strong>.</p>
30 model.fit(X, y) # обучаем модель<p>Да, вот так всё просто - в одну строчку. Мы показываем модели набор данных X, который, как мы уже точно знаем, дал нам столбец значений y. И просто говорим ей что-то вроде: "Если X, то y. Всё понятно?" Если модели "всё понятно", она выдаст в ответ целую пачку своих параметров, в смысле которых мы не будем сегодня разбираться:</p>
30 model.fit(X, y) # обучаем модель<p>Да, вот так всё просто - в одну строчку. Мы показываем модели набор данных X, который, как мы уже точно знаем, дал нам столбец значений y. И просто говорим ей что-то вроде: "Если X, то y. Всё понятно?" Если модели "всё понятно", она выдаст в ответ целую пачку своих параметров, в смысле которых мы не будем сегодня разбираться:</p>
31 <p>Пора приступать к предсказанию.</p>
31 <p>Пора приступать к предсказанию.</p>
32 <p>С точки зрения нашей модели любой турист выглядит примерно так:</p>
32 <p>С точки зрения нашей модели любой турист выглядит примерно так:</p>
33 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]}<p>Переменная example содержит<em>словарь</em> - структуру данных языка Python, состоящую из пар "ключ - значение". Видим, что ключу 'age' в нашем словаре соответствует значение [31], и догадываемся, что здесь имеется в виду возраст: 31 год. И поскольку ключу 'city_Краснодар' соответствует единица, а всем остальным city-ключам нули, то делаем вывод, что наш новый турист - из Краснодара.</p>
33 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]}<p>Переменная example содержит<em>словарь</em> - структуру данных языка Python, состоящую из пар "ключ - значение". Видим, что ключу 'age' в нашем словаре соответствует значение [31], и догадываемся, что здесь имеется в виду возраст: 31 год. И поскольку ключу 'city_Краснодар' соответствует единица, а всем остальным city-ключам нули, то делаем вывод, что наш новый турист - из Краснодара.</p>
34 <p>Скопируйте код выше в новую ячейку и запустите его. Тем самым вы одновременно и объявите переменную example, и поместите в неё словарь, описывающий нового туриста.</p>
34 <p>Скопируйте код выше в новую ячейку и запустите его. Тем самым вы одновременно и объявите переменную example, и поместите в неё словарь, описывающий нового туриста.</p>
35 example_df = pd.DataFrame(example)<p>Эта строка кода преобразует словарь example в pandas-формат DataFrame и помещает его в переменную example_df.</p>
35 example_df = pd.DataFrame(example)<p>Эта строка кода преобразует словарь example в pandas-формат DataFrame и помещает его в переменную example_df.</p>
36 <p>А теперь: барабанная дробь! Делаем предсказание:</p>
36 <p>А теперь: барабанная дробь! Делаем предсказание:</p>
37 model.predict(example_df)<p>Мы запустили метод .predict () для нашей модели model на основе данных из переменной example_df. Куда же, по мнению модели, поедет 31-летний краснодарец, любитель шопинга и автомобилей? Это узнают только те, кто создал модель вместе с нами!</p>
37 model.predict(example_df)<p>Мы запустили метод .predict () для нашей модели model на основе данных из переменной example_df. Куда же, по мнению модели, поедет 31-летний краснодарец, любитель шопинга и автомобилей? Это узнают только те, кто создал модель вместе с нами!</p>
38 <p>Меняя возраст, город и другие параметры в значениях словаря example, можно получать прогнозы модели для других туристов. Поместите все три команды в одну ячейку и запускайте её на выполнение каждый раз, когда вы меняете данные и вам нужно очередное предсказание:</p>
38 <p>Меняя возраст, город и другие параметры в значениях словаря example, можно получать прогнозы модели для других туристов. Поместите все три команды в одну ячейку и запускайте её на выполнение каждый раз, когда вы меняете данные и вам нужно очередное предсказание:</p>
39 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)<p>Мы сформировали обучающий датасет, разбив на две части датафрейм Pandas, натренировали на нём модель Random Forest из библиотеки Sklearn и даже сделали первое предсказание, написав код словаря на языке Python.</p>
39 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)<p>Мы сформировали обучающий датасет, разбив на две части датафрейм Pandas, натренировали на нём модель Random Forest из библиотеки Sklearn и даже сделали первое предсказание, написав код словаря на языке Python.</p>
40 <p>Ссылка на колаб-ноутбук -<a>здесь</a>. Вы можете открыть его и просто запускать код в браузере. А чтобы сохранить себе на Диск, воспользуйтесь опцией "Создать копию" в меню "Файл". Пожалуйста, не забудьте выгрузить в него исходную<a>Excel-таблицу</a>.</p>
40 <p>Ссылка на колаб-ноутбук -<a>здесь</a>. Вы можете открыть его и просто запускать код в браузере. А чтобы сохранить себе на Диск, воспользуйтесь опцией "Создать копию" в меню "Файл". Пожалуйста, не забудьте выгрузить в него исходную<a>Excel-таблицу</a>.</p>
41 <a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>
41 <a><b>Бесплатный курс по Python ➞</b>Мини-курс для новичков и для опытных кодеров. 4 крутых проекта в портфолио, живое общение со спикером. Кликните и узнайте, чему можно научиться на курсе. Смотреть программу</a>