更好的排版點這裏 java
16.4 隨機化數據 算法
由於學習算法容易出現按數據到達的順序來操做,所以隨機(也稱爲「洗牌」)是一種常見的方法來緩解這個問題。特別是重複的隨機化,例如,在交叉驗證時,有利於產生更逼真的統計數據。 dom
WEKA提供了兩種可能性進行數據集隨機化: 機器學習
• 使用weka.core.Instances對象的 randomize(Random)方法,weka.core.Instances對象自己包含數據。這個方法須要一個java.util.Random類的實例。 下面解釋如何正確地實例化這樣一個對象。 函數
• 使用 Randomize 過濾器( weka.filters.unsupervised.instance包)。有關如何使用過濾器的更多信息,請參閱第16.5節。 學習
機器學習實驗一個很是重要的方面是實驗必須是可重複的。在相同的實驗設置狀況下,後續的實驗運行必須獲得徹底相同的結果。這可能看起來難以想象,但在這種狀況下,隨機化仍然是可能的。不管如何,隨機數生成永遠不會返回一個徹底隨機的數字序列,只會獲得一個僞隨機的序列。爲了實現可重複的僞隨機序列, 將使用給定種子 的生成器。使用相同的 種子值 將會獲得相同的序列。 google
java.util.Random(隨機數生成器類)中的默認構造函數不該該使用,由於這樣構造出來的對象最有可能產生不一樣的序列。構造函數 Random(long)使用指定的種子值,推薦使用。 spa
爲了獲得與數據集更相關的數據隨機化,能夠使用weka.core.Instances類的getRandomNumberGenerator(int)方法。該方法返回一個java.util.Random對象,生成這個對象所使用的的種子是,提供的種子與Instances對象隨機選擇的一個weka.core.Instance(選擇時使用一個隨機數發生器,其使用的種子是提供給此方法種子)的字符串表示的哈希值的和。 對象