Apa cara yang lebih tepat untuk membuat set penahan: untuk menghapus beberapa mata pelajaran atau untuk menghapus beberapa pengamatan dari setiap mata pelajaran?

11

Saya memiliki dataset dengan 26 fitur dan 31000 baris. Ini adalah dataset dari 38 subjek. Ini untuk sistem biometrik. Jadi saya ingin dapat mengidentifikasi mata pelajaran.

Untuk memiliki set pengujian, saya tahu saya harus menghapus beberapa nilai.

Jadi apa yang lebih baik untuk dilakukan dan mengapa?

  1. (a) simpan 30 subjek sebagai set pelatihan dan hapus 8 subjek sebagai set pengujian

  2. (B) menyimpan 38 mata pelajaran, tetapi menghapus beberapa baris masing-masing. Jadi pada akhirnya saya akan berakhir dengan satu set pelatihan: 24.800 baris 38 mata pelajaran dan satu set pengujian: 6200 baris 38 mata pelajaran

Aizzaac
sumber
1
Jika Anda ingin mengidentifikasi mata pelajaran, bagaimana Anda bisa menghapus mata pelajaran "keseluruhan" untuk satu set tes? Model yang dilatih pada 30 mata pelajaran hanya akan dapat mengidentifikasi 30 mata pelajaran ini, bukan 8 mata pelajaran yang belum pernah dilihatnya. Klarifikasi Anda tentang "sistem biometrik" mungkin membuat sebagian besar jawaban yang ada tidak dapat diterapkan.
Amuba mengatakan Reinstate Monica
1
Akan sangat membantu untuk memperjelas: (1) tujuan yang tepat , apa variabel hasil yang Anda coba prediksi (2) data apa yang Anda miliki dan mungkin (3) pendekatan apa yang Anda gunakan.
Matthew Gunn
Setelah Anda melatih sistem, bagaimana sistem itu digunakan? Apakah tujuannya untuk menggunakannya pada orang yang tidak ada dalam pelatihan? Apakah data baru akan berasal dari 38 mata pelajaran yang sama? Saya mencoba memahami bagaimana sistem seharusnya digunakan dan apakah Anda berada dalam kasus (1) atau kasus (2) dari jawaban @ AmiTavory.
Matthew Gunn
@amoeba Saya tidak terlalu berpengalaman :( Saya mengajukan pertanyaan karena disarankan untuk membagi data (pelatihan, validasi dan pengujian). Jadi, baik untuk menghapus beberapa mata pelajaran atau pengamatan masing-masing ATAU menggunakan dataset yang tersedia online. Jadi 1) Saya ingin dapat mengidentifikasi mata pelajaran. Untuk siapa fitur tersebut dimiliki. 2) Saya menggunakan EEG (jadi time-series). 3) Saya menggunakan Stratified-fold. Tapi itu karena saya mendapat akurasi yang lebih tinggi daripada dengan kfold. Saya hanya tahu k-fold, bertingkat-tingkat dan cuti-keluar. Seperti yang saya selalu pikirkan itu untuk mengompensasi ketidakseimbangan dalam data. Tetapi saya terbuka untuk saran.
Aizzaac
@ MatthewGunn Saya pikir tidak mungkin untuk menggunakannya dengan orang-orang yang tidak ada dalam dataset. Itu akan sangat sulit tetapi sangat menarik jika dicapai. Jadi saya akan mengatakan kasus 1.
Aizzaac

Jawaban:

9

Saya pikir jawaban Matthew Gunn benar, tetapi bagi saya sepertinya CV "bijaksana" dapat mencakup dua konsep berbeda:

  1. Rekaman dipartisi secara acak menjadi lipatan, terlepas dari subjek atau waktu.

  2. Catatan dipartisi menjadi lipatan berbasis waktu, tanpa lipatan yang digunakan untuk pelatihan yang berisi data dari setelah awal lipatan tes.

Dalam kasus pertama, sifat rangkaian waktu dari data Anda sedang dikompromikan, karena set pelatihan Anda dapat menyertakan data dari sebelum dan sesudah set tes Anda. Prinsip Train / Test adalah bahwa data Pelatihan mewakili data yang diketahui hingga saat ini, dan Data uji mewakili data yang belum terlihat (mungkin secara harfiah dari masa depan).

