Модели машинного обучения стали повсеместными в современном мире, и их приложения варьируются от беспилотных автомобилей до персонализированной медицины. По мере того как эти модели становятся все более сложными, становится все более важным убедиться, что они работают правильно и дают точные результаты. Здесь на помощь приходит автоматизированное тестирование.
Автоматизированное тестирование — это процесс написания кода для автоматического тестирования программных приложений и систем, чтобы убедиться, что они работают должным образом. В контексте машинного обучения автоматизированное тестирование включает в себя написание кода для проверки производительности моделей машинного обучения и обеспечения того, чтобы они давали точные и надежные результаты.
В этой статье мы рассмотрим, как использовать конвейеры scikit-learn для задач классификации и как писать автоматические тесты для этих конвейеров с помощью pytest. Мы продемонстрируем, как автоматизированное тестирование может помочь выявить ошибки на ранней стадии и убедиться, что наши модели работают правильно и дают точные результаты.
Конвейеры Scikit-Learn
Scikit-learn — это популярная библиотека машинного обучения на Python, которая предоставляет широкий спектр инструментов и алгоритмов для создания и развертывания моделей машинного обучения. Одной из самых мощных функций scikit-learn является возможность создавать конвейеры, представляющие собой последовательности шагов предварительной обработки данных, за которыми следует алгоритм машинного обучения. В этой статье мы рассмотрим, как использовать конвейеры scikit-learn для задач классификации и как писать автоматические тесты для этих конвейеров с помощью pytest.
Набор данных
В этом примере мы будем использовать набор данных радужной оболочки, который обычно используется для задач классификации в машинном обучении. Набор данных ириса содержит 150 образцов цветов ириса, по 50 образцов каждого из трех разных видов. Каждый образец имеет четыре характеристики: длина чашелистика, ширина чашелистика, длина лепестка и ширина лепестка. Цель состоит в том, чтобы научить модель машинного обучения предсказывать вид цветка ириса на основе его характеристик.
Строительство трубопровода
Чтобы построить конвейер в scikit-learn, нам нужно сначала определить этапы предварительной обработки и алгоритм машинного обучения, который мы хотим использовать. В этом примере мы будем использовать преобразователь StandardScaler
для нормализации данных и оценщик LogisticRegression
для выполнения классификации. Вот код для построения пайплайна:
from sklearn.pipeline import Pipeline from sklearn.preprocessing import StandardScaler from sklearn.linear_model import LogisticRegression def create_pipeline(): return Pipeline([ ('scaler', StandardScaler()), ('clf', LogisticRegression()) ])
Функция create_pipeline()
создает объект конвейера, который сначала применяет преобразователь StandardScaler
к данным, а затем подгоняет оценщик LogisticRegression
к нормализованным данным. Преобразователь StandardScaler
масштабирует данные таким образом, чтобы каждый признак имел нулевое среднее значение и единичную дисперсию, что является общим этапом предварительной обработки для многих алгоритмов машинного обучения. Оценщик LogisticRegression
представляет собой линейную модель, которая выполняет бинарную или многоклассовую классификацию с использованием логистической функции.
Написание автоматизированного теста
Теперь, когда мы построили конвейер, нам нужно протестировать его, чтобы убедиться, что он работает правильно. Для этого напишем автоматизированный тест с помощью pytest. Автоматический тест загрузит набор данных радужной оболочки, разделит его на обучающий набор и тестовый набор, установит конвейер на обучающем наборе и оценит его точность на тестовом наборе. Вот код для теста:
from pipeline import create_pipeline from sklearn.datasets import load_iris from sklearn.model_selection import train_test_split def test_pipeline_accuracy(): # Arrange iris = load_iris() X_train, X_test, y_train, y_test = train_test_split( iris.data, iris.target, test_size=0.2, random_state=42) pipeline = create_pipeline() # Act pipeline.fit(X_train, y_train) accuracy = pipeline.score(X_test, y_test) # Assert assert accuracy >= 0.9
Функция test_pipeline_accuracy()
загружает набор данных радужной оболочки с помощью функции load_iris()
, разбивает его на обучающий набор и тестовый набор с помощью функции train_test_split()
и создает объект конвейера с помощью определенной ранее функции create_pipeline()
. Затем конвейер аппроксимируется на обучающем наборе с помощью метода fit()
, а его точность оценивается на тестовом наборе с использованием метода score()
. Наконец, точность проверяется, чтобы убедиться, что она составляет не менее 0,9, с помощью оператора assert
.
Заключение
В этой статье мы продемонстрировали, как использовать конвейеры scikit-learn для задач классификации и как писать автоматические тесты для этих конвейеров с помощью pytest. Написав тесты для наших конвейеров, мы можем убедиться, что наши модели работают правильно и дают точные результаты. Тестирование — важная часть процесса разработки машинного обучения, оно может помочь нам выявить ошибки на ранней стадии и избежать дорогостоящих ошибок. Используя конвейеры, мы можем создавать модульные, многоразовые и тестируемые системы машинного обучения, которые проще поддерживать и развертывать.