Bagaimana saya bisa membagi secara acak sebuah matriks data dan vektor label yang sesuai menjadi X_train, X_test, X_val, y_train, y_test, y_val dengan Sklearn? Sejauh yang saya tahu, sklearn.cross_validation.train_test_split
hanya mampu membelah menjadi dua, bukan dalam tiga ...
machine-learning
scikit-learn
Hendrik
sumber
sumber
train_test_split
, Anda melakukan ini selama 80/20 sebelumnya. Jadi val Anda adalah 20% dari 80%. Proporsi pembagian tidak terlalu mudah dengan cara ini.Ada jawaban yang bagus untuk pertanyaan ini pada SO yang menggunakan numpy dan panda.
Perintah (lihat jawaban untuk diskusi):
menghasilkan pemisahan 60%, 20%, 20% untuk pelatihan, validasi, dan set tes.
sumber
.6
artinya 60% ... tapi apa.8
artinya?np.split
akan membagi 60% dari panjang array yang dikocok, kemudian 80% dari panjang (yang merupakan 20% dari data tambahan), sehingga menyisakan 20% dari data yang tersisa. Ini karena definisi fungsi. Anda dapat menguji / bermain denganx = np.arange(10.0)
np.split(x, [ int(len(x)*0.6), int(len(x)*0.8)])
Paling sering Anda akan menemukan diri Anda tidak membelahnya sekali tetapi pada langkah pertama Anda akan membagi data Anda dalam satu set pelatihan dan tes. Selanjutnya Anda akan melakukan pencarian parameter yang menggabungkan splitting yang lebih kompleks seperti validasi silang dengan algoritma 'split k-fold' atau 'leave-one-out (LOO)'.
sumber
Anda bisa menggunakan
train_test_split
dua kali. Saya pikir ini yang paling mudah.Dengan cara ini,
train
,val
,test
set akan 60%, 20%, 20% dari dataset masing-masing.sumber
Jawaban terbaik di atas tidak menyebutkan bahwa dengan memisahkan dua kali menggunakan
train_test_split
tidak mengubah ukuran partisi tidak akan memberikan partisi yang dimaksud:Kemudian bagian dari validasi dan set tes di x_remain berubah dan bisa dihitung sebagai
Dalam kesempatan ini semua partisi awal disimpan.
sumber
Berikut pendekatan lain (mengasumsikan pembagian tiga arah yang sama):
Ini bisa dibuat lebih ringkas tetapi saya tetap menggunakannya untuk tujuan penjelasan.
sumber
Diberikan
train_frac=0.8
, fungsi ini menciptakan pemisahan 80% / 10% / 10%:sumber
Menambahkan ke jawaban @ hh32 , sambil menghormati proporsi yang telah ditentukan sebelumnya seperti (75, 15, 10):
sumber
Perpanjangan jawaban @ hh32 dengan rasio yang diawetkan.
Karena dataset yang tersisa berkurang setelah pemisahan pertama, rasio baru sehubungan dengan dataset yang dikurangi harus dihitung dengan menyelesaikan persamaan:
sumber