Saya ingin menerapkan algoritma untuk pemilihan model otomatis. Saya berpikir untuk melakukan regresi bertahap tetapi apa pun akan dilakukan (itu harus didasarkan pada regresi linier).
Masalah saya adalah bahwa saya tidak dapat menemukan metodologi, atau implementasi open source (saya bangun di java). Metodologi yang saya pikirkan adalah sesuatu seperti:
- menghitung matriks korelasi semua faktor
- pilih faktor-faktor yang memiliki korelasi rendah satu sama lain
- menghapus faktor-faktor yang memiliki t-stat rendah
- tambahkan faktor lain (masih berdasarkan faktor korelasi rendah yang ditemukan pada 2.).
- ulangi beberapa kali sampai beberapa kriteria (misalnya AIC) melewati batas tertentu atau tidak dapat atau kami tidak dapat menemukan nilai yang lebih besar.
Saya menyadari ada implementasi R untuk ini (stepAIC), tetapi saya menemukan kode yang cukup sulit untuk dipahami. Saya juga belum dapat menemukan artikel yang menggambarkan regresi bertahap.
Jawaban:
Saya pikir pendekatan ini salah, tetapi mungkin akan lebih membantu jika saya menjelaskan alasannya. Ingin mengetahui model terbaik yang diberikan beberapa informasi tentang sejumlah besar variabel cukup dimengerti. Selain itu, ini adalah situasi di mana orang tampaknya menemukan diri mereka secara teratur. Selain itu, banyak buku teks (dan kursus) tentang regresi mencakup metode seleksi bertahap, yang menyiratkan bahwa mereka harus sah. Sayangnya, tidak demikian, dan pemasangan situasi dan tujuan ini cukup sulit untuk dinavigasi dengan sukses. Berikut ini adalah daftar masalah dengan prosedur pemilihan model bertahap otomatis (dikaitkan dengan Frank Harrell, dan disalin dari sini ):
Pertanyaannya adalah, apa yang buruk dari prosedur ini / mengapa masalah ini terjadi? Kebanyakan orang yang telah mengambil kursus regresi dasar akrab dengan konsep regresi dengan rata-rata , jadi inilah yang saya gunakan untuk menjelaskan masalah ini. (Meskipun ini mungkin tampak di luar topik pada awalnya, bersabarlah, saya berjanji itu relevan.)
Bayangkan seorang pelatih lintasan SMA pada hari pertama ujicoba. Tiga puluh anak-anak muncul. Anak-anak ini memiliki tingkat kemampuan intrinsik yang mendasari di mana pelatih, atau siapa pun, tidak memiliki akses langsung. Alhasil, sang pelatih melakukan satu-satunya hal yang bisa ia lakukan, yaitu membuat mereka semua berlari 100 meter. Waktu mungkin merupakan ukuran kemampuan intrinsik mereka dan diambil seperti itu. Namun, mereka probabilistik; sebagian dari seberapa baik seseorang melakukannya berdasarkan pada kemampuan aktualnya dan sebagian lagi bersifat acak. Bayangkan bahwa situasi sebenarnya adalah sebagai berikut:
Hasil balapan pertama ditampilkan pada gambar berikut bersama dengan komentar pelatih kepada anak-anak.
Perhatikan bahwa mempartisi anak-anak berdasarkan waktu lomba mereka menyisakan kemampuan intrinsik mereka - fakta ini sangat penting. Setelah memuji beberapa orang, dan meneriaki beberapa orang lain (seperti yang cenderung dilakukan para pelatih), ia meminta mereka berlari lagi. Inilah hasil balapan kedua dengan reaksi pelatih (disimulasikan dari model yang sama di atas):
Perhatikan bahwa kemampuan intrinsik mereka identik, tetapi waktu melambung relatif terhadap ras pertama. Dari sudut pandang pelatih, mereka yang dia berteriak cenderung untuk meningkatkan, dan mereka yang dia memuji cenderung lebih buruk (saya mengadaptasi contoh konkret ini dari kutipan Kahneman yang tercantum pada halaman wiki), meskipun sebenarnya regresi ke mean adalah matematika sederhana. konsekuensi dari kenyataan bahwa pelatih memilih atlet untuk tim berdasarkan pada pengukuran yang sebagian acak.
Sekarang, apa hubungannya ini dengan teknik pemilihan model otomatis (misalnya, bertahap)? Mengembangkan dan mengkonfirmasi model berdasarkan dataset yang sama kadang-kadang disebut pengerukan data. Meskipun ada beberapa hubungan mendasar di antara variabel-variabel, dan hubungan yang lebih kuat diharapkan menghasilkan skor yang lebih kuat (misalnya, t-statistik yang lebih tinggi), ini adalah variabel acak dan nilai-nilai yang diwujudkan mengandung kesalahan. Jadi, ketika Anda memilih variabel berdasarkan memiliki nilai realisasi yang lebih tinggi (atau lebih rendah), mereka mungkin seperti itu karena nilai sebenarnya yang mendasarinya, kesalahan, atau keduanya. Jika Anda melanjutkan dengan cara ini, Anda akan terkejut seperti pelatih setelah balapan kedua. Ini benar apakah Anda memilih variabel berdasarkan memiliki t-statistik tinggi, atau interelasi rendah. Benar, menggunakan AIC lebih baik daripada menggunakan nilai-p, karena itu menghukum model untuk kompleksitas, tetapi AIC itu sendiri adalah variabel acak (jika Anda menjalankan penelitian beberapa kali dan sesuai dengan model yang sama, AIC akan terpental seperti yang lainnya). Sayangnya,
Saya harap ini membantu.
sumber
Lihat paket caret di R. Ini akan membantu Anda memvalidasi silang model regresi bertahap (gunakan
method='lmStepAIC'
ataumethod='glmStepAIC'
), dan mungkin membantu Anda memahami bagaimana model semacam ini cenderung memiliki kinerja prediksi yang buruk. Selanjutnya, Anda dapat menggunakanfindCorrelation
fungsi dalam caret untuk mengidentifikasi dan menghilangkan variabel collinear, danrfe
fungsi dalam caret untuk menghilangkan variabel dengan t-statistik yang rendah (gunakanrfeControl=rfeControl(functions=lmFuncs)
).Namun, seperti yang disebutkan dalam jawaban sebelumnya, metode pemilihan variabel ini cenderung membuat Anda dalam masalah, terutama jika Anda melakukannya secara iteratif. Pastikan Anda benar-benar mengevaluasi kinerja Anda pada set tes yang SEPENUHNYA diadakan. Jangan melihat set tes sampai Anda puas dengan algoritme Anda!
Akhirnya, mungkin lebih baik (dan lebih sederhana) untuk menggunakan model prediktif dengan pemilihan fitur "bawaan", seperti regresi ridge, laso, atau jaring elastis. Secara khusus, coba
method=glmnet
argumen untuk caret, dan bandingkan akurasi cross-divalidasi dari model itu denganmethod=lmStepAIC
argumen. Dugaan saya adalah bahwa yang pertama akan memberi Anda akurasi out-of-sample jauh lebih tinggi, dan Anda tidak perlu khawatir menerapkan dan memvalidasi algoritma pemilihan variabel kustom Anda.sumber
r
ataupython
? Saya ingin mencobanya.Saya sepenuhnya setuju dengan masalah yang diuraikan oleh @ung. Yang mengatakan, secara realistis, pemilihan model adalah masalah nyata yang membutuhkan solusi nyata. Inilah sesuatu yang akan saya gunakan dalam latihan.
Sebagai contoh penggunaan metode ini di dunia nyata, saya percaya bahwa ini digunakan dalam kompetisi Netflix Prize.
sumber
Untuk menjawab pertanyaan, ada beberapa opsi: 1) semua-subset oleh AIC / BIC 2) bertahap dengan p-value 3) bertahap oleh AIC / BIC 4) regularisasi seperti LASSO (dapat didasarkan pada AIC / BIC atau CV 5) algoritma genetika (GA) 6) lainnya? 7) penggunaan pemilihan berorientasi teori ("pengetahuan materi") non-otomatis
Pertanyaan selanjutnya adalah metode mana yang lebih baik. Makalah ini (doi: 10.1016 / j.amc.2013.05.016) menunjukkan "semua regresi yang mungkin" memberikan hasil yang sama dengan metode baru yang diusulkan dan secara bertahap lebih buruk. GA sederhana ada di antara mereka. Makalah ini (DOI: 10.1080 / 10618600.1998.10474784) membandingkan regresi yang dihukum (Jembatan, Lasso dll) dengan "lompatan-dan-batas" (tampaknya algoritma pencarian lengkap tetapi lebih cepat) dan juga menemukan "model jembatan setuju dengan model terbaik dari pemilihan subset dengan metode lompatan dan batas ”. Makalah ini (doi: 10.1186 / 1471-2105-15-88) menunjukkan GA lebih baik daripada LASSO. Makalah ini (DOI: 10.1198 / jcgs.2009.06164) mengusulkan metode - pada dasarnya pendekatan semua-subset (berdasarkan BIC) tetapi secara cerdik mengurangi waktu perhitungan. Mereka menunjukkan metode ini lebih baik daripada LASSO. Menariknya, makalah ini (DOI: 10.1111 / j.1461-0248.2009.01361.
Jadi secara keseluruhan hasilnya beragam tetapi saya mendapat kesan bahwa GA tampaknya sangat baik meskipun bertahap mungkin tidak terlalu buruk dan cepat.
Adapun 7), penggunaan seleksi berorientasi teori, non-otomatis ("pengetahuan materi"). Ini memakan waktu dan tidak selalu lebih baik daripada metode otomatis. Faktanya dalam literatur time-series, dapat dipastikan bahwa metode otomatis (khususnya perangkat lunak komersial) mengungguli ahli manusia "dengan selisih yang substansial" (doi: 10.1016 / S0169-2070 (01) 00119-4, halaman561 misalnya memilih berbagai smoothing eksponensial dan model ARIMA).
sumber
Berikut ini jawaban dari bidang kiri - alih-alih menggunakan regresi linier, gunakan pohon regresi (paket rpart). Ini cocok untuk pemilihan model otomatis karena dengan sedikit pekerjaan Anda dapat mengotomatiskan pemilihan cp, parameter yang digunakan untuk menghindari pemasangan yang berlebihan.
sumber
model linier dapat dioptimalkan dengan mengimplementasikan algoritma genetika dengan cara memilih variabel independen yang paling berharga. Variabel direpresentasikan sebagai gen dalam algoritma, dan kromosom terbaik (set gen) kemudian dipilih setelah operator crossover, mutasi dll. Ini didasarkan pada seleksi alam - maka 'generasi' terbaik dapat bertahan hidup, dengan kata lain, algoritma mengoptimalkan fungsi estimasi yang tergantung pada model tertentu.
sumber
Kami memang memiliki fungsi dalam paket statistik dasar R, yang disebut langkah (), yang melakukan pemilihan model maju, mundur atau bertahap berdasarkan AIC terendah. Ini juga berfungsi untuk variabel faktor. Apakah ini bukan tujuan server di sini?
sumber
Saya melihat pertanyaan saya menghasilkan banyak minat dan perdebatan menarik tentang validitas pendekatan pemilihan model otomatis. Meskipun saya setuju bahwa menerima begitu saja hasil seleksi otomatis berisiko, itu dapat digunakan sebagai titik awal. Jadi di sini adalah bagaimana saya mengimplementasikannya untuk masalah khusus saya, yaitu untuk menemukan faktor n terbaik untuk menjelaskan variabel yang diberikan
Sekali lagi, ini sangat kasar, mungkin ada cara untuk meningkatkan metodologi, tetapi itulah titik awal saya. Saya memposting jawaban ini dengan harapan dapat bermanfaat bagi orang lain. Komentar dipersilahkan!
sumber