除了产生不正确的结果之外,科学编程中最令人担忧的事情之一就是无法重现生成的结果。哪些最佳实践有助于确保您的分析具有可重复性?
- 在线发布原始原始数据并免费提供下载。
- 使代码库开源并可在线下载。
- 如果在优化中使用随机化,则重复优化多次,选择结果的最佳值或使用固定的随机种子,以便重复相同的结果。
- 在执行分析之前,您应该将数据分为“训练/分析”数据集和“测试/验证”数据集。对“训练”数据集进行分析,并确保您获得的结果仍然适用于“验证”数据集,以确保您的分析实际上是可概括的,而不是简单地记住相关数据集的特殊性。
前两点非常重要,因为提供数据集可以让其他人对相同的数据执行自己的分析,这会增加您对自己分析的有效性的信心。此外,使数据集在线可用 - 特别是如果您使用链接数据格式 - 使得爬虫可以将您的数据集与其他数据集聚合,从而能够使用更大的数据集进行分析......在许多类型的研究中,样本大小有时太小而无法对结果充满信心......但是共享数据集可以构建非常大的数据集。或者,有人可以使用您的数据集来验证他们对其他数据集执行的分析。
此外,使您的代码开源可以让您的同行审查代码和过程。通常,此类审查会导致缺陷的发现或额外优化和改进的可能性。最重要的是,它允许其他研究人员改进您的方法,而不必从头开始实施您已经完成的所有操作。当研究可以专注于改进而不是重新发明轮子时,它会极大地加快研究的步伐。
至于随机化......许多算法依赖随机化来实现其结果。随机方法和蒙特卡罗方法非常常见,虽然它们已被证明在某些情况下是收敛的,但仍然有可能得到不同的结果。确保获得相同结果的方法是在代码中创建一个循环,该循环调用计算固定次数,并选择最佳结果。如果您使用足够多的重复,您可以期望找到全局或接近全局的最优值,而不是陷入局部最优值。另一种可能性是使用预定的种子,尽管恕我直言,这不是一个好的方法,因为您可以选择一个导致您陷入局部最优的种子。此外,无法保证不同平台上的随机数生成器将为该种子值生成相同的结果。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)