2013-07-21 13 views
5

Ich versuche, einige Modelle für maschinelles Lernen zu bauen,generieren eine Reihe von zufälligen eindeutigen Zahlen aus einem Intervall

so brauche ich eine Trainingsdaten und ein Validierungsdaten

so nehme habe ich N Anzahl von Beispielen, Ich möchte zufällige x Beispiele in einem Datenrahmen auswählen.

Angenommen, ich habe 100 Beispiele, und ich brauche 10 Zufallszahlen, gibt es eine Möglichkeit (effizient) 10 zufällige INTEGER-Zahlen zu generieren, um die Trainingsdaten aus meinen Beispieldaten zu extrahieren?

Ich versuchte mit While-Schleife, und ändern Sie die Anzahl der Wiederholungen langsam, aber die Laufzeit ist nicht sehr ideal, also suche ich nach einer effizienteren Möglichkeit, es zu tun.

Kann mir bitte jemand helfen?

Antwort

13

sample tut dies:

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

werden zehn Zufallszahlen aus dem 1-100 Bereich erzeugen. Sie wollen wahrscheinlich replace = TRUE, die Proben mit dem Ersetzen:

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

Allgemeiner sample Proben n Beobachtungen aus einem Vektor von beliebigen Werten.

+0

danke! Lass mich deine Lösung ausprobieren - Nein, ich brauche meine Trainingsdaten um einzigartig zu sein, aber danke für die zusätzlichen Informationen !! –

+2

Auch, @LowYiXiang, könnten Sie "Kopf" und "Schwanz" hier nützlich finden: 'idx <- sample.int (100); train.idx <- Kopf (idx, 10); test.idx <- tail (idx, -10); ' – flodel

0

Wenn ich richtig verstehe, versuchen Sie eine Hold-out-Stichprobe zu erstellen. Dies geschieht normalerweise unter Verwendung von Wahrscheinlichkeiten. Also, wenn Sie n.rows Proben haben und wollen einen Bruchteil training.fraction für die Ausbildung verwendet werden, können Sie etwas tun:

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

Wenn Sie genaue Anzahl der Trainingsfälle angeben möchten, können Sie tun so etwas wie:

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" 
Verwandte Themen