【问题标题】:Benefits of TDD in machine learningTDD 在机器学习中的好处
【发布时间】:2016-11-21 02:26:18
【问题描述】:

据我所知,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 是没用的。它,只能帮助我们验证输入数据的正确性并为训练好的模型添加非常高水平的测试吗?如何创建良好的自动测试?

【问题讨论】:

  • 不能说我已经将其作为测试套件的一部分,但首先想到的是针对基准或朴素分类器测试分类器的交叉验证错误。跨度>

标签: machine-learning tdd


【解决方案1】:

我认为您可能在这里谈论两个不同的目标:

  1. 如何提高算法的性能?例如,这将需要对分类问题进行标记的正确性。但这也可能意味着很多其他的事情,比如它需要多少超参数,运行时是什么等等。例如,这一类别中的一个特殊问题是调整您的模型(比如说逻辑回归模型),这可以通过将数据拆分为训练、验证和测试集的标准机制来完成。

  2. 如何在我的算法中发现错误?这侧重于发现功能问题。换句话说,由于代码没有按照设计编写而存在的问题。即使设计可能是一个糟糕的设计(属于上面的第 1 点),代码也应该正确地实现它。这是 TDD 最有价值的地方。是的,为了使这个有用,测试器代码应该有特定的参数来验证和断言。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-05-10
      • 2010-09-11
      • 2021-04-01
      • 1970-01-01
      • 2023-01-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多