2

我想用 C/C++ 或 Java 编写一个算法(一堆机器学习算法),可能是 Python。语言对我来说并不重要 - 我熟悉以上所有内容。

对我来说重要的是测试。我想使用训练数据训练我的模型。所以我有测试输入,我知道输出应该是什么,并将它与模型的输出进行比较。这是一个什么样的测试?是单元测试吗?我该如何解决这个问题?我可以看到我可以编写一些代码来检查我需要检查的内容,但我想将测试与主代码分开。测试是一个发展良好的领域,我以前见过这样做,但我不知道这种特殊测试的名称和类型,以便我可以阅读它而不会造成混乱。如果您能告诉我这种测试方法叫什么,我将不胜感激。

4

7 回答 7

0

它的单元测试。控制器经过测试,代码被签入和签出,而不会真正弄乱您的开发代码。此过程也称为测试驱动开发 (TDD),您的每个开发周期都在进入下一个软件迭代或阶段之前进行测试。

于 2013-08-14T11:42:43.633 回答
0

这听起来很像测试驱动开发 (TDD),您可以在生产代码之前创建单元测试。这个网站上有很多关于这两个主题的详细答案。我已经链接到几个相关的问题来帮助您入门。

于 2012-04-23T23:51:32.607 回答
0

如果您的输入/输出位于完整程序的外部接口,那就是黑盒系统测试。如果您要进入程序内部以放大特定功能,例如搜索功能,直接向该功能提供输入并观察其行为,这就是单元测试。这可以在功能级别和/或模块级别完成。

于 2012-04-23T23:54:49.237 回答
0

如果您正在编写机器学习项目,那么测试和培训过程并不是真正的测试驱动开发。你听说过协同进化吗?你的学习系统有一组谜题,它们本身也在不断发展。他们的适应性取决于他们对您的案件的混淆程度。

例如,我想发展一个排序网络。我的学习系统是产生网络的程序。我的协同进化系统生成难以分类的输入。排序网络因产生正确的排序而获得奖励,而协同进化系统因在排序网络中触发了多少失败而获得奖励。

我已经通过基因编程项目做到了这一点,而且效果很好。

于 2012-04-24T00:00:05.537 回答
0

可能是回测,这意味着您有一些历史输入并在它们上运行算法以评估算法的性能。您自己使用的术语 -训练数据- 更笼统,您可以搜索它以找到一些有用的链接。

于 2012-04-24T01:01:34.083 回答
0

你最好的选择是观看测试上帝的测试视频的心理http://misko.hevery.com/

Misko 视频链接:

http://misko.hevery.com/presentations/

并阅读此 Google 测试指南http://misko.hevery.com/code-reviewers-guide/

编辑:

任何人都可以编写测试,它们真的很简单,编写测试没有什么魔力,您可以简单地执行以下操作:

var sut = new MyObject();
var res = sut.IsValid();
if(res != true)
{
  throw new ApplicationException("message");
}

当然,这就是理论,这些天我们有工具来简化测试,我们可以写这样的东西:

new MyObject().IsValid().Should().BeTrue();

但是你应该做的是专注于编写可测试的代码,这就是神奇的关键

只需按照 Misko 的测试视频心理即可开始

于 2012-04-24T01:05:41.443 回答
0

虽然这是一个非常古老的帖子,但我的 2 美分 :)

一旦您决定使用哪种算法方法(可以说是您的“评估协议”)并在单一边缘情况下测试了您的算法,您可能会对在多个数据集上运行算法并断言结果在上面的方法感兴趣某个阈值(单独或平均等)

教程解释了如何在pytest框架内进行,这是 python 中最流行的测试框架。它基于一个示例(比较多个数据集上的多项式拟合算法)。

(我是作者,欢迎在github页面提供反馈!)

于 2018-12-13T16:39:43.427 回答