Найти в Дзене

Машинное обучение на Python с примерами

Оглавление

Машинное обучение (ML) стало одной из ключевых технологий современной науки и индустрии. Оно используется для создания умных систем, которые могут предсказывать, классифицировать, находить закономерности и автоматизировать процессы в различных областях, таких как медицина, финансы, маркетинг и т.д. Python является одним из самых популярных языков программирования для работы с машинным обучением благодаря широкому набору библиотек, удобству использования и большому сообществу разработчиков.

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

В данной статье мы рассмотрим основы машинного обучения, его ключевые этапы, а также познакомимся с популярными библиотеками Python, такими как Scikit-learn, TensorFlow, Keras, PyTorch и Pandas, с примерами их использования.

Что такое машинное обучение?

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

Машинное обучение делится на три основные категории:

1. Обучение с учителем (Supervised Learning): Модель обучается на размеченных данных, где каждой входной переменной соответствует метка (например, предсказание цены дома на основе его характеристик).

2. Обучение без учителя (Unsupervised Learning): Модель выявляет скрытые закономерности в данных без использования меток (например, кластеризация клиентов по их поведению).

3. Обучение с подкреплением (Reinforcement Learning): Модель обучается взаимодействовать с окружающей средой, получая награды за правильные действия (например, обучение робота ходьбе).

Популярные библиотеки Python для машинного обучения

Python предоставляет множество библиотек для работы с машинным обучением. Рассмотрим некоторые из них:

1. Scikit-learn

Scikit-learn — это библиотека для реализации базовых алгоритмов машинного обучения (линейная регрессия, деревья решений, кластеризация и т.д.). Она подходит для большинства задач обучения с учителем и без учителя.

Пример использования Scikit-learn для задачи классификации ирисов:

-2

Код на Github

В этом примере мы использовали библиотеку Scikit-learn для решения задачи классификации. Давайте поэтапно разберем, что происходит:

Данные:

  • Мы вручную задали обучающие данные (train_data), которые представляют характеристики цветков ириса:

Длина и ширина лепестков.

Длина и ширина чашелистиков.

  • Также мы указали метки (train_labels), которые обозначают вид цветка:

0 для Setosa.

1 для Versicolor.

2 для Virginica.

  • Тестовые данные (test_data) содержат характеристики новых цветков, вид которых мы хотим предсказать.
  • Истинные метки для тестовых данных (test_labels) используются для оценки точности модели.

Обучение модели:

  • Мы использовали алгоритм RandomForestClassifier, который строит ансамбль деревьев решений для классификации.
  • Модель обучается, анализируя зависимости между признаками (например, длиной и шириной лепестков) и метками (вид цветка).

Результат:

  • После обучения модель предсказывает вид цветка для тестовых данных.
  • Мы оцениваем точность модели, сравнивая предсказания с истинными метками (test_labels). Это позволяет понять, насколько хорошо модель справляется с задачей классификации.

Вывод:

В этом примере мы обучали модель классифицировать цветы ириса на основе их характеристик (например, длина и ширина лепестков). Мы использовали заранее подготовленные обучающие и тестовые данные, чтобы проверить, насколько точно модель может предсказывать вид цветка.

2. TensorFlow и Keras

TensorFlow — это библиотека для построения и обучения нейронных сетей. Keras является высокоуровневой оболочкой для TensorFlow, которая упрощает процесс создания моделей.

Пример обучения нейронной сети с использованием Keras для задачи бинарной классификации:

-3

Код на Github

В этом примере мы использовали библиотеку TensorFlow/Keras для решения задачи бинарной классификации. Давайте поэтапно разберем, что происходит:

Данные:

  • Обучающие данные (train_data) представляют собой набор признаков, например:

Возраст.

Доход.

Количество покупок.

Другие числовые и категориальные признаки (например, поведение клиента).

  • Метки (train_labels) обозначают принадлежность к одному из двух классов:

1 — клиент купил товар.

0 — клиент не купил товар.

  • Тестовые данные (test_data) содержат характеристики новых объектов (клиентов), для которых мы хотим предсказать вероятность покупки товара.

Обучение модели:

  • Мы создали нейронную сеть с тремя слоями:

Входной слой принимает 20 признаков.

Два скрытых слоя с функцией активации ReLU обучаются выявлять сложные зависимости.

Выходной слой возвращает вероятность принадлежности к классу 1 (например, вероятность, что клиент купит товар).

  • Модель обучается, минимизируя функцию потерь (binary cross-entropy), чтобы улучшить свои предсказания на обучающих данных.

