据我所知,TDD 的典型工作流程是基于黑盒测试的。 首先我们定义接口(interface),然后编写一个或一组测试,然后我们实现通过所有测试的代码。 请看下面的示例:
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就没用了。它只能帮助我们验证输入数据的正确性并为训练好的模型添加非常高水平的测试吗?如何创建良好的自动测试?
最佳答案
使用 TDD,您可以以测试的形式描述预期的行为,然后创建代码来满足测试。虽然这对于机器学习模型的某些组件来说效果很好,但对于机器学习模型的高级行为通常效果不佳,因为事先无法准确地知道预期的行为。开发机器学习模型的过程通常涉及尝试不同的方法,看看哪一种最有效。该行为可能以百分比来衡量,例如,识别准确率为 95%,而不是绝对值。
关于machine-learning - TDD 在机器学习中的好处,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38437406/