Преимущества TDD в машинном обучении

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

from abc import ABCMeta


class InterfaceCalculator:
    __metaclass__ = ABCMeta

    @abstractmethod
    def calculate_mean(self):
        pass

Примерный контрольный пример

from unittest import TestCase


class TestInterfaceCalculator(TestCase):

    def test_should_correctly_calcluate_mean(self):
        X=[1,1]
        expected_mean = 1
        calcluator =Calculator()
        self.assertAlmostEqual(calculator.calculate_mean(X), expected_mean) 

Я пропускаю реализацию класса Calculator (InterfaceCalculator), потому что это тривиально.

Следующая идея довольно проста для понимания. Как насчет машинного обучения? Давайте рассмотрим следующий пример. Мы хотели бы внедрить классификатор фотографий кошек и собак. Начните с интерфейса.

from abc import ABCMeta


class InterfaceClassifier:
    __metaclass__ = ABCMeta

    @abstractmethod
    def train_model(self, data):
        pass

    @abstractmethod
    def predict(self, data):
        pass

Я подготовил очень силовой набор юнит-тестов

from unittest import TestCase


class TestInterfaceCalculator(TestCase):
    def __init__(self):
        self.model = CatDogClassifier()

    def test_should_correctly_train_model(self, data):
        """
        How can be implemented?
        """
        self.model.train_model(data)

    def test_should_correctly_calcluate_mean(self):
        input ="cat.jpg"
        expected_result = "cat"
        calcluator =.assertAlmostEqual(self.model.preditct(input), expected_result)

Это способ использовать TDD, чтобы помочь работать на модели машинного обучения? Или в этом случае TDD бесполезен. Это, только может помочь нам проверить правильность входных данных и добавить очень высокоуровневый тест обученной модели? Как я могу создать хорошие автоматические тесты?

Ответы на вопрос(2)

Ваш ответ на вопрос