Преимущества 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 бесполезен. Это, только может помочь нам проверить правильность входных данных и добавить очень высокоуровневый тест обученной модели? Как я могу создать хорошие автоматические тесты?