Regresi Logistik pada Big Data

9

Saya memiliki kumpulan data sekitar 5000 fitur. Untuk data itu saya pertama kali menggunakan uji Chi Square untuk pemilihan fitur; setelah itu, saya mendapat sekitar 1500 variabel yang menunjukkan hubungan signifikan dengan variabel respon.

Sekarang saya harus menyesuaikan regresi logistik. Saya menggunakan paket glmulti untuk R (paket glmulti menyediakan pilihan subset yang efisien untuk vlm) tetapi dapat menggunakan hanya 30 fitur pada satu waktu, jika tidak kinerjanya turun karena jumlah baris dalam dataset saya sekitar 20000.

Apakah ada pendekatan atau teknik lain untuk menyelesaikan masalah di atas? Jika saya menggunakan metode di atas, akan terlalu banyak waktu untuk menyesuaikan model.

Vijay
sumber
8
Jika Anda dapat memasukkan dataset Anda ke dalam memori satu mesin, saya tidak akan menyebut ini masalah "Big Data", khususnya jika Anda melakukan ini dalam judul pertanyaan Anda
logc
Saya menggunakan sklearn's LogisticRegressiondan itu memecahkan 4000 fitur, 20.000 baris masalah dalam sekitar satu menit di laptop saya.
Thomas Ahle

Jawaban:

13

Tidaklah tepat untuk melakukan penyaringan fitur dan kemudian memasukkan fitur yang masih hidup ke dalam metode yang tidak mengerti berapa banyak penyiksaan data yang dilakukan sebelumnya. Lebih baik menggunakan metode yang dapat menangani semua fitur potensial (misalnya, jaring elastis). Saran orang lain tentang penggunaan reduksi data juga merupakan ide bagus.

Frank Harrell
sumber
Apakah ada bukti untuk ini? O / w sepertinya heuristik seperti halnya screening fitur.
Zubin
2
Estimasi kemungkinan maksimum yang dikenakan penalti mempertimbangkan konteks, misalnya, dalam laso, estimasi koefisien regresi variabel akan lebih kecil jika Anda mempertimbangkan 1000 variabel yang tidak dipilih daripada jika Anda mempertimbangkan 100 variabel yang tidak terpilih. Jika tidak, variabel dipilih dengan cara yang bias dan refitting variabel dalam langkah kedua kehilangan konteks.
Frank Harrell
Bisakah Anda menguraikan apa yang Anda maksudkan dengan bias di sini? Saya bertanya-tanya, karena dalam hal sepele laso selalu bias, jadi Anda harus merujuk pada bias tambahan. Juga, ada beberapa pendekatan dua tahap dengan properti yang wajar, misalnya pdfs.semanticscholar.org/d90a/…
jmb
2
The lasso sengaja bias koefisien menuju nol untuk mencegah overfitting. Parameter yang tidak dilembutkan menyebabkan nilai prediksi yang terlalu ekstrim. Memasukkan variabel "terpilih" dalam model yang tidak dipatenkan akan membatalkan bias laso yang diperlukan , menciptakan nilai overfitting dari nilai prediksi.
Frank Harrell
10

Pendekatan pertama adalah menggunakan PCA untuk mengurangi dimensi dataset. Cobalah untuk mempertahankan ~ 97% dari total varians, ini dapat membantu sedikit.

Pilihan lain adalah menggunakan sesuatu seperti penurunan gradien stokastik, ini bisa menjadi algoritma yang jauh lebih cepat dan dapat masuk ke dalam memori R.

EDIT: Satu masalah dengan R adalah bahwa Anda hanya dapat menggunakan RAM Anda jadi jika Anda hanya memiliki 8 GB memori maka itu adalah apa yang Anda terbatas. Saya telah mengalami banyak masalah dengan ini dan sejak itu pindah ke menggunakan scikit-python belajar yang tampaknya menangani dataset lebih besar jauh lebih baik.

Bagan yang sangat bagus yang memberikan beberapa ide tempat untuk memulai berdasarkan ukuran dataset Anda dapat ditemukan di sini: http://3.bp.blogspot.com/-dofu6J0sZ8o/UrctKb69QdI/AAAAAAAADfg/79ewPecn5XU/s1600/scikit-learn-flow -chart.jpg

masukkan deskripsi gambar di sini

