TDD在机器学习中的优势

use*_*600 7 tdd machine-learning

据我所知,TDD的典型工作流程基于黑盒测试.首先我们定义接口然后编写一个或一组测试,然后我们实现通过所有测试的代码.那么看下面的例子:

from abc import ABCMeta


class InterfaceCalculator:
    __metaclass__ = ABCMeta

    @abstractmethod
    def calculate_mean(self):
        pass
Run Code Online (Sandbox Code Playgroud)

示例性测试案例

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) 
Run Code Online (Sandbox Code Playgroud)

我跳过类Calculator(InterfaceCalculator)的实现,因为它是微不足道的.

以下想法很容易理解.机器学习怎么样?让我们考虑以下示例.我们想实现猫狗照片分类器.从界面开始.

from abc import ABCMeta


class InterfaceClassifier:
    __metaclass__ = ABCMeta

    @abstractmethod
    def train_model(self, data):
        pass

    @abstractmethod
    def predict(self, data):
        pass
Run Code Online (Sandbox Code Playgroud)

我准备了很多单元测试

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)
Run Code Online (Sandbox Code Playgroud)

是使用TDD帮助处理机器学习模型的方法吗?或者在这种情况下TDD是无用的.它只能帮助我们验证输入数据的正确性并为训练模型添加非常高水平的测试?如何创建良好的自动测试?

Mik*_*ale 4

使用 TDD,您可以以测试的形式描述预期的行为,然后创建代码来满足测试。虽然这对于机器学习模型的某些组件来说效果很好,但对于机器学习模型的高级行为通常效果不佳,因为事先无法准确地知道预期的行为。开发机器学习模型的过程通常涉及尝试不同的方法,看看哪一种最有效。行为可能以百分比来衡量,例如,识别的准确率是 95%,而不是绝对的。