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

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

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

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

Введение в машинное обучение и его виды

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

Типы машинного обучения

Машинное обучение можно разделить на три типа в зависимости от вовлеченного процесса обучения:

  1. Контролируемое обучение
  2. Неконтролируемое обучение
  3. Обучение с подкреплением

Контролируемое обучение

Это тип машинного обучения, при котором алгоритм учится сопоставлять входные данные с выходными метками, используя набор размеченных обучающих данных. При обучении с учителем алгоритму предоставляются входные данные и соответствующие выходные метки. Затем алгоритм учится распознавать закономерности во входных данных и предсказывать выходные метки для новых, невидимых данных.

Обучение с учителем можно разделить на два типа:

а. Классификация. При классификации алгоритм учится классифицировать входные данные по разным категориям или классам. Например, алгоритм классификации может быть обучен для определения того, является ли электронное письмо спамом или нет.

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

Неконтролируемое обучение

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

Неконтролируемое обучение можно разделить на два типа:

а. Кластеризация. При кластеризации алгоритм учится группировать схожие точки данных на основе их сходства. Например, алгоритм кластеризации может использоваться для группировки клиентов в разные сегменты на основе их истории покупок.

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

Обучение с подкреплением

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

Действие

Достаточно теории, давайте приступим к делу, в машинном обучении существует много типов моделей классификации, таких как деревья решений (например, solutionTreeClassifier), случайные леса, машины опорных векторов (SVM), наивный байесовский метод, K-ближайшие соседи (KNN), логистическая регрессия, Машины повышения градиента (GBM), нейронные сети (например, многослойный персептрон) и т. д.

Дерево решенийКлассификатор

DecisionTreeClassifier — это класс в библиотеке Python scikit-learn (sklearn), который реализует алгоритм дерева решений для задач классификации. Он строит древовидную модель решений и их возможных последствий, которую можно использовать для прогнозирования новых данных. Деревья решений — это тип алгоритма обучения с учителем, который используется как для задач классификации, так и для задач регрессии.

Алгоритм дерева решений работает путем рекурсивного разбиения данных на основе функции, которая максимально уменьшает нечистоту целевой переменной. Примесь обычно измеряется с использованием показателей примеси Джини или энтропии. Алгоритм продолжает разбивать данные до тех пор, пока не будет достигнут критерий остановки, такой как достижение максимальной глубины или минимального количества выборок в листовом узле. Результирующее дерево можно использовать для прогнозирования новых данных, следуя по пути принятия решения от корневого узла к соответствующему конечному узлу.

Класс DecisionTreeClassifier в sklearn позволяет пользователю указывать различные гиперпараметры, управляющие поведением алгоритма, такие как максимальная глубина дерева, минимальное количество выборок, необходимых для разделения внутреннего узла, и критерий разделения (примесь Джини или энтропия). ). Этот класс также включает в себя методы подгонки модели к обучающим данным, прогнозирования новых данных и оценки производительности модели с использованием различных показателей, таких как точность, воспроизводимость и оценка F1.

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

  1. Разделите данные на наборы для обучения и тестирования. Этот шаг включает в себя случайное разделение доступных данных на два набора — набор для обучения и набор для тестирования. Обучающий набор используется для обучения модели, а тестовый набор используется для оценки производительности модели.
  2. Обучение модели. На этом этапе модель обучается на обучающих данных с использованием метода fit класса DecisionTreeClassifier.
  3. Делайте прогнозы на тестовых данных: после того, как модель обучена, ее можно использовать для прогнозирования тестовых данных с использованием метода predict.
  4. Оцените производительность модели. Производительность модели оценивается путем сравнения ее прогнозов на тестовых данных с фактическими метками тестовых данных. Наиболее распространенной метрикой, используемой для оценки эффективности модели классификации, является точность.
  5. Автоматизируйте процесс. Чтобы автоматизировать этот процесс, вы можете использовать среду тестирования, такую ​​как unittest или pytest, для написания тестовых случаев, которые автоматически разбивают данные на наборы для обучения и тестирования, обучают модель, делают прогнозы и оценивают производительность модели.

Код

import pytest
from sklearn.datasets import load_iris
from sklearn.tree import DecisionTreeClassifier
from sklearn.model_selection import train_test_split
from sklearn.metrics import accuracy_score

@pytest.fixture(scope='module')
def model():
    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)
    dtc = DecisionTreeClassifier()
    dtc.fit(X_train, y_train)
    return dtc, X_test, y_test

def test_accuracy(model):
    dtc, X_test, y_test = model
    y_pred = dtc.predict(X_test)
    accuracy = accuracy_score(y_test, y_pred)
    assert accuracy > 0.9

def test_shape(model):
    dtc, X_test, y_test = model
    assert X_test.shape[1] == 4
    assert y_test.shape[0] == 30

if __name__ == '__main__':
    pytest.main()

Выход

model = (DecisionTreeClassifier(), array([[6.1, 2.8, 4.7, 1.2],
       [5.7, 3.8, 1.7, 0.3],
       [7.7, 2.6, 6.9, 2.3],
    ... 1.6, 0.2]]), array([1, 0, 2, 1, 1, 0, 1, 2, 1, 1, 2, 0, 0, 0, 0, 1, 2, 1, 1, 2, 0, 2,
       0, 2, 2, 2, 2, 2, 0, 0]))

    def test_shape(model):
        dtc, X_test, y_test = model
>       assert X_test.shape[1] == 3
E       assert 4 == 3

ML_Automated _Testing_DecisionTreeClassifier.py:24: AssertionError
=========================================================================================== short test summary info =========================================================================================== 
FAILED ML_Automated _Testing_DecisionTreeClassifier.py::test_shape - assert 4 == 3
======================================================================================== 1 failed, 1 passed in 24.42s =========================================================================================

В этом примере мы используем pytest для написания двух тестовых функций: test_accuracy и test_shape. Устройство model загружает набор данных радужной оболочки, разбивает его на наборы для обучения и тестирования, создает экземпляр класса DecisionTreeClassifier и подгоняет классификатор к обучающим данным.

Функция test_accuracy использует обученный классификатор для прогнозирования целевой переменной для тестовых данных, вычисляет точность прогнозов модели с помощью функции accuracy_score и утверждает, что точность превышает 0,9.

Функция test_shape утверждает, что формы тестовых данных верны.

Для запуска тестов мы используем функцию pytest.main().

Приведенный выше код доступен на Github, чтобы поиграть с ним по адресу https://github.com/toniramchandani1/MLTestingPython.

примесь Джини

Примесь Джини - это мера примеси или случайности набора меток или классов в задаче классификации. Он обычно используется в деревьях решений и других алгоритмах машинного обучения для оценки качества разделения данных.

Примесь Джини определяется математически следующим образом:

Примесь Джини = 1 — ∑(p_i)²

где p_i — доля выборок в i-м классе в конкретном узле или подмножестве данных. Примесь Джини находится в диапазоне от 0 до 1, где 0 представляет идеальную чистоту (т. е. все образцы в узле принадлежат к одному классу), а 1 представляет максимальную примесь (т. е. образцы равномерно распределены по всем классам).

При построении дерева решений цель состоит в том, чтобы найти расщепления данных, которые минимизируют примесь Джини в результирующих подмножествах. Разделение, в результате которого получаются подмножества с меньшей примесью Джини, считается более информативным и полезным для точных прогнозов. Уменьшение примеси Джини из-за разделения обычно используется в качестве критерия для выбора наилучшего признака для разделения в каждом узле дерева.

Это очень простой и простой пример серии, поскольку мы продвигаемся вперед, она станет более сложной и практичной, следите за обновлениями !!