2016-01-22 131 views
2

Spark mllib數據包洗牌數據嗎?我一直在使用randomSplit處理數據,但是,看起來它看起來有相同的順序。Spark mllib洗牌數據

有沒有辦法在拆分數據之前對數據進行洗牌?

+0

_mllib軟件包shuffle data_ - 正如@eliasah所述,它沒有。它只是通過遍歷每個分區來隨機抽樣。 _是否有一種方法在拆分數據之前對數據進行洗牌?_ - 這取決於上下文。您可以隨時重新分配或按隨機值排序,但它是a)昂貴的,b)如果您想每次都得到不同的結果,需要做一些努力來避免緩存c)如果您需要可重複使用的樣本,則很難獲得可重複的樣本。 – zero323

+1

在上面的評論之間,我想我們有一個答案。你建議@ zero323是什麼? – eliasah

+0

@eliasah如果你想回答不介意我。我會很高興得到upvote,如果你把這個提取到一些有用的東西:) – zero323

回答

2

我認爲你分裂時混淆了實際的數據混洗與隨機種子。如果你將你的分裂種子設置爲一個常量,讓我們說每個例子11L,你總是會得到相同的分割。

正如@ zero323所述,Mllib通過遍歷每個分區只需要一個隨機樣本。

有沒有一種方法可以在拆分數據之前對數據進行洗牌?

這取決於上下文。你總是可以通過隨機值重新分區或重新排序,但它是

  1. 昂貴
  2. 需要一些努力,以避免緩存,如果你想每次
  3. 它很難,如果你需要得到重複的樣品來獲得不同的結果一。

因此,我的方法是迭代和產生分裂的種子。這是交叉驗證的主要原則。這樣你就可以根據你正在執行的評估步驟獲得最好的種子。你有可重現的樣本,但這種方法相當昂貴。

我希望這會有所幫助。

+0

如果我在處理源數據時按標籤排序,即源數據的所有標籤都是1,然後是全0。如果我正確理解randomSplit的工作方式,所有的0將最終在測試集中。此外,訓練算法可能主要看到1個標籤。那是對的嗎? –

+0

我認爲你可能需要的是以下內容:http://stackoverflow.com/questions/32238727/scala-pick-proportion-from-each-user/32241887#32241887 – eliasah