Mungkin autokorelasi seri waktu mengkompromikan opsi # 2. Mungkin elemen waktu dari model ini tidak terlalu penting sehingga pengamatan "masa lalu" dan "masa depan" cenderung sama. Dalam kasus ini, tidak ada yang # 1 atau # 2 adalah cara untuk pergi.

Jika hanya ada musim dan bukan tren, sepertinya tidak apa-apa untuk memasukkan "masa depan" dalam pelatihan untuk beberapa mata pelajaran untuk memprediksi mata pelajaran baru (yang akan dipengaruhi oleh musim yang sama). Jika ada tren, pelatihan di masa depan harus mempelajari sesuatu tentang masa depan yang Anda benar-benar tidak akan tahu ketika menggunakan model dalam produksi.

Dalam contoh OP, sepertinya subjek-bijaksana itu baik. Tetapi jika tren dan kekhawatiran deret waktu adalah bagian dari model, saya akan mencoba menggunakan partisi berdasarkan subjek dan waktu sehingga Anda melatih satu set subjek sebelum titik waktu tertentu, kemudian menguji subjek lain setelah titik waktu tertentu.

Wayne
sumber
1
+1 Itu poin yang sangat penting bahwa jika ada struktur deret waktu, Anda tidak boleh menggunakan masa depan untuk memprediksi masa lalu! Ini adalah kesalahan umum dan berbahaya dalam keuangan, menggunakan informasi yang tidak tersedia pada waktu (karena tidak diketahui sampai masa depan) untuk memprediksi pengembalian, default, dll ... pada waktu . Dengan proyek yang rumit dan berton-ton data, sangat mudah untuk membuat kesalahan dan membiarkan algoritma pelatihan Anda secara efektif memuncak ke masa depan, mencapai hasil yang tidak mungkin dalam kenyataan. ttt
Matthew Gunn
1
Saya akan mengatakan bahwa aplikasi memutuskan apa pemisahan approprate. Misalnya, bahkan dengan deret waktu, mungkin merupakan tugas untuk memprediksi variabel dependen untuk pengukuran selanjutnya dari subjek yang tidak diketahui yang berarti pemisahan harus dilakukan berdasarkan subyek dan juga waktu.
cbeleites tidak senang dengan SX
3
@cbeleites: Setuju. Ini adalah apa yang saya lakukan pada proyek baru-baru ini: membagi data menjadi kereta dan mata pelajaran uji, dan hanya menggunakan data pra-tanggal untuk pelatihan dan data pasca-tanggal untuk pengujian, jadi kami menguji pada mata pelajaran yang kami tidak pernah terlihat, selama periode waktu kami belum melihat. Anda ingin menumpuk dek terhadap Anda - tanpa berlebihan - jika Anda ingin benar-benar tahu seberapa baik model Anda akan dilakukan dalam praktek.
Wayne
16

Sebuah kritis perbedaan adalah apakah Anda ingin:

  1. [Kasus paling umum]: Bangun estimasi kinerja pada subjek baru (diambil dari populasi yang sama dengan data Anda).
  2. Bangun estimasi kinerja pada pengamatan baru dari subjek yang sama seperti pada sampel Anda.

Kasus yang jauh lebih umum adalah nomor kasus (1). Misalnya, seberapa baik Anda memprediksi serangan jantung untuk seseorang yang datang ke ruang gawat darurat? Dan jika Anda dalam kasus (1), Anda hampir pasti harus melakukan (a) validasi silang subjek-bijaksana daripada (b) cross-validasi record-wise. Melakukan validasi catatan-bijaksana jika (1) kemungkinan akan menyebabkan perkiraan kinerja palsu yang terlalu tinggi pada subjek baru.

Saya tidak benar-benar mengerti apa yang Anda coba lakukan (dan mungkin ini adalah belajar mandiri sehingga pertanyaannya tidak sepenuhnya realistis). Saya tidak tahu kasus apa yang Anda hadapi. Jika Anda berada dalam kasus yang kurang umum (2), validasi catatan yang bijaksana mungkin ok.

Tema umum dalam statistik adalah untuk berpikir dengan hati-hati tentang apa yang independen dan apa yang berkorelasi. Secara umum, pengamatan independen cenderung menjadi subjek yang berbeda. Jika Anda ingin memprediksi kinerja pada subjek baru , Anda harus menguji pada subjek yang tidak Anda latih!

