Saya mencoba untuk meningkatkan kecepatan dengan R. Saya akhirnya ingin menggunakan pustaka R untuk melakukan klasifikasi teks. Saya hanya ingin tahu apa pengalaman orang-orang sehubungan dengan skalabilitas R ketika datang untuk melakukan klasifikasi teks.
Saya cenderung mengalami data dimensi tinggi (~ 300k dimensi). Saya melihat menggunakan SVM dan Random Forest khususnya sebagai algoritma klasifikasi.
Apakah perpustakaan R skala ke ukuran masalah saya?
Terima kasih.
EDIT 1: Hanya untuk memperjelas, kumpulan data saya cenderung memiliki 1000-3000 baris (mungkin sedikit lebih) dan 10 kelas.
EDIT 2: Karena saya sangat baru di R, saya akan meminta poster untuk lebih spesifik jika memungkinkan. Misalnya, jika Anda menyarankan alur kerja / pipa, pastikan untuk menyebutkan pustaka R yang terlibat dalam setiap langkah jika memungkinkan. Beberapa petunjuk tambahan (untuk contoh, kode contoh, dll.) Akan ditambahkan pada kue.
EDIT 3: Pertama, terima kasih semuanya atas komentar Anda. Dan kedua, saya minta maaf, mungkin saya seharusnya memberikan lebih banyak konteks untuk masalah ini. Saya baru mengenal R tetapi tidak terlalu banyak menggunakan klasifikasi teks. Saya sudah melakukan pra-pemrosesan (stemming, stopword removal, konversi tf-idf dll.) Pada beberapa bagian data saya menggunakan paket tm , hanya untuk merasakan sesuatu. Tm sangat lambat bahkan pada sekitar 200dok sehingga saya khawatir tentang skalabilitas. Kemudian saya mulai bermain dengan FSelector dan bahkan itu sangat lambat. Dan itulah titik di mana saya membuat OP saya.
EDIT 4: Baru saja saya sadar bahwa saya memiliki 10 kelas dan sekitar ~ 300 dokumen pelatihan per kelas, dan saya sebenarnya membangun matriks termXdoc dari seluruh rangkaian pelatihan yang menghasilkan dimensi yang sangat tinggi. Tetapi bagaimana dengan mengurangi setiap masalah klasifikasi 1-out-of-k menjadi serangkaian masalah klasifikasi biner? Itu akan secara drastis mengurangi jumlah dokumen pelatihan (dan karenanya dimensi) pada masing-masing langkah k-1, bukan? Jadi, apakah pendekatan ini bagus? Bagaimana cara membandingkannya dalam hal akurasi dengan implementasi multi-kelas yang biasa?
Jawaban:
Seperti yang diminta dalam komentar, berikut adalah beberapa petunjuk untuk langkah-langkah pemrosesan. Sejumlah alat dapat ditemukan di Tampilan Tugas CRAN untuk Pemrosesan Bahasa Alami . Anda juga mungkin ingin melihat tulisan ini di
tm
(text mining) paket untuk R .openNLP
(untuk yang ada paket R) adalah satu rute.tf.idf
- frekuensi istilah * frekuensi dokumen terbalik - lihat entri Wikipedia untuk detail lebih lanjut. Ada normalisasi lain yang lebih baru, tetapi ini adalah metode roti dan mentega, jadi penting untuk mengetahuinya. Anda dapat dengan mudah mengimplementasikannya di R: just store (docID, wordID, freq1, freq2) di mana freq1 adalah hitungan berapa kali kata yang diindeks oleh wordID telah muncul dalam dokumen yang diberikan dan freq2 adalah # dokumen yang muncul. Tidak perlu menyimpan vektor ini untuk kata-kata yang tidak muncul dalam dokumen yang diberikan. Kemudian, ambil saja freq1 / freq2 dan Anda memiliki nilai tf.idf Anda.Matrix
paket.Pada titik ini, Anda memiliki dataset yang sudah diproses sebelumnya. Saya akan merekomendasikan untuk melanjutkan dengan alat yang dikutip dalam tampilan tugas CRAN atau paket penambangan teks. Pengelompokan data, misalnya dengan memproyeksikan ke 4 atau 6 komponen utama pertama, bisa sangat menarik bagi grup Anda ketika data diplot.
Satu hal lagi: Anda mungkin menemukan bahwa pengurangan dimensionalitas di sepanjang garis PCA (*) dapat membantu ketika menggunakan berbagai metode klasifikasi, karena Anda pada dasarnya menggabungkan kata-kata yang terkait. Komponen utama 10-50 pertama mungkin semua yang Anda butuhkan untuk klasifikasi dokumen, mengingat ukuran sampel Anda.
(*) Catatan: PCA hanyalah langkah pertama. Ini bisa sangat menarik bagi seseorang yang baru memulai dengan penambangan teks dan PCA, tetapi Anda mungkin akhirnya menemukan bahwa itu sedikit gangguan untuk set data yang jarang. Sebagai langkah pertama, lihatlah, terutama melalui
prcomp
danprincomp
fungsinya.Pembaruan: Saya tidak menyatakan preferensi dalam jawaban ini - saya sarankan
prcomp
daripadaprincomp
.sumber
prcomp
dan / atauprincomp
akankah skala data seperti ini menurut Anda? Saya juga mengedit pertanyaan saya dan menambahkan beberapa informasi tambahan.prcomp
) akan baik-baik saja.Pertama, selamat datang! Pemrosesan teks sangat menyenangkan, dan melakukannya di R semakin mudah setiap saat.
Jawaban singkatnya: ya - alat di R sekarang cukup bagus untuk menangani data seperti ini. Faktanya, tidak ada yang istimewa tentang R, C ++, Groovy, Scala, atau bahasa lain dalam hal penyimpanan data dalam RAM: setiap bahasa menyimpan float ganda 8 byte dalam ... tunggu, tunggu ... tunggu. .. 8 byte!
Algoritma dan implementasinya sangat penting, terutama jika diimplementasikan sangat buruk terkait dengan struktur data dan kompleksitas komputasi. Jika Anda menerapkan algoritma Anda sendiri, berhati-hatilah. Jika menggunakan kode lain, emptor peringatan berlaku, seperti halnya di lingkungan mana pun.
Untuk R, Anda perlu mempertimbangkan:
Matrix
paket)bigmemory
atauff
; atau didistribusikan, menggunakan Hadoop)Poin terakhir benar-benar di bawah kendali Anda.
Ketika datang ke dimensi ini, itu tidak terlalu besar lagi. # Pengamatan akan lebih berdampak, tetapi Anda dapat mempartisi data Anda untuk menyesuaikan penggunaan RAM, jadi tidak terlalu banyak yang perlu dikhawatirkan.
sumber
Saya setuju dengan crayola bahwa jumlah baris sangat penting di sini. Untuk RF Anda akan membutuhkan setidaknya 3x lebih banyak RAM daripada bobot dataset Anda dan mungkin banyak waktu (jumlah atribut seperti itu biasanya membutuhkan banyak pohon di hutan - dan perhatikan bahwa tidak ada implementasi paralel RF dalam R).
Tentang SVM, saya ragu itu adalah ide yang baik untuk bertarung dengan dimensi 300k sementara Anda mungkin dapat mengembangkan fungsi kernel yang akan setara dengan deskriptor teks Anda.
EDIT: 3k x 30k (nyata) matriks akan menempati sesuatu seperti 7Gb, jadi yang perlu Anda lakukan RF (menggunakan randomForest) pada data ini adalah komputer dengan RAM 16GB, keberuntungan dan sedikit waktu atau hanya komputer dengan 24GB RAM dan waktu yang cukup lama.
sumber
foreach
paket itu cocok denganrandomForest
paket. Saya pikir ada satu contoh seperti itu dalam sketsa untukforeach
. (Atau mungkindoMC
.)randomForest
sedemikian rupa sehingga akan meminta kolom yang dipilih secara acak dari, misalnya, database SQL pada setiap iterasi (sehingga seluruh dimensi 300k tidak akan pernah memiliki berada di ram). Tapi itu mungkin terutama karena saya tahu lebih banyak tentang R daripada tentang opsi lain yang mungkin.