Saya baru saja mulai menggunakan R dan saya tidak yakin bagaimana cara menggabungkan dataset saya dengan kode contoh berikut:
sample(x, size, replace = FALSE, prob = NULL)
Saya memiliki dataset yang harus saya masukkan ke dalam set pelatihan (75%) dan pengujian (25%). Saya tidak yakin informasi apa yang harus saya masukkan ke dalam x dan ukuran? Apakah x file dataset, dan ukuran berapa sampel yang saya miliki?
x
dapat menjadi indeks (baris / kolom no. katakan) dari Andadata
.size
bisa0.75*nrow(data)
. Cobasample(1:10, 4, replace = FALSE, prob = NULL)
lihat apa fungsinya.Jawaban:
Ada banyak pendekatan untuk mencapai partisi data. Untuk pendekatan yang lebih lengkap lihat
createDataPartition
fungsi dalamcaTools
paket.Ini adalah contoh sederhana:
sumber
mtcars[!train_ind]
dan meskipun tidak gagal, itu tidak berhasil seperti yang diharapkan. Bagaimana saya bisa mengelompokkan menggunakan!
?!
digunakan untuk logis (TRUE/FALSE
) dan bukan indeks. Jika Anda ingin subset menggunakan!
, coba sesuatu seperti mtcars [!seq_len(nrow(mtcars)) %in% train_ind
,] (tidak diuji).createDataPartition
masukcaret
dan tidakcaTools
?Ini dapat dengan mudah dilakukan dengan:
Dengan menggunakan paket caTools :
sumber
sample = sample.split(data[,1], SplitRatio = .75)
Harus menghapus kebutuhan untuk memberi nama kolom.Saya akan menggunakan
dplyr
ini, membuatnya sangat sederhana. Itu memang membutuhkan variabel id di set data Anda, yang merupakan ide bagus, tidak hanya untuk membuat set tetapi juga untuk keterlacakan selama proyek Anda. Tambahkan jika belum mengandung.sumber
Ini hampir kode yang sama, tetapi dalam tampilan yang lebih bagus
sumber
sumber
Saya akan membagi 'a' menjadi kereta (70%) dan tes (30%)
selesai
sumber
Solusi saya pada dasarnya sama dengan dickoa tetapi sedikit lebih mudah untuk ditafsirkan:
sumber
Hanya cara yang lebih singkat dan sederhana menggunakan perpustakaan dplyr yang mengagumkan :
sumber
Default[-train_index,]
untuk baris terakhir.Jika Anda mengetik:
Jika akan meluncurkan menu bantuan untuk menjelaskan apa arti parameter dari fungsi sampel.
Saya bukan ahli, tetapi ini beberapa kode yang saya miliki:
Ini akan memberi Anda 75% kereta dan 25% tes.
sumber
Setelah melihat semua metode berbeda yang diposting di sini, saya tidak melihat ada orang yang memanfaatkan
TRUE/FALSE
untuk memilih dan membatalkan pilihan data. Jadi saya pikir saya akan berbagi metode menggunakan teknik itu.Penjelasan
Ada beberapa cara untuk memilih data dari R, kebanyakan orang menggunakan indeks positif / negatif untuk memilih / tidak memilih masing-masing. Namun, fungsi yang sama dapat dicapai dengan menggunakan
TRUE/FALSE
untuk memilih / membatalkan pilihan.Perhatikan contoh berikut.
sumber
Solusi saya mengocok baris, kemudian mengambil 75% pertama dari baris sebagai kereta dan 25% terakhir sebagai tes. Sangat simpel!
sumber
Saya dapat menyarankan menggunakan paket rsample:
sumber
scorecard
Paket memiliki fungsi yang berguna untuk itu, di mana Anda dapat menentukan rasio dan seedData uji dan kereta disimpan dalam daftar dan dapat diakses dengan menelepon
dt_list$train
dandt_list$test
sumber
Di bawah fungsi yang membuat
list
sub-sampel dengan ukuran yang sama yang tidak persis apa yang Anda inginkan tetapi mungkin terbukti bermanfaat bagi orang lain. Dalam kasus saya untuk membuat beberapa pohon klasifikasi pada sampel yang lebih kecil untuk menguji overfitting:Contoh:
sumber
Gunakan paket caTools dalam kode sampel R adalah sebagai berikut: -
sumber
Gunakan basis R. Fungsi
runif
menghasilkan nilai yang terdistribusi secara seragam dari 0 hingga 1. Dengan nilai cutoff yang bervariasi (train.size dalam contoh di bawah), Anda akan selalu memiliki kira-kira persentase yang sama dari catatan acak di bawah nilai cutoff.sumber
Dengan asumsi df adalah kerangka data Anda, dan Anda ingin membuat 75% train dan 25% test
Kemudian untuk membuat frame data kereta dan tes
sumber
The
sample.split()
fungsi akan menambah satu kolom tambahan 'split1' untuk dataframe dan 2/3 dari baris akan memiliki nilai ini sebagai BENAR dan lain-lain sebagai FALSE.Now baris mana split1 adalah TRUE akan disalin ke kereta dan baris lainnya akan disalin ke tes bingkai data.sumber
Saya menabrak yang satu ini, itu bisa membantu juga.
sumber
Kami dapat membagi data ke dalam rasio tertentu di sini adalah 80% kereta dan 20% dalam dataset uji.
sumber
Waspadalah
sample
terhadap pemisahan jika Anda mencari hasil yang dapat direproduksi. Jika data Anda sedikit berubah, perpecahan akan bervariasi bahkan jika Anda menggunakannyaset.seed
. Misalnya, bayangkan daftar ID yang diurutkan dalam data Anda adalah semua angka antara 1 dan 10. Jika Anda hanya membatalkan satu pengamatan, katakanlah 4, pengambilan sampel berdasarkan lokasi akan menghasilkan hasil yang berbeda karena sekarang 5 hingga 10 semua tempat yang dipindahkan.Metode alternatif adalah dengan menggunakan fungsi hash untuk memetakan ID menjadi beberapa angka acak semu dan kemudian sampel pada mod angka-angka ini. Sampel ini lebih stabil karena tugas sekarang ditentukan oleh hash dari setiap pengamatan, dan bukan oleh posisi relatifnya.
Sebagai contoh:
[1] 9999
[1] 5000
[1] 2653
[1] 5057
[1] 5057
ukuran sampel tidak tepat 5000 karena penugasan adalah probabilistik, tetapi seharusnya tidak menjadi masalah dalam sampel besar berkat hukum angka besar.
Lihat juga: http://blog.richardweiss.org/2016/12/25/hash-splits.html dan /crypto/20742/statribution-properties-of-hash-functions-when -menghitung-modulo
sumber
sumber
Ada cara yang sangat sederhana untuk memilih sejumlah baris menggunakan indeks R untuk baris dan kolom. Ini memungkinkan Anda dengan BERSIH membagi set data yang diberi sejumlah baris - katakan 80% pertama dari data Anda.
Dalam R semua baris dan kolom diindeks sehingga DataSetName [1,1] adalah nilai yang ditetapkan untuk kolom pertama dan baris pertama "DataSetName". Saya dapat memilih baris menggunakan [x,] dan kolom menggunakan [, x]
Sebagai contoh: Jika saya memiliki satu set data yang dinamai "data" dengan 100 baris saya dapat melihat 80 baris pertama menggunakan
Dengan cara yang sama saya bisa memilih baris ini dan mengelompokkannya menggunakan:
Sekarang saya memiliki data saya dibagi menjadi dua bagian tanpa kemungkinan resampling. Cepat dan mudah.
sumber