Машинное обучение (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 для задачи классификации ирисов:
В этом примере мы использовали библиотеку 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 для задачи бинарной классификации:
В этом примере мы использовали библиотеку TensorFlow/Keras для решения задачи бинарной классификации. Давайте поэтапно разберем, что происходит:
Данные:
- Обучающие данные (train_data) представляют собой набор признаков, например:
Возраст.
Доход.
Количество покупок.
Другие числовые и категориальные признаки (например, поведение клиента).
- Метки (train_labels) обозначают принадлежность к одному из двух классов:
1 — клиент купил товар.
0 — клиент не купил товар.
- Тестовые данные (test_data) содержат характеристики новых объектов (клиентов), для которых мы хотим предсказать вероятность покупки товара.
Обучение модели:
- Мы создали нейронную сеть с тремя слоями:
Входной слой принимает 20 признаков.
Два скрытых слоя с функцией активации ReLU обучаются выявлять сложные зависимости.
Выходной слой возвращает вероятность принадлежности к классу 1 (например, вероятность, что клиент купит товар).
- Модель обучается, минимизируя функцию потерь (binary cross-entropy), чтобы улучшить свои предсказания на обучающих данных.
Результат:
- После обучения модель предсказывает вероятности для тестовых данных.
- Например, вероятность 0.85 для первого клиента означает, что с высокой вероятностью он купит товар.
- Вероятности можно интерпретировать и при необходимости округлить до 0 или 1.
Вывод:
В этом примере мы обучили нейронную сеть предсказывать вероятность принадлежности объекта к одному из двух классов. Мы использовали заранее подготовленные обучающие и тестовые данные для проверки модели.
3. PyTorch
PyTorch — это библиотека для машинного обучения и глубокого обучения, которая особенно популярна в академической среде. Она предоставляет гибкость для создания сложных моделей и проведения экспериментов.
Пример нейронной сети на PyTorch:
В этом примере мы использовали библиотеку 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
Пример кода для обработки данных:
Результат после обработки:
Что делает модель?
- Здесь мы не обучаем модель, а подготавливаем данные: заполняем пропуски, преобразуем текстовые категории в числовой формат. Эти обработанные данные можно использовать для обучения моделей, как мы делали в предыдущих примерах.
Данные:
- Мы загрузили данные из файла 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 - справочник тестировщика
Пишите в комментариях какой пункт было бы интересно рассмотреть более подробно.
Также будет интересно почитать: Вопросы которые задают на собеседовании тестировщикам