2017-08-09 13 views
1

列車、クロスバリデーション、テストセットを作成するトレーニングセットからランダムサンプル60:20:20を抽出しようとしています。私は、次のコードを使用しているランダムサンプルセットを作成して、ラベルに基づいたクロスバリデーションとトレーニングセットを作成

:私は私のトレーニングセットは、教師学習データとデータフレームの最後の列であることに気づいしかし

train=data.sample(frac=0.6) 
trcv=data.drop(train.index) 
test=trcv.sample(frac=0.5) 
cv=trcv.drop(test.index) 

は値が1かでラベルY(列名)が含まれてい0

トレーニング、テスト、クロスバリデーションを作成する方法は、y = 0、y = 1の.99:.1のサンプルを割り当ててトレーニングセットに割り当てたいということです。これは、トレーニングセットに100個のレコードがある場合、99個のレコードをy = 0にし、1個のレコードのみをy = 1にすることを意味します。

45%に設定検証およびテストを横切るところで分割するy = 1で必要に残りの99%のレコード、実行の44%

1つの可能な方法は、カラムとレコードのコピーを含むデータフレームを作成することですYを1に設定し、y = 1のマスターデータフレームからすべてのレコードを削除します。

Y1=data[data.iloc[:,8]==1] 
data=data[data.iloc[:,8]!=1] 

次に、上記のサンプル配布をcv、テスト、トレーニングセットに適用します。

train=data.sample(frac=0.6) 
trcv=data.drop(train.index) 
test=trcv.sample(frac=0.5) 
cv=trcv.drop(test.index) 

今0.1をサンプル:0.44:0.45データフレームからY = 1

ycvT=Y1.sample(frac=0.99) 
ytr=Y1.drop(ycvT.index) 
ytest= ycvT.sample(frac=0.45) 
ycv= ycvT.drop(ytest.index) 

とこれがY = 1を含む3つの異なるデータフレームを作成します。

Now I can add them to the training , cross validation and test set. 
train=train.append(ytr) 
train=train.sample(frac=1).reset_index(drop=True) 

..およびcvおよびテストセットの場合。

私は、これを行うよりスマートな(より短い)方法があるのだろうかと思っていました。私はパンダ、ナンディとscipyに自分自身を制限したい。

ヒント?ありがとう。

答えて

1
y = data.iloc[:, -1].values 
g = data.groupby(y) 

frac = .2 

ones = g.get_group(1).sample(frac=frac) 
zero = g.get_group(0).sample(len(ones) * 99) 

train = pd.concat([ones, zero]).sample(frac=1) 
+0

です。 frac = 0.1? – sunny

+0

@sunny fracはあなたが引っ張ってほしい部分のどれでも – piRSquared

関連する問題