如何根据数据集大小标准从数据集中采样
How to sample from a dataset based on dataset size criteria
我有以下 dim 22784 X 18 的数据集
head(MS.DATA.IN.NUM.ZeroVar)
X x1 x2 x3 x4 x5 x6 x7 x8 x9
1 1 15512 0.4608690 0.0492522 0.2264698 0.1498266 0.7528365 0.0100567 0.5797286 0.0032513
2 2 1550 0.4709677 0.0025806 0.1374194 0.0963415 0.8625806 0.0000000 0.6951424 0.0050251
3 3 4741 0.4853406 0.0002109 0.1894115 0.1356557 0.8569922 0.0000000 0.6835836 0.0041429
4 4 467 0.4989293 0.0000000 0.1006424 0.0854701 0.9079229 0.0000000 0.7804878 0.0060976
5 5 310 0.4741935 0.6806452 0.2258065 0.1288344 0.8967742 0.0000000 0.7563025 0.0084034
6 6 461 0.4750542 0.0867679 0.1301518 0.0950413 0.9240781 0.0000000 0.7926829 0.0000000
x10 x11 x12 x13 x14 x15 x16 x17
1 0.0759118 0.6253178 0.0366129 0.9913769 0.2601165 0.0522456 0.7740586 130600
2 0.0435511 0.0642633 0.0033501 0.9949749 0.2852665 0.0606061 0.1428571 40500
3 0.0279648 0.0657958 0.0000000 0.9974107 0.3154330 0.0651163 0.6875000 28700
4 0.0182927 0.0574713 0.0000000 1.0000000 0.1494253 0.1395349 1.0000000 28500
5 0.0168067 0.0775194 0.6722689 0.9915966 0.1472868 0.0000000 0.0000000 24100
6 0.0060976 0.0888889 0.0548780 0.9939024 0.2722222 0.2941176 0.5000000 14999
我只想要一些基于数据集大小 (instances/records) 标准的基本抽样想法:
我想做的是创建一个函数,其中
1:我设置了一个大小阈值,比如 10000.So 假设数据集 <=10000 行,然后将用于分析的数据集取满(人口)。
2:但如果大小>10000 & <50000,则数据集被采样到大小 say=15000 行....
3:如果样本量>50000那么样本量应该减少到20000
我假设 if..else 条件将是必需的...可以使用 apply family 和 dplyr 函数来完成......
这是我最喜欢的一般拆分数据集的方式。
spec<-c(train=0.7, test=0.3)
division <- function(df,spec) sample(cut(seq(nrow(df)), nrow(df) * cumsum(c(0, spec)), labels=names(spec) ))
dat<- split(MS.DATA.IN.NUM.ZeroVar, division(MS.DATA.IN.NUM.ZeroVar, spec))
然后您可以使用 dat$train
和 dat$test
访问集合
在这种情况下,您只需将规格设置为
ifelse(nrow(MS.DATA.IN.NUM.ZeroVar)<=10000, 1, ifelse(nrow(MS.DATA.IN.NUM.ZeroVar) > 50000, 0.4, 0.3))
我认为 cut
将有助于确定组,然后对适当的行数进行采样:
# example data:
dat <- data.frame(row=seq_len(10000),id=seq_len(10000))
# sample away!
dat[sample(seq_len(nrow(dat)), c(nrow(dat),1.5e4,2e4)[cut(nrow(dat), c(0,1e4,5e4,Inf))]),]
我有以下 dim 22784 X 18 的数据集
head(MS.DATA.IN.NUM.ZeroVar)
X x1 x2 x3 x4 x5 x6 x7 x8 x9
1 1 15512 0.4608690 0.0492522 0.2264698 0.1498266 0.7528365 0.0100567 0.5797286 0.0032513
2 2 1550 0.4709677 0.0025806 0.1374194 0.0963415 0.8625806 0.0000000 0.6951424 0.0050251
3 3 4741 0.4853406 0.0002109 0.1894115 0.1356557 0.8569922 0.0000000 0.6835836 0.0041429
4 4 467 0.4989293 0.0000000 0.1006424 0.0854701 0.9079229 0.0000000 0.7804878 0.0060976
5 5 310 0.4741935 0.6806452 0.2258065 0.1288344 0.8967742 0.0000000 0.7563025 0.0084034
6 6 461 0.4750542 0.0867679 0.1301518 0.0950413 0.9240781 0.0000000 0.7926829 0.0000000
x10 x11 x12 x13 x14 x15 x16 x17
1 0.0759118 0.6253178 0.0366129 0.9913769 0.2601165 0.0522456 0.7740586 130600
2 0.0435511 0.0642633 0.0033501 0.9949749 0.2852665 0.0606061 0.1428571 40500
3 0.0279648 0.0657958 0.0000000 0.9974107 0.3154330 0.0651163 0.6875000 28700
4 0.0182927 0.0574713 0.0000000 1.0000000 0.1494253 0.1395349 1.0000000 28500
5 0.0168067 0.0775194 0.6722689 0.9915966 0.1472868 0.0000000 0.0000000 24100
6 0.0060976 0.0888889 0.0548780 0.9939024 0.2722222 0.2941176 0.5000000 14999
我只想要一些基于数据集大小 (instances/records) 标准的基本抽样想法:
我想做的是创建一个函数,其中
1:我设置了一个大小阈值,比如 10000.So 假设数据集 <=10000 行,然后将用于分析的数据集取满(人口)。
2:但如果大小>10000 & <50000,则数据集被采样到大小 say=15000 行....
3:如果样本量>50000那么样本量应该减少到20000
我假设 if..else 条件将是必需的...可以使用 apply family 和 dplyr 函数来完成......
这是我最喜欢的一般拆分数据集的方式。
spec<-c(train=0.7, test=0.3)
division <- function(df,spec) sample(cut(seq(nrow(df)), nrow(df) * cumsum(c(0, spec)), labels=names(spec) ))
dat<- split(MS.DATA.IN.NUM.ZeroVar, division(MS.DATA.IN.NUM.ZeroVar, spec))
然后您可以使用 dat$train
和 dat$test
在这种情况下,您只需将规格设置为
ifelse(nrow(MS.DATA.IN.NUM.ZeroVar)<=10000, 1, ifelse(nrow(MS.DATA.IN.NUM.ZeroVar) > 50000, 0.4, 0.3))
我认为 cut
将有助于确定组,然后对适当的行数进行采样:
# example data:
dat <- data.frame(row=seq_len(10000),id=seq_len(10000))
# sample away!
dat[sample(seq_len(nrow(dat)), c(nrow(dat),1.5e4,2e4)[cut(nrow(dat), c(0,1e4,5e4,Inf))]),]