Mengapa validasi silang subjek-bijaksana daripada catatan-bijaksana?

Dalam pengaturan yang khas, pengamatan berulang dari individu yang sama berkorelasi satu sama lain bahkan setelah pengkondisian fitur. Oleh karena itu dengan validasi silang catatan-bijaksana, set tes Anda tidak terlepas dari set pelatihan Anda! Dalam kasus ekstrim korelasi sempurna, Anda akan memiliki pengamatan yang sama persis di set pelatihan dan set tes! Anda akan berlatih di set tes! Kinerja yang diukur dalam validasi silang tidak akan menjadi prediksi kinerja pada subjek baru.

Sebagai contoh, makalah ini baru-baru ini panggilan validasi lintas catatan bijaksana, `` Voodoo Machine Learning. "

Apa yang harus dilakukan dengan begitu sedikit subjek ...

Mungkin beberapa komentator yang lebih berpengalaman dengan cross-validation daripada saya bisa berpadu, tetapi bagi saya, ini sepertinya kandidat yang mungkin untuk (alias tinggalkan satu validasi silang)?k=n

Untuk memaksimalkan data untuk pelatihan, sesuatu yang bisa Anda lakukan adalah meninggalkan satu subjek untuk validasi silang. Setiap iterasi, uji pada subjek bertahan yang berbeda dan latih semua yang lain.

Jika semua subjek sangat berbeda, Anda mungkin secara efektif mendekati dan mungkin ingin memasukkan sebanyak mungkin subjek independen dalam rangkaian pelatihan.n=38

Matthew Gunn
sumber
Saya tahu dataset harus dibagi dalam 3: pelatihan, validasi dan pengujian. Dalam cross-validation "pelatihan dan validasi" digunakan. Set tahan adalah "pengujian". Jadi, apakah Anda menyarankan: untuk pelatihan dan validasi gunakan 37 mata pelajaran dan tes dalam 1 mata pelajaran? Dan saya bisa melakukan semua jenis cross-validation: k-fold, stratified, dll?
Aizzaac
1
OP melakukan pengeditan dengan mengatakan bahwa "Ini untuk sistem biometrik. Jadi saya ingin dapat mengidentifikasi subjek". Jika saya benar mengerti apa artinya, itu menyiratkan bahwa hanya CV catatan-bijaksana yang masuk akal karena tujuannya adalah untuk memprediksi id subjek berdasarkan sampel.
Amuba mengatakan Reinstate Monica
@amoeba Hanya jika data baru akan datang dari 38 subjek yang sama . Misalnya. jika sistem seharusnya mengatakan apakah sidik jari cocok atau tidak cocok dan akan ditempatkan di pintu depan rumah saya (yaitu harus mengidentifikasi orang asing sebagai orang asing), pelatihan dan pengujian pada subjek yang sama akan bermasalah (Anda akan ingin tahu seberapa sering itu memberi masuk ke orang yang belum pernah dilihatnya, tidak pernah dilatih). Namun saya setuju bahwa "Ini untuk sistem biometrik" menimbulkan pertanyaan ...
Matthew Gunn
3

Itu benar-benar tergantung pada bagaimana Anda membayangkan pengaturan yang ingin Anda tiru dengan kereta / test split. Untuk membuat segala sesuatunya konkret, katakan setiap baris menggambarkan kualitas tidur suatu subjek dalam satu malam.

  1. Mungkin saja, di masa depan, setiap subjek akan terlebih dahulu datang ke laboratorium tidur, dan memberi Anda kualitas tidur selama beberapa malam. Setelah itu, Anda perlu memperkirakan kualitas tidur malam berikutnya untuk mata pelajaran ini . Dalam hal ini, Anda akan menggunakan opsi Anda b). Di sklearn, Anda bisa menggunakansklearn.model_selection.StratifiedShuffleSplit

  2. Mungkin saja, di masa mendatang, beberapa subjek pertama-tama akan datang ke laboratorium tidur, dan memberi Anda kualitas tidur selama beberapa malam. Setelah itu, Anda perlu memprediksi kualitas tidur malam berikutnya untuk mata pelajaran lain . Dalam hal ini, Anda akan menggunakan opsi Anda a). Di sklearn, Anda bisa menggunakansklearn.cross_validation.LeavePLabelOut