Результат:

  • После обучения модель предсказывает вероятности для тестовых данных.
  • Например, вероятность 0.85 для первого клиента означает, что с высокой вероятностью он купит товар.
  • Вероятности можно интерпретировать и при необходимости округлить до 0 или 1.

Вывод:

В этом примере мы обучили нейронную сеть предсказывать вероятность принадлежности объекта к одному из двух классов. Мы использовали заранее подготовленные обучающие и тестовые данные для проверки модели.

3. PyTorch

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

Пример нейронной сети на PyTorch:

-4

Код на GitHub

В этом примере мы использовали библиотеку PyTorch для решения задачи бинарной классификации. Давайте разберем, что происходит:

Данные:

  • Обучающие данные (train_data) включают 20 признаков, например:

Возраст.

Доход.

Другие характеристики (например, поведение клиента).

  • Метки (train_labels) обозначают принадлежность к классу:

1 — объект принадлежит классу (например, клиент купил товар).

0 — объект не принадлежит классу (например, клиент не купил товар).

  • Тестовые данные (test_data) содержат характеристики новых объектов, для которых мы хотим сделать предсказание.

Обучение модели:

  • Мы создали нейронную сеть с использованием PyTorch:

Первый слой состоит из 20 входных нейронов и 16 скрытых нейронов.

Второй слой уменьшает количество скрытых нейронов до 8.

Выходной слой содержит 1 нейрон и возвращает вероятность принадлежности к классу 1.

  • Функция активации ReLU используется для скрытых слоев, а сигмоидальная функция применяется на выходе.
  • Мы обучаем модель, минимизируя функцию потерь (binary cross-entropy) с помощью оптимизатора Adam.

Результат:

  • После обучения модель возвращает вероятности для тестовых данных.
  • Например, вероятность 0.92 для первого объекта говорит о высокой вероятности, что он принадлежит классу 1.
  • Мы можем округлить вероятности, чтобы получить бинарные предсказания (0 или 1).

Вывод:

В этом примере мы обучили нейронную сеть в PyTorch для бинарной классификации. Мы использовали заранее подготовленные обучающие и тестовые данные, чтобы проверить, насколько эффективно модель предсказывает принадлежность к классу.

4. Pandas

Хотя Pandas не является библиотекой для машинного обучения, она часто используется для предобработки данных, анализа и визуализации.

Пример использования Pandas для предобработки данных:

Описание задачи:
Мы готовим данные для обучения моделей. В этом примере мы заполнили пропуски и преобразовали категориальные переменные.

Тестовые данные:
Для тестирования можете использовать следующий CSV-файл:

Пример data.csv:

age,income,city,purchased
25,50000,Moscow,1
35,,New York,0
45,70000,Moscow,1
,,London,0
40,60000,New York,1

Пример кода для обработки данных:

-5

Результат после обработки:

-6

Что делает модель?

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

Данные:

  • Мы загрузили данные из файла data.csv. Данные включают:

Числовые признаки (например, возраст, доход).

Категориальные признаки (например, город проживания).

Пропуски (например, отсутствуют значения для возраста или дохода).


Предобработка данных:

1. Заполнение пропусков:

Мы используем метод fillna(data.mean(), inplace=True) для заполнения пропусков средними значениями.

Например, если пропущен доход, он заменяется средним доходом по данным.

2. Кодирование категориальных переменных:

Метод pd.get_dummies() преобразует текстовые категории (например, "Moscow", "New York", "London") в числовое представление.

Каждая категория превращается в отдельный бинарный признак.

Вывод:

В этом примере мы выполнили предобработку данных с использованием Pandas. Обработанные данные теперь готовы к использованию в моделях машинного обучения.

Общий вывод по примерам

В каждом из примеров мы решали конкретные задачи машинного обучения:

  • Scikit-learn: Классификация ирисов по их признакам (многоклассовая классификация).
  • TensorFlow/Keras: Предсказание принадлежности объекта к одному из двух классов (бинарная классификация).
  • PyTorch: То же, что и в TensorFlow, но с использованием другой библиотеки.
  • Pandas: Подготовка данных (заполнение пропусков, преобразование категорий) для дальнейшего обучения моделей.

Эти примеры демонстрируют ключевые этапы работы с машинным обучением: подготовка данных, выбор модели, обучение и оценка результатов.

Если Вам интересно, что еще можно найти на канале QA Helper, прочитайте статью: Вместо оглавления. Что вы найдете на канале QA Helper - справочник тестировщика?

Не забудьте подписаться на канал, чтобы не пропустить полезную информацию: QA Helper - справочник тестировщика

Пишите в комментариях какой пункт было бы интересно рассмотреть более подробно.

Также будет интересно почитать: Вопросы которые задают на собеседовании тестировщикам

-7