更好的排版点这里
16.4 随机化数据
因为学习算法容易出现按数据到达的顺序来操作,因此随机(也称为“洗牌”)是一种常见的方法来缓解这个问题。特别是重复的随机化,例如,在交叉验证时,有利于产生更逼真的统计数据。
WEKA提供了两种可能性进行数据集随机化:
• 使用weka.core.Instances对象的 randomize(Random)方法,weka.core.Instances对象本身包含数据。这个方法需要一个java.util.Random类的实例。 下面解释如何正确地实例化这样一个对象。
• 使用 Randomize 过滤器( weka.filters.unsupervised.instance包)。有关如何使用过滤器的更多信息,请参阅第16.5节。
机器学习实验一个非常重要的方面是实验必须是可重复的。在相同的实验设置情况下,后续的实验运行必须得到完全相同的结果。这可能看起来不可思议,但在这种情况下,随机化仍然是可能的。无论如何,随机数生成永远不会返回一个完全随机的数字序列,只会得到一个伪随机的序列。为了实现可重复的伪随机序列, 将使用给定种子 的生成器。使用相同的 种子值 将会得到相同的序列。
java.util.Random(随机数生成器类)中的默认构造函数不应该使用,因为这样构造出来的对象最有可能产生不同的序列。构造函数 Random(long)使用指定的种子值,推荐使用。
为了得到与数据集更相关的数据随机化,可以使用weka.core.Instances类的getRandomNumberGenerator(int)方法。该方法返回一个java.util.Random对象,生成这个对象所使用的的种子是,提供的种子与Instances对象随机选择的一个weka.core.Instance(选择时使用一个随机数发生器,其使用的种子是提供给此方法种子)的字符串表示的哈希值的和。