Saya memiliki dataset yang cukup besar dalam bentuk kerangka data dan saya bertanya-tanya bagaimana saya dapat membagi kerangka data menjadi dua sampel acak (80% dan 20%) untuk pelatihan dan pengujian.
Terima kasih!
python
python-2.7
pandas
dataframe
tooty44
sumber
sumber
msk
ini dari dtypebool
,df[msk]
,df.iloc[msk]
dandf.loc[msk]
selalu mengembalikan hasil yang sama.rand
untuk< 0.8
masuk akal karena mengembalikan merata nomor acak antara 0 dan 1.in[12]
,in[13]
,in[14]
? Saya ingin mengerti kode python itu sendiri di sininp.random.rand(len(df))
adalah array ukuranlen(df)
dengan nilai float yang terdistribusi secara acak dan seragam dalam kisaran [0, 1]. The< 0.8
berlaku perbandingan unsur-bijaksana dan menyimpan hasilnya di tempat. Dengan demikian nilai <0,8 menjadiTrue
dan nilai> = 0,8 menjadiFalse
scikit belajar itu
train_test_split
bagus.sumber
kf = KFold(n, n_folds=folds) for train_index, test_index in kf: X_train, X_test = X.ix[train_index], X.ix[test_index]
lihat contoh lengkap di sini: quantstart.com/articles/…from sklearn.model_selection import train_test_split
gantinya.from sklearn.cross_validation import train_test_split
Sampel acak panda juga akan berfungsi
sumber
random_state
dilakukan arg?test
set acak diinginkan seperti yang ditunjukkan di sini stackoverflow.com/questions/29576430/shuffle-dataframe-rows .test=df.drop(train.index).sample(frac=1.0)
Saya akan menggunakan training_test_split scikit-learn sendiri, dan menghasilkannya dari indeks
sumber
cross_validation
Modul sekarang tidak berlaku:DeprecationWarning: This module was deprecated in version 0.18 in favor of the model_selection module into which all the refactored classes and functions are moved. Also note that the interface of the new CV iterators are different from that of this module. This module will be removed in 0.20.
Ada banyak cara untuk membuat kereta / tes dan bahkan sampel validasi.
Kasus 1: cara klasik
train_test_split
tanpa opsi apa pun:Kasus 2: kasus dataset sangat kecil (<500 baris): untuk mendapatkan hasil untuk semua baris Anda dengan validasi silang ini. Pada akhirnya, Anda akan memiliki satu prediksi untuk setiap baris dari set pelatihan yang tersedia.
Kasus 3a: Kumpulan data tidak seimbang untuk tujuan klasifikasi. Mengikuti kasus 1, berikut ini adalah solusi yang setara:
Kasus 3b: Kumpulan data tidak seimbang untuk tujuan klasifikasi. Mengikuti kasus 2, berikut adalah solusi yang setara:
Kasus 4: Anda perlu membuat set train / test / validasi pada data besar untuk menyetel hyperparameter (60% train, 20% test, dan 20% val).
sumber
Anda dapat menggunakan kode di bawah ini untuk membuat sampel uji dan latih:
Ukuran tes dapat bervariasi tergantung pada persentase data yang ingin Anda masukkan dalam dataset tes dan kereta Anda.
sumber
Ada banyak jawaban yang valid. Menambahkan satu lagi ke banyak. dari sklearn.cross_validation import train_test_split
sumber
Anda juga dapat mempertimbangkan pembagian bertingkat ke dalam set pelatihan dan pengujian. Divisi Startified juga menghasilkan pelatihan dan pengujian yang ditetapkan secara acak tetapi sedemikian rupa sehingga proporsi kelas asli dipertahankan. Ini membuat set pelatihan dan pengujian lebih mencerminkan properti dari dataset asli.
df [train_inds] dan df [test_inds] memberi Anda set pelatihan dan pengujian df DataFrame asli Anda.
sumber
Jika Anda perlu untuk membagi data Anda sehubungan dengan kolom lables di set data Anda, Anda dapat menggunakan ini:
dan gunakan:
Anda juga dapat melewatkan random_state jika Anda ingin mengontrol pembagian acak atau menggunakan beberapa seed acak global.
sumber
sumber
Anda dapat menggunakan ~ (operator tilde) untuk mengecualikan baris yang diambil sampelnya menggunakan df.sample (), membiarkan panda menangani sampel dan penyaringan indeks, untuk mendapatkan dua set.
sumber
Ini adalah apa yang saya tulis ketika saya perlu membagi DataFrame. Saya mempertimbangkan untuk menggunakan pendekatan Andy di atas, tetapi tidak suka bahwa saya tidak dapat mengontrol ukuran set data dengan tepat (yaitu, kadang-kadang 79, kadang 81, dll.).
sumber
Cukup pilih rentang baris dari df seperti ini
sumber
df
dalam cuplikan kode Anda (atau seharusnya) dikocok, itu akan meningkatkan jawabannya.Ada banyak jawaban bagus di atas jadi saya hanya ingin menambahkan satu contoh lagi dalam hal Anda ingin menentukan jumlah sampel yang tepat untuk kereta dan set tes dengan hanya menggunakan
numpy
perpustakaan.sumber
Untuk membaginya menjadi lebih dari dua kelas seperti kereta, tes, dan validasi, orang dapat melakukan:
Ini akan menempatkan sekitar 70% data dalam pelatihan, 15% dalam tes, dan 15% dalam validasi.
sumber
Anda perlu mengubah panda dataframe menjadi array numpy dan kemudian mengubah array numpy kembali ke dataframe
sumber
Jika Anda ingin memiliki satu kerangka data dan dua kerangka data keluar (bukan array numpy), ini harus melakukan trik:
sumber
Anda dapat menggunakan fungsi df.as_matrix () dan membuat Numpy-array dan meneruskannya.
sumber
Sedikit lebih elegan untuk seleraku adalah membuat kolom acak dan kemudian membaginya, dengan cara ini kita bisa mendapatkan split yang sesuai dengan kebutuhan kita dan akan acak.
sumber
sumber
Tidak perlu mengkonversi ke numpy. Cukup gunakan panda df untuk melakukan split dan itu akan mengembalikan panda df.
Dan jika Anda ingin memisahkan x dari y
sumber
Saya pikir Anda juga perlu mendapatkan salinan, bukan sepotong dataframe jika Anda ingin menambahkan kolom nanti.
sumber
Bagaimana dengan ini? df adalah kerangka data saya
sumber