2016-08-09 9 views
1

私は80/20のトレーニングとテストセットでデータセットを分割しようとしています。私は場所によって分割しようとしていますが、これは4レベルの要素ですが、各レベルは等しくサンプリングされていません。 172
LOCATION2:615
がLocation3:603
Location4:502異なる割合のランダムな層別サンプリング

私はまた、前述したように、全体のデータセット80/20を分割しようとしたが、午前

位置1 - 1892個のサンプルのうち、各場所を80/20に分割して、訓練とテストの各セットから均等な割合を得るようにしてください。私はこれについてstratifiedの機能を使用してsplitstackshapeパッケージの1つの投稿を見ましたが、私の要素を分割したくないようです。

x <- c(1, 2, 3, 4, 1, 3, 7, 4, 5, 7, 8, 9, 4, 6, 7, 9, 7, 1, 5, 6)
xx <- c("A", "A", "B", "B", "B", "B", "B", "B", "B", "C", "C", "C", "C", "C", "C", "D", "D", "D", "D", "D")
df <- data.frame(x, xx)
validIndex <- stratified(df, "xx", size=16/nrow(df))
valid <- df[-validIndex,]
train <- df[validIndex,]

ABC、- ここ

を簡略化再現性の例でありますは、実際のデータセットの概算比率(それぞれ〜10,32,32,26%)の

+0

たぶん私は欠けている何かを、しかし、あなたの最初のデータセットがランダム80/20分割されている場合、あなたはそれぞれの場所が80/20を分割することを期待しています。あなたがランダムなやり方でやっているから。 – AntoniosK

+0

'caret'パッケージには、データを分割するための関数もいくつかあります:http://topepo.github.io/caret/splitting.html –

+0

@AntoniosKデータセットの割合が均等でない場合でも、私はそれが割合を考慮せずにランダムに80%を取ると思った - おそらく私は間違っている – Danib90

答えて

1

に対応しています。bothSetsを使用すると、元のデータフレームを検証とトレーニングに分割したリストが返されますセット(その組合は、元のデータフレームでなければなりません):

splt <- stratified(df, "xx", size=16/nrow(df), replace=FALSE, bothSets=TRUE) 
valid <- splt[[1]] 
train <- splt[[2]] 

## check 
df2 <- as.data.frame(do.call("rbind",splt)) 
all.equal(df[with(df, order(xx, x)), ], 
      df2[with(df2, order(xx, x)), ], 
      check.names=FALSE) 
+0

素晴らしい、これはうまくいきました - ありがとう – Danib90

関連する問題