web-dev-qa-db-ja.com

キャレットパッケージからのcreateDataPartition関数はどのようにデータを分割しますか?

ドキュメントから:

bootstrapサンプルの場合、単純なランダムサンプリングが使用されます。

他のデータ分割の場合、yが分割内のクラス分布のバランスをとる試みの要因である場合、ランダムサンプリングはyのレベル内で行われます。

数値yの場合、サンプルはパーセンタイルに基づいてグループセクションに分割され、サンプリングはこれらのサブグループ内で行われます。

CreateDataPartitionの場合、パーセンタイルの数はgroups引数を介して設定されます。

なぜこの「バランス」が必要なのかわかりません。私はそれを表面的には理解していると思いますが、追加の洞察があれば本当に役に立ちます。

6
Sashank Aryal

つまり、10000行のデータセットdsがある場合

set.seed(42)
ds <- data.frame(values = runif(10000))

不均等な分布(9000対1000)の2つの「クラス」

ds$class <- c(rep(1, 9000), rep(2, 1000))
ds$class <- as.factor(ds$class)
table(ds$class)
#    1    2 
# 9000 1000 

factorクラスの比率/「バランス」を維持しようとするサンプルを作成できます。

dpart <- createDataPartition(ds$class, p = 0.1, list = F)
dsDP <- ds[dpart, ]
table(dsDP$class)
#   1   2 
# 900 100 
14
loki