人工智能和机器学习中的随机性

12
在进行人工智能和机器学习的两个项目时,我想到了这个问题。如果我正在构建一个模型(例如分类神经网络,K-NN等),而该模型使用包含随机性质的某些函数,那么如果我不固定种子,则每次在相同的训练数据上运行算法时,会得到不同的准确度结果。但是,如果我固定种子,则其他某些设置可能会产生更好的结果。
仅通过对准确率集合取平均就足以说出这个模型的准确度是xx%吗?
我不确定这是否是问这样的问题/打开这样的讨论的正确地方。
5个回答

6
简单的回答是,是的,你需要对其进行随机化并使用统计数据来展示准确性。然而,仅仅平均少量的运行是不够的。你需要至少了解一些变异性的概念。重要的是要知道“70%”准确率是指“100次运行中每次都是70%准确”还是“一次100%准确和一次40%准确”。如果你只是想玩一下并自我确认某个算法是否有效,那么你可以运行它30次左右,查看均值和标准差,就可以结束了。如果你想说服其他人它是有效的,你需要研究如何进行更正式的假设检验。

5
有些模型天然依赖于随机性(比如随机森林),而有些模型只是利用随机性来探索空间(比如神经网络的值初始化),但实际上具有明确定义、确定性和客观函数。
对于第一种情况,你需要使用多个种子并报告平均精度、标准差和最小值。如果你有一个复现的方法,那么使用多个固定种子通常是很好的选择。
对于第二种情况,你总是可以在训练数据上判断哪个运行效果最好(尽管它可能不是能够给出最佳测试精度的那个)。因此,如果你有时间,最好进行十次运行,并在最佳训练误差(或验证误差)上进行评估(但决不要在测试中进行评估)。你也可以进一步进行多次运行并得到标准差。但是,如果你发现这个差异很大,那么可能意味着你没有尝试足够的初始化或者你没有为你的数据使用正确的模型。

2

根据您的问题,我总结了答案。我认为准确率始终是多次运行的平均准确率和标准偏差。因此,如果您考虑使用不同种子生成器获得的准确度,实际上正在考虑更大范围的输入(这应该是一个好事情)。但是,您必须考虑标准偏差来考虑准确性。或者我完全理解错误了您的问题吗?


2
随机技术通常用于搜索非常大的解空间,而无法进行详尽的搜索。因此,您几乎肯定会尝试迭代大量样本点,并使其分布尽可能均匀。正如其他地方提到的那样,基本的统计技术将帮助您确定样本是否足够大,以代表整个空间。
为了测试准确性,建议将一部分输入模式保留下来,并避免对这些模式进行训练(假设您正在从数据集中学习)。然后,您可以使用该集来测试算法是否正确地学习了潜在的模式,或者仅仅是记住了示例。
另一件要考虑的事情是您的随机数生成器的随机性。标准的随机数生成器(例如stdlib.h中的rand)在许多情况下可能不够优秀,因此请寻找更强大的算法。

-1

我相信交叉验证可能会给你所要求的内容:分类性能的平均值,因此更可靠。它除了在初始数据集上进行排列之外,不包含任何随机性。变化来自于选择不同的训练/测试分割。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接