2013-07-21 15 views
5

Sto cercando di costruire alcuni modelli di apprendimento automatico,generare una serie di numeri interi unici casuali da un intervallo

quindi ho bisogno di un insieme di dati di formazione e di un insieme di dati di validazione

così Supponiamo di avere N numero di esempi, Voglio selezionare esempi x casuali in un frame di dati.

Ad esempio, supponiamo di avere 100 esempi e ho bisogno di 10 numeri casuali, c'è un modo (per generare in modo efficiente) di generare 10 numeri INTEGER casuali per estrarre i dati di addestramento dai miei dati di esempio?

Ho provato a utilizzare il ciclo while, e lentamente cambio i numeri ripetuti, ma il tempo di esecuzione non è molto ideale, quindi sto cercando un modo più efficiente per farlo.

Qualcuno può aiutare per favore?

risposta

13

sample fa questo:

$ sample.int(100, 10) 
[1] 58 83 54 68 53 4 71 11 75 90 

genererà dieci numeri casuali della gamma 1-100. Probabilmente si desidera replace = TRUE, che i campioni con la sostituzione:

> sample.int(20, 10, replace = TRUE) 
[1] 10 2 11 13 9 9 3 13 3 17 

Più in generale, sample campioni n osservazioni da un vettore di valori arbitrari.

+0

grazie! fammi provare la tua soluzione - no, ho bisogno che i miei dati di allenamento siano unici, ma grazie per le informazioni aggiuntive !! –

+2

Inoltre, @LowYiXiang, potresti trovare 'head' e' tail' utili qui: 'idx <- sample.int (100); train.idx <- head (idx, 10); test.idx <- tail (idx, -10); ' – flodel

0

Se ho capito bene, stai provando a creare un campionamento di attesa. Questo di solito è fatto usando le probabilità. Quindi, se avete n.rows campioni e volete una frazione di training.fraction da utilizzare per la formazione, si può fare qualcosa di simile:

select.training <- runif(n=n.rows) < training.fraction 
data.training <- my.data[select.training, ] 
data.testing <- my.data[!select.training, ] 

Se si desidera specificare il numero esatto di casi di formazione, si può fare qualcosa di simile:

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" 
Problemi correlati