Ami Tavory
sumber
1
Namun secara realistis, pertanyaannya hampir pasti adalah kasus Anda (2) dan opsi (a), yaitu validasi lintas subjek-bijaksana, adalah yang sesuai.
Matius Gunn
1
@ MatthewGunn Anda benar. Kasus 2 jauh lebih umum. Saya harus mengatakan bahwa saya telah menemukan kasus nyata di mana saya adalah pilihan yang tepat.
Ami Tavory
1
Menarik. Saya bisa melihat (1) tepat untuk memprediksi pengamatan baru untuk beberapa basis pelanggan yang besar dan mapan. Poin yang diambil. Mungkin saya bereaksi sangat kuat karena saya baru-baru ini membaca makalah ini tentang penyalahgunaan luas validasi lintas catatan bijaksana di bidang medis.
Matthew Gunn
Apa pendapat Anda tentang ini: Saya menggunakan 38 subjek dengan semua jenis validasi silang; dan untuk menguji apakah model saya dapat digunakan dengan subjek yang berbeda; Saya menggunakan dataset online? Saya pikir ide dari set keluar adalah untuk memiliki dataset "baru" untuk menguji model.
Aizzaac
3

Untuk berpadu, saya berasumsi bahwa aplikasi ini untuk memprediksi subjek yang tidak dikenal. Itu berarti (terlepas dari apakah Anda memiliki deret waktu atau pengukuran berulang yang secara inheren tidak berurutan) bahwa pemisahan perlu dilakukan sehingga subjek yang tidak diketahui diuji => pemisahan a)

Mengingat Anda hanya memiliki 38 subjek, Anda harus mempertimbangkan validasi resampling. Dari pengalaman saya bekerja dengan ukuran sampel yang sama kecil (meskipun lebih banyak fitur), berikut adalah beberapa rekomendasi singkatnya:

  • Pergi untuk keluar-dari-bootstrap bijaksana atau iterasi lintas validasi. Mereka memungkinkan untuk menilai stabilitas model Anda yang sangat penting dalam masalah ukuran sampel kecil. Hasil bahkan dapat digunakan untuk model agregat jika ketidakstabilan adalah masalah.

  • Jangan tidak melakukan cuti-satu-subjek-out. Itu tidak memungkinkan untuk mengukur stabilitas model, atau untuk menguranginya. Selain itu, ada situasi di mana ia cenderung bias pesimistis besar karena ukuran sampel yang kecil (berlawanan dengan bias pesimistis minimal yang diharapkan).

  • Jika Anda menggunakan angka klasifikasi tipikal seperti akurasi, sensitivitas, spesifisitas, dll. Dan tugasnya adalah mengklasifikasikan subjek dengan benar: berhati-hatilah bahwa masalah krusial adalah mengukur kinerja karena ketidakpastian hasil pengujian tergantung pada angka absolut kasus uji. Sebagai contoh, mengamati 17 prediksi yang benar dari 17 subjek yang benar-benar positif sesuai dengan interval kepercayaan 95% untuk sensitivitas mulai dari sekitar 80% hingga 100%.
    Dengan kata lain, Anda tidak akan dapat melakukan optimasi model berbasis data berdasarkan itu.

  • Ini juga berarti bahwa Anda tidak perlu menyiapkan pemisahan tiga set (validasi silang bersarang), karena Anda akan menyia-nyiakan sumber daya untuk perbandingan yang tidak bermakna secara statistik di sini - pengoptimalan Anda hampir dijamin gagal (meskipun Anda mungkin tidak memperhatikan bahwa jika Anda jangan periksa stabilitas).

  • Perhitungan yang sama untuk interval kepercayaan binomial untuk 5 (3) tes / optimisasi / validasi subjek yang diusulkan menghasilkan 95% ci untuk semua yang benar berkisar hingga 50% (30%) jadi berdasarkan hasil tes sempurna interval kepercayaan Anda masih akan mencakup 50 / 50 menebak!

Beberapa makalah kami menulis tentang mata pelajaran ini:

cbeleites tidak senang dengan SX
sumber