Сгенерировать набор случайных уникальных целых чисел из интервала

Я пытаюсь создать некоторые модели машинного обучения,

поэтому мне нужны данные обучения и данные проверки

так что предположим, что у меня есть 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)