9

在AI和ML的2个项目中工作时,出现了这个问题。什么如果我建立一个模型(例如分类神经网络,K-NN等等),并且这个模型使用一些包含随机性的函数。如果我不修复种子,那么每次在相同的训练数据上运行该算法时,我都会得到不同的准确度结果。但是,如果我解决了这个问题,那么其他设置可能会产生更好的结果在人工智能和机器学习中的随机性

对一组精度进行平均,足以说明该模型的准确性为xx%?

我不确定如果这是正确的地方问这样的问题/打开这样的讨论。

回答

4

有一些自然依赖于随机性的模型(例如随机森林)和仅使用随机性作为探索空间的一部分的模型(例如神经网络的值的初始化),但实际上有一个明确的,确定性的,目标函数。

对于第一种情况,您需要使用多个种子并报告平均准确度,std。偏差以及您获得的最小值。如果你有一种方法来重现这一点通常是很好的,所以只需要使用多个固定的种子。

对于第二种情况,您可以随时告诉训练数据,哪种运行效果最好(尽管实际上它可能不是能够提供最佳测试精度的那种)。因此,如果您有时间,可以说10次运行,然后评估最佳训练错误(或验证错误,只需从不评估测试对此决定)。您可以升级并进行多次多次运行并获得标准偏差。但是,如果您发现这很重要,那可能意味着您没有尝试足够的初始化,或者您没有为数据使用正确的模型。

2

我概括了我所得到的问题的答案, 我认为准确度始终是多次运行的平均准确度和标准偏差。所以如果你正在考虑准确性,你会对随机生成器使用不同的种子,你是不是正在考虑更大范围的输入(这应该是一件好事)。但是你必须考虑标准差来考虑精度。还是我的问题完全错误?

6

简单的答案,是的,你随机化它,并使用统计数据来显示准确性。然而,仅仅平均几次跑步是不够的。至少需要一些关于变化的概念。了解“70%”准确度是否意味着“每100次运行70%准确”或“100%准确一次,40%准确一次”很重要。

如果你只是想玩弄一些并说服自己某种算法有效,那么你可以运行它30次左右,看看平均值和标准偏差并称之为一天。如果你要说服别人说它有效,你需要研究如何进行更正式的假设检验。

2

随机技术通常用于搜索非常大的解决方案空间,其中穷举搜索是不可行的。因此,您将尝试用尽可能均匀的分布遍历大量采样点几乎是不可避免的。正如其他地方所提到的,基本的统计技术将帮助您确定样本何时足够大以代表整个空间。

要测试准确性,最好留出一部分输入模式并避免针对这些模式进行训练(假设您正在从数据集中学习)。然后,您可以使用该集合来测试您的算法是否正确地学习底层模式,或者它是否只是记住示例。

另一件要考虑的事情是随机数发生器的随机性。标准随机数生成器(例如<stdlib.h>中的rand)在许多情况下可能不会成功,因此请考虑使用更稳健的算法。

-1

我相信cross-validation可能会给你你所问:平均,因此更可靠的分类性能的估计。它不包含随机性,除了最初排列数据集。变化来自选择不同的火车/测试分组。