如何确保机器学习算法的实现是正确的?

机器算法验证 机器学习 数据挖掘 算法 验证
2022-03-29 00:08:09

假设有一种机器学习算法(例如分类)是众所周知的,并且由算法的原始创建者实施。然而,您所拥有的只是使用算法但看不到源代码的能力。

现在你想实现这个算法,然后检查你的实现是否正确。由于您不能对参数使用相同的初始化值(因为您无权访问原始实现的源代码),因此您不能期望得到完全相同的结果。假设该算法给出了输出概率,那么您的方法可能会给出与原始方法略有不同的结果。

确实,您的实现可以像原始实现一样给出正确的分类结果,但概率可能会有所不同。

给定这样的场景,你如何判断你的实现是正确的?

这种情况发生在一个朋友身上,他的实现给出了正确的分类结果,但毕竟他在他的代码中发现了一个严重的错误!

那么有没有办法测试和验证机器学习算法的实现呢?无论算法的类型如何(分类、回归……等)。

我能看到的唯一问题是无法对参数使用相同的初始值。然后也许有某种统计测试可以以某种方式测试关于参数初始值的结果。

3个回答

算法性能有多种指标(精度、召回率、f1 等)。我会首先搜索算法作者的论文,他们提到他们在哪些数据上测试过他们的算法,他们的算法在该数据上的结果是什么(他们提到了什么指标)。然后我会搜索相同或相似的数据,在上面运行我的实现并将结果与​​他们的比较

关于机器学习算法的广义测试:

是的,如果有已知的工作方法,将您的结果与该方法在所有可能的参数上进行比较将保证您的程序也是已知的工作方法。这通常是不可能的并且总是毫无意义的,因为已经有一种已知的工作方法。

如果没有已知的工作方法,那么通常没有,作为一个反点考虑这个计算回归系数的“代码”:

β^=(XX)1Xy+δ 在哪里δ=1000什么时候y[1]=π否则为 0。

这种实现几乎在所有时间都是正确的(技术上正确,但不符合 IEEE 754),并且在计算上很难找到它的错误。

关于方法的实现:

标准实践与所有软件开发中的小测试用例相同,并针对已知事物进行持续验证。例如,如果模型在某些参数下具有已知的封闭形式解决方案或等效于另一种方法,请检查。

另请注意,论文并不完美,在我所做的大多数点燃评论中,我通常会发现一些错字。其中一些拼写错误实际上会导致错误的结果,因此请务必仔细检查您的来源。

电子邮件出现在期刊论文上是有原因的(提示:这样您就可以联系作者)。另请注意,如果您对他们很好,作者通常不会咬人。只要有礼貌,并表明你已经做了一些工作。但不要指望他们会逐步检查您损坏的代码来查找错误。

如果您遇到作者不会发布代码或不会回复您的情况,请不要使用该方法,代码的质量很可能“足以发布”但仅此而已. 那里当然不乏机器学习算法。检查谁引用了相关论文并查看他们是否有一些代码也是值得的。

你知道你的情况是什么“正确”吗?确定正确的含义,然后根据您的数据测试您的实现,看看您有多接近。

除非您的测试覆盖率是 100%,否则您永远不会知道您的代码中是否存在令人讨厌的边缘情况错误。如果您拥有正在建模的算法的初始参数,除非您的测试触及错误所在的代码,否则您不会这样做。