2017-05-29 4 views
0

データを2つのランダムなセットに分割したいと思います。Pythonでデータをランダムなセットに分割する

ind = np.random.choice(df.shape[0], size=[int(df.shape[0]*0.7)], replace=False) 
X_train = df.iloc[ind] 

今、私は私のテスト・セットを作成しないindで「すべてのインデックスを選択したいと思います:私は、最初の部分をやりました。どうすればいいか教えてください。

私はそれが

X_test = df.iloc[-ind] 

だろうと思ったが、どうやらそれは、この純粋なPythonのアプローチを試してみてください

+0

したがって、テストデータとして70%を選択し、残りの30%をトレーニングデータとして使用しますか?より簡単な方法は、np.random.shuffleを使用してインデックスをシャッフルし、シャッフルされたインデックスの最初の70%をトレーニングとして使用し、テストとして休むことです。 –

+0

はい、まさに私が欲しいものです – jlt199

答えて

0

ではありません。ドキュメントから

ind_inversed = list(set(range(df.shape[0])) - set(ind)) 
X_test = df.iloc[ind_inversed] 
+0

これは2つのセットを無作為化しません –

+0

元の質問と同じ方法で 'ind'が計算されたと仮定しています。 'ind_inversed'は' ind'以外のすべてのindeciesを表します。 –

+0

あなたは正しいです、申し訳ありません! –

4

チェックアウトscikit-learntest_train_split()

例:お使いの場合には

>>> import numpy as np 
>>> from sklearn.model_selection import train_test_split 
>>> X, y = np.arange(10).reshape((5, 2)), range(5) 
>>> X 
array([[0, 1], 
     [2, 3], 
     [4, 5], 
     [6, 7], 
     [8, 9]]) 
>>> list(y) 
[0, 1, 2, 3, 4] 

>>> 

>>> X_train, X_test, y_train, y_test = train_test_split(
...  X, y, test_size=0.33, random_state=42) 
... 
>>> X_train 
array([[4, 5], 
     [0, 1], 
     [6, 7]]) 
>>> y_train 
[2, 0, 3] 
>>> X_test 
array([[2, 3], 
     [8, 9]]) 
>>> y_test 
[1, 4] 

は、あなたがこのようにそれを行うことができます:

larger, smaller = test_train_split(df, test_size=0.3) 
1

70を取得する別の方法 - 30列のテストの分割は、インデックスを生成し、それらをシャッフルし、次にspそれを70〜30部で点灯させた。

ind = np.arange(df.shape[0]) 
np.random.shuffle(ind) 
X_train = df.iloc[ind[:int(0.7*df.shape[0])],:] 
X_test = df.iloc[ind[int(0.7*df.shape[0]):],:] 

あなたが本当にそれをこのようにやりたいしない限り、私は数値行列にpandas.dataframeを変換しscikit-学ぶのtrain_test_split分割を行うにはを使用してお勧めします。

+0

私はこのメソッドが好きです。ありがとう。以前は 'train_test_split'を使っていましたが(私はそれを忘れていましたが)、データフレーム内でデータを確認して視覚化するのが簡単です。 – jlt199

関連する問題