machine-learning - TDD 在机器学习中的好处

标签 machine-learning tdd

据我所知,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/

相关文章:

python - Tensorflow - 具有自定义数据集的卷积神经网络无法学习

java - deeplearning4j - 使用 RNN/LSTM 进行音频信号处理

ios - 如何在 Swift 中模拟 NSLocale.preferredLanguages 来测试请求?

class - TDD 我应该创建一个测试用例所需的空类吗?

python - 检查模板失败,因为 "No templates used to render the response"

ruby - 是否可以在 RSpec 中使用参数化规范?

apache-spark - 更改数据框 pyspark 中的列值

machine-learning - 为什么LeNet5使用32×32图像作为输入?

ruby-on-rails - 是否有任何 Rails 插件可以使用 Cucumber 场景生成模型、 View 等?

machine-learning - Rasa Core - 理解故事