Saya perlu melatih classifier linier pada laptop saya dengan ratusan ribu titik data dan sekitar sepuluh ribu fitur. Apa saja pilihan saya? Bagaimana keadaan seni untuk jenis masalah ini?
Sepertinya penurunan gradien stokastik adalah arah yang menjanjikan, dan menurut saya ini adalah yang terbaik:
"Pegasos: Perkiraan awal Sub-GrAdient SOlver untuk SVM" Shai Shalev-Shwartz, Penyanyi Yoram, Nathan Srebro, Andrew Cotter. "Pemrograman Matematika, Seri B, 127 (1): 3-30, tahun: 2007."
Apakah ini konsensus? Haruskah saya mencari ke arah lain?
classification
carlosdc
sumber
sumber
Jawaban:
Saya pikir Anda harus melihat metode Pembelajaran Online . The perceptron dan perceptron kernel sangat mudah untuk kode dan bekerja sangat baik dalam praktek, dan ada seluruh host metode online lainnya. Perhatikan bahwa setiap metode pembelajaran online dapat dikonversi menjadi algoritma pembelajaran batch, dalam hal ini mereka sangat mirip dengan metode keturunan gradien stokastik.
Jika Anda menggunakan Matlab ada kotak alat yang sangat bagus yang disebut DOGMA oleh Francesco Orabona, yang berisi berbagai algoritma pembelajaran online, dan Anda dapat mengevaluasi beberapa metode berbeda menggunakan itu. Saya telah menggunakan ini dalam beberapa penelitian saya dan menemukan itu sangat berguna (perhatikan bahwa sejauh yang saya ingat itu mengharapkan data sebagai [fitur x contoh] sehingga Anda mungkin harus memindahkannya).
Seperti yang disebutkan orang lain, Anda mungkin ingin mencoba pengurangan dimensionalitas. PCA mungkin bukan pilihan yang baik di sini, karena Anda harus menghitung matriks kovarians yang akan sangat mahal. Anda dapat mencoba melihat Proyeksi Acak . Teorinya sulit, tetapi prinsipnya sangat sederhana. Ini didasarkan pada Lemma Johnson-Lindenstrauss jika Anda tertarik, tetapi ide dasarnya adalah jika Anda memproyeksikan secara acak ke ruang dimensi yang lebih rendah, maka jarak antar titik dipertahankan hingga beberapa ϵ . Jika Anda menggunakan kernel RBF, maka ℓ 2 jarak semua yang Anda tertarik!ℓ2 ϵ ℓ2
sumber
Pertama, saya ingin bertanya bagaimana Anda tahu classifier linier adalah pilihan terbaik? Secara intuitif untuk ruang yang begitu besar (R ^ 10000) ada kemungkinan bahwa beberapa classifier non-linear lainnya adalah pilihan yang lebih baik.
Saya sarankan Anda untuk mencoba beberapa pengklasifikasi yang berbeda dan mengamati kesalahan prediksi (saya akan mencoba beberapa model klasifikasi yang diatur).
Jika Anda kehabisan memori, kurangi dimensi menggunakan PCA
sumber
Anda juga dapat menggunakan PCA untuk mengurangi dimensi tanpa menghitung matriks kovarians --- dengan menggunakan setara newtork neural dari PCA.
Berikut ini adalah makalah yang menjelaskannya (tapi saya sarankan melakukan pencarian Anda sendiri): http://users.ics.tkk.fi/oja/Oja1982.pdf , dan di sini adalah tautan ke sesuatu yang mungkin berfungsi implementasi matlab: http : //www.cs.purdue.edu/homes/dgleich/projects/pca_neural_nets_website/index.html .
sumber
Seperti yang disarankan jb, saya pikir lebih baik menggunakan metode "Pengurangan Dimensi". Principle Component Analysis (PCA) adalah pilihan populer. Anda juga dapat mencoba teknik pembelajaran fitur tanpa pengawasan. Untuk informasi lebih lanjut tentang pembelajaran fitur tanpa pengawasan dapat ditemukan di http://ufldl.stanford.edu/wiki/index.php/UFLDL_Tutorial
sumber