Сгенерировать набор случайных уникальных целых чисел из интервала
Я пытаюсь создать некоторые модели машинного обучения,
поэтому мне нужны данные обучения и данные проверки
так что предположим, что у меня есть N примеров, я хочу выбрать случайные x-примеры в кадре данных.
Например, предположим, что у меня есть 100 примеров, и мне нужно 10 случайных чисел, есть ли способ (чтобы эффективно) генерировать 10 случайных чисел INTEGER для меня, чтобы извлечь данные обучения из моих данных образца?
Я пробовал использовать цикл while и медленно менял повторяющиеся числа, но время работы не очень идеально, поэтому я ищу более эффективный способ сделать это.
Может ли кто-нибудь помочь?
Ответы
Ответ 1
sample
(или sample.int
) делает это:
sample.int(100, 10)
# [1] 58 83 54 68 53 4 71 11 75 90
сгенерирует десять случайных чисел из диапазона 1–100. Вы, вероятно, хотите replace = TRUE
, какие примеры с заменой:
sample.int(20, 10, replace = TRUE)
# [1] 10 2 11 13 9 9 3 13 3 17
В более общем случае, sample
выборки n
наблюдений из вектора произвольных значений.
Ответ 2
Если я правильно понимаю, вы пытаетесь создать пробную выборку. Обычно это делается с использованием вероятностей. Поэтому, если у вас есть образцы n.rows
и требуется, чтобы часть обучения training.fraction
использовалась для обучения, вы можете сделать что-то вроде этого:
select.training <- runif(n=n.rows) < training.fraction
data.training <- my.data[select.training, ]
data.testing <- my.data[!select.training, ]
Если вы хотите указать EXACT количество учебных случаев, вы можете сделать что-то вроде:
indices.training <- sample(x=seq(n.rows), size=training.size, replace=FALSE) #replace=FALSE makes sure the indices are unique
data.training <- my.data[indices.training, ]
data.testing <- my.data[-indices.training, ] #note that index negation means "take everything except for those"
Ответ 3
из растрового пакета:
растр :: sampleInt (242, 10, replace = F) [1] 95 230 148 183 38 98 137 110 188 39
sampleInt (1e + 12, 10)
'это может потерпеть неудачу:
'sample.int(1e + 12, 10)
'sample.int(1e + 9, 10)