Bagaimana cara cepat memilih variabel penting dari dataset yang sangat besar?

9

Saya memiliki dataset dengan sekitar 2.000 variabel biner / 200.000 baris dan saya mencoba untuk memprediksi variabel dependen biner tunggal. Tujuan utama saya pada tahap ini bukan untuk mendapatkan akurasi prediksi, melainkan untuk mengidentifikasi variabel mana yang merupakan prediktor penting. Saya ingin menurunkan jumlah variabel dalam model akhir saya menjadi sekitar 100.

Apakah ada cara yang relatif cepat untuk mendapatkan variabel yang paling penting? randomForest sepertinya butuh waktu lama.

Saya tidak harus menggunakan semua 200.000 pengamatan, jadi pengambilan sampel adalah opsi di atas meja.

DevX
sumber
Dengan prediktor "penting" dan bukan "akurat", apakah maksud Anda Anda ingin menemukan orang-orang yang merupakan kandidat terbaik untuk menjelaskan hasil dan membantu Anda membangun teori? Jika demikian, 100 variabel penjelas adalah jumlah yang sangat besar - sangat besar. Teori-bangunan dan penjelasan yang benar (bukan hanya prediksi) kemungkinan akan mengharuskan Anda mengurangi jumlah X menjadi 10 atau 15.
rolando2
2
@ rolando2 Dalam beberapa aplikasi 100 tidak besar sama sekali. Misalnya, literatur tentang aksesibilitas ke titik broadband berkecepatan tinggi ke sekitar 150 variabel (dari ratusan yang dianalisis) dan semuanya masuk akal: semuanya berhubungan dengan kemudahan teknik (medan, jenis batuan, iklim, dll.), Hingga ekonomi (SES, dll.), Ke demografi, ke geometri infrastruktur transportasi lokal, ke politik (pajak dan iklim usaha), dll. Saya percaya bahwa banyak model ekonomi yang serupa dapat memasukkan ratusan variabel yang secara teoritis penting.
whuber
@whuber - Saya sedang memikirkan maksud Anda ... Apakah Anda setuju bahwa diperlukan analis yang berdedikasi, berbakat, dan berpengalaman yang tidak biasa untuk memilah peran kausal (bukan sekadar prediksi) yang dimainkan oleh begitu banyak variabel?
rolando2
@rolando Tentu. 2000 variabel banyak pekerjaan!
whuber

Jawaban:

6

Anda bisa mulai dengan filter Univariat sederhana, dan menggunakan validasi silang untuk memutuskan variabel mana yang akan disimpan. The sbffungsi dalam caretpaket untuk R benar-benar berguna. Anda dapat membaca lebih lanjut di sini , mulai halaman 19.

Zach
sumber
Terima kasih. Saya baru saja membaca koran dan sepertinya pendekatan yang solid. Namun saya mengalami beberapa masalah memori pada sistem Memori 64bit 4MB saya.
DevX
1
@DevX: Jika Anda memiliki terlalu banyak data, Anda dapat mencoba mengambil sampel dan memilih variabel berdasarkan sampel?
Zach
13

Ini terdengar seperti masalah yang cocok untuk laso dan teman-teman yang melakukan penyusutan dan pemilihan variabel. Unsur-unsur Pembelajaran Statistik menggambarkan laso dan jaring elastis untuk regresi dan, apa yang lebih relevan untuk masalah ini, regresi logistik.

