Benefícios do TDD no aprendizado de máquina
Tanto quanto eu sei, o fluxo de trabalho típico do TDD é baseado em testes de caixa preta. Primeiro, definimos a interface, depois escrevemos um ou conjunto de testes e, em seguida, implementamos o código que passa em todos os testes. Então veja o exemplo abaixo:
from abc import ABCMeta
class InterfaceCalculator:
__metaclass__ = ABCMeta
@abstractmethod
def calculate_mean(self):
pass
Caso de teste exemplar
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)
Eu pulo a implementação da classe Calculator (InterfaceCalculator) porque é trivial.
A ideia a seguir é bem fácil de entender. E o aprendizado de máquina? Vamos considerar o seguinte exemplo. Gostaríamos de implementar o classificador de fotos de gatos e cachorros. Comece pela interface.
from abc import ABCMeta
class InterfaceClassifier:
__metaclass__ = ABCMeta
@abstractmethod
def train_model(self, data):
pass
@abstractmethod
def predict(self, data):
pass
Eu preparei conjunto muito peitoril dos unittests
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)
É a maneira de usar o TDD para ajudar a trabalhar no modelo de aprendizado de máquina? Ou, neste caso, o TDD é inútil. Isso só pode nos ajudar a verificar a correção dos dados de entrada e adicionar testes de nível muito alto ao modelo treinado? Como posso criar bons testes automáticos?