2013-07-21 4 views
5

私はいくつかの機械学習モデルを構築しようとしていますからランダムに一意の整数の集合を生成するので、私は例のNの数があると、私はデータフレームでランダムxの例を選択したいと思う。<p></p>はので、私は訓練データと検証データ</p> <p>を必要とし、間隔

たとえば、100個の例があり、10個の乱数が必要だとしたら、サンプルデータからトレーニングデータを抽出するために10個のランダムな整数を生成する方法がありますか?

私はwhileループを使用してみましたが、繰り返し数値を変更しましたが、実行時間はそれほど理想的ではないので、より効率的な方法を探しています。

誰でも助けてください。

答えて

13

sampleは、この処理を行います。

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

は1〜100の範囲から10個の乱数を生成します。おそらく、交換してreplace = TRUE、サンプルをしたい:

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

より一般的には、sampleサンプル任意の値のベクトルからn観測。

+0

ありがとうございました! - 私のトレーニングデータは一意である必要がありますが、追加情報をありがとうございます! –

+2

@LowYiXiang、ここでは 'head'と' tail'が役に立つかもしれません: 'idx < - sample.int(100); train.idx < - head(idx、10); test.idx < - tail(idx、-10); ' – flodel

0

私が正しく理解している場合、ホールドアウトサンプリングを作成しようとしています。これは、通常、確率を使用して行われます。ですから、n.rowsサンプルを持っているとtraining.fractionの割合はトレーニングに使用する場合は、あなたがこのような何かを行うことがあります。

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

あなたがトレーニングケースの正確な数を指定したい場合は、あなたのような何かを行うことがあります。

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"