mike1886
sumber
8
Perhatian besar dengan menggunakan PCA dengan cara ini adalah bahwa semua hubungan antara variabel respon dan variabel independen bisa berada di 3% dari total varian yang Anda abaikan. Tampaknya juga tidak ada cara umum untuk menentukan berapa banyak komponen utama yang akan digunakan, karena komponen yang paling kecil dapat proporsional dengan respons itu sendiri dan dengan demikian akan membentuk pilihan variabel yang optimal untuk dimasukkan.
whuber
1
Saya pikir memang jika Anda dapat memuat dataset dalam memori utama (yang saya asumsikan adalah kasus mengingat apa yang Anda jelaskan), penurunan gradien stokastik adalah langkah pertama yang harus Anda ambil sebelum mencoba teknik reduksi dimensi. Dengan Scikit-belajar di python (atau R, tapi saya bukan pengguna bahasa ini), ini akan berfungsi dengan baik.
Bertrand R
Saya pikir ini adalah jawaban yang berguna, tetapi saya pikir OP bertanya tentang regresi logistik, dan bukan pengurangan fitur. Mungkin Anda bisa membahas bagian pertanyaan itu dalam edisi?
logc
Saya tidak yakin seberapa berguna PCA untuk masalah regresi. Masalahnya adalah ini: PCA menyimpan nilai singular terbesar dari matriks input, tetapi pseudo-invers dari matriks membalikkan nilai singular, jadi Anda benar-benar ingin menyimpan nilai terkecil dari nilai aslinya. Mungkin lebih baik dengan membuat sketsa data: arxiv.org/abs/1411.4357
Thomas Ahle
4

Seperti yang telah disebutkan oleh @Frank Harrell, menggunakan jaring elastis atau LASSO untuk melakukan regresi yang dihukum dengan semua 5000 fitur ( p ) akan menjadi awal yang baik untuk pemilihan fitur (satu tidak dapat dengan mudah menghapus 3500 variabel karena mereka tidak "signifikan secara statistik" dengan variabel terikat bunga). Salah satu dari metode ini dapat dilakukan dengan menggunakan paket R glmnet,.

Untuk memperhitungkan hubungan yang dibagi antara variabel prediktor potensial yang menarik ( p = 5000), saya akan merekomendasikan menjalankan hutan acak menggunakan randomForestpaket dan / atau meningkatkan gradien menggunakan gbmpaket untuk menilai kepentingan relatif dari variabel prediktor potensial dalam hal hasil biner. Dengan informasi ini, Anda akan jauh lebih siap untuk membangun model regresi logistik yang lebih pelit.

Matt Reichenbach
sumber
3
Tidak, tidak benar melakukan pengerukan data untuk memutuskan parameter mana yang akan dihapus dari model. Nilai hutan acak, seperti jaring elastis, adalah bahwa ia memasukkan jumlah penyusutan yang tepat. Memulai dari awal dengan subset variabel yang ditemukan dengan cara yang tidak disembunyikan ke akan menyebabkan bias. Y
Frank Harrell
1

Saya berasumsi Anda tidak terbatas pada R, karena ini adalah masalah data besar Anda mungkin tidak seharusnya. Anda dapat mencoba MLlib , yang merupakan pustaka pembelajaran mesin Apache Spark yang dapat diskalakan.

Apache Spark , pada gilirannya, adalah mesin umum dan cepat untuk pemrosesan data skala besar in-memory. Ini beroperasi pada kerangka kerja Hadoop yang memungkinkan pemrosesan terdistribusi set data besar di seluruh cluster komputer menggunakan model pemrograman sederhana. Ini dirancang untuk meningkatkan dari server tunggal ke ribuan mesin, masing-masing menawarkan komputasi dan penyimpanan lokal.

Perhatikan bahwa 'ribuan mesin' adalah opsional (!), Anda juga dapat mengaturnya di desktop kantor / rumah lokal Anda.

Kembali ke MLlib, ini disertai dengan algoritme di bawah ini di luar kotak:

  • K-means clustering dengan K-means || inisialisasi.
  • Regresi linier yang diatur L1- dan L2.
  • Regresi logistik yang diatur L1- dan L2.
  • Penyaringan kolaboratif kuadrat terkecil bergantian, dengan peringkat eksplisit atau umpan balik implisit.
  • Klasifikasi multinomial Naif Bayes.
  • Penurunan gradien stokastik.

Jika Anda secara teratur bekerja dengan data besar, Anda mungkin perlu mengadopsi solusi Hadoop.

Zhubarb
sumber
0

Anda dapat mencoba Vowpal Wabbit: Vowpal Wabbit . Ia bekerja dengan baik dengan kumpulan data yang sangat besar dan sejumlah besar fitur.

menurut situs web:

Ini adalah proyek yang dimulai di Yahoo! Meneliti dan melanjutkan di Microsoft Research untuk merancang algoritma pembelajaran yang cepat, terukur, dan bermanfaat. VW adalah inti dari kecepatan dalam pembelajaran mesin, mampu belajar dari set data terafeature dengan mudah. Melalui pembelajaran paralel, dapat melebihi throughput dari setiap antarmuka jaringan mesin saat melakukan pembelajaran linier, yang pertama di antara algoritma pembelajaran.

pengguna765195
sumber