Para penulis buku telah membuat implementasi yang efisien dari laso dan jaring elastis tersedia sebagai paket R yang disebut glmnet . Saya sebelumnya telah menggunakan paket ini untuk analisis data biner dengan matriks data sekitar 250.000 baris, meskipun kolomnya lebih sedikit, tetapi sebenarnya menjalankan regresi semua kolom terhadap semua kolom lainnya. Jika matriks data juga jarang, implementasi dapat mengambil keuntungan dari itu juga, dan saya percaya metode ini benar-benar dapat bekerja untuk set data lengkap OPs. Berikut adalah beberapa komentar tentang laso:

  • 1
  • Pemilihan parameter tuning sering dilakukan dengan cross-validation, tetapi bahkan tanpa langkah cross-validation, metode ini mungkin dapat memberikan urutan yang baik dari variabel yang dipilih yang diindeks oleh parameter penalti.
  • Pada sisi negatifnya, untuk pemilihan variabel, adalah bahwa laso dapat menjadi tidak stabil dalam pemilihan variabel, khususnya, jika mereka agak berkorelasi. Penalti bersih yang lebih umum diciptakan untuk memperbaiki ketidakstabilan ini, tetapi itu tidak menyelesaikan masalah sepenuhnya. Lasso adaptif adalah ide lain untuk meningkatkan pemilihan variabel untuk laso.
  • Seleksi Stabilitas adalah metode umum yang disarankan oleh Meinshausen dan Bühlmann untuk mencapai stabilitas yang lebih besar dari variabel yang dipilih dengan metode seperti laso. Ini membutuhkan sejumlah kecocokan untuk subsampel set data dan, dengan demikian, jauh lebih menuntut komputasi.
  • Cara berpikir yang masuk akal dari laso adalah sebagai metode untuk menghasilkan satu set model "baik" satu dimensi mulai dari model variabel tunggal hingga model yang lebih rumit (tidak harus mencakup semua variabel) yang ditentukan oleh parameter penalti. Sebaliknya, filter univariat menghasilkan pilihan, atau pemesanan, hanya model variabel tunggal yang baik.

Untuk Python ada implementasi dalam scikit-belajar metode seperti laso dan jaring elastis.

NRH
sumber
Sebagai gagasan tambahan, jika jumlah calon prediktor meroket, seperti di GWAS, Anda dapat melakukan sesuatu seperti dalam artikel ini untuk memilih: Analisis asosiasi genome dengan regresi logistik yang dihukum
Nick Sabbe
@NickSabbe, terima kasih untuk referensi ini. Itu sangat berguna. Dalam konteks GWAS, dan mungkin juga dalam konteks lain dengan sejumlah besar prediktor yang berkorelasi, saya mendengar Sylvia Richardson merekomendasikan pemilihan model Bayesian berdasarkan misalnya beberapa perbandingan dengan pemilihan stabilitas. Komputasi MCMC benar-benar menuntut.
NRH
Saya pikir itu layak menekankan laso Adaptive lebih karena mudah diimplementasikan (hampir hanya dua panggilan, bukan satu ke glmnetdalam R). Pilihan lain adalah Thresholding the Lasso yang juga cukup sederhana untuk diterapkan. Lihat bagian 2.9 dari springer.com/gp/book/9783642201912 .
Benjamin Christoffersen
2

Anda bisa melakukan regresi logistik / uji chi-square asosiasi untuk setiap variabel dan hanya mempertahankan mereka yang memiliki nilai p kurang dari beberapa nilai, katakanlah .2.

Lembah kecil
sumber
4
Untuk memahami bagaimana rekomendasi ini bisa berjalan, pertimbangkan kasus di mana ada 100 (katakanlah) prediktor penting (sangat berkorelasi dengan variabel dependen) dan sisanya sama sekali tidak terkait dengan variabel dependen dan satu sama lain. Mempertahankan mereka dengan nilai-p kurang dari 0,2 memastikan bahwa Anda akan berakhir dengan sekitar 100 + 0,2 * (2000-100) = 480 variabel, di mana 380 tidak bernilai. Untuk dataset kecil , pendekatan ini kadang-kadang digunakan sebagai layar awal cepat, tetapi itu benar-benar tidak dapat dipertimbangkan secara serius di sini.
whuber
Poin bagus @whuber. Anda harus mengatur level alfa Anda jauh lebih rendah untuk mempertahankan sekitar 100 tetapi kemudian Anda mungkin kehilangan variabel yang hanya dapat mempengaruhi penyesuaian untuk orang lain. Namun pergi dari tahun 2000 menjadi 480 bisa lebih mudah dikelola dalam menjalankan sesuatu seperti hutan acak.
Glen
Anda benar, ada manfaat dalam penyaringan semacam itu - jika itu berfungsi dengan baik. 480 adalah reduksi, tetapi ada masalah tambahan dari kemungkinan korelasi tinggi di antara semua 2000 variabel asli. Ini dapat menyebabkan salah satu atau semua dari 100 variabel yang benar tidak dipertahankan, seperti diilustrasikan dalam beberapa jawaban untuk pertanyaan terkait .
whuber