我正在为一个研讨会运行一些 SVM,我的一个朋友指出我应该设置一个种子,这样每次运行代码时我的结果都不会改变。我想知道为什么会这样。如果不同的种子可以产生不同的结果,我为什么要完全信任 SVM?
我应该设置一个特定的种子还是只设置我想到的第一个数字?
我正在为一个研讨会运行一些 SVM,我的一个朋友指出我应该设置一个种子,这样每次运行代码时我的结果都不会改变。我想知道为什么会这样。如果不同的种子可以产生不同的结果,我为什么要完全信任 SVM?
我应该设置一个特定的种子还是只设置我想到的第一个数字?
tl; dr实际上,您可以将种子设置为您想要的任何内容(例如您的生日或电话号码 [尽管那里存在明显的隐私问题 :-)] 或您的幸运号码);有一些有趣的警告,您可以在大多数分析中使用相同的随机数种子(我经常使用 1001)。为了有用,随机算法通常对随机数种子不敏感。
经典统计方法(t 检验、方差分析、回归等)是确定性算法,但许多现代算法方法包括随机成分。(介于两者之间的是 k 均值聚类或期望最大化等方法,它们本质上是确定性的,但通常从多个随机选择的起点运行,以减轻它们对起点条件的敏感性。)
SVM 不需要是随机的(例如,R 包中的实现似乎是确定性的),但出于计算原因e1071,它通常使用随机梯度下降(SGD:例如参见此处)来实现。
使用来自数据的大量随机样本的方法(例如 bootstrapping、bagging 以及 SGD,在每个更新步骤中选择不同的数据样本)有效地对许多样本进行平均,并且可能相对不敏感到随机数种子。对于随机数种子(例如 EM、k-means 聚类)可能不稳定的方法通常会在软件中内置机制,该机制将自动运行多个实现并对结果进行合理的处理(即平均它们) , 使方法不那么敏感。
这种敏感性是您在使用方法之前应该了解的信息的一部分(以及对其优缺点的一些了解,它有哪些需要调整的元参数等)。
学习过程中最好的做法是尝试一些实验——对于一个特定的数据集和模型,用少数不同的随机数种子尝试相同的方法,看看结果有多大不同!