Saya memiliki dataset yang berisi ~ 100.000 sampel dari 50 kelas. Saya telah menggunakan SVM dengan kernel RBF untuk melatih dan memprediksi data baru. Masalahnya adalah dataset cenderung condong ke kelas yang berbeda.
Misalnya, Kelas 1 - 30 (masing-masing 3%), Kelas 31 - 45 (~ masing-masing 0,6%), Kelas 46 - 50 (masing-masing ~ 0,2%)
Saya melihat bahwa model cenderung sangat jarang memprediksi kelas-kelas yang lebih jarang terjadi di set pelatihan, meskipun set tes memiliki distribusi kelas yang sama dengan set pelatihan.
Saya sadar bahwa ada teknik seperti 'undersampling' di mana kelas mayoritas diturunkan ke kelas minor. Namun, apakah ini berlaku di sini di mana ada begitu banyak kelas yang berbeda? Apakah ada metode lain untuk membantu menangani kasus ini?
sumber
Saya bukan ekspor dalam menggunakan SVM, tetapi biasanya (jika Anda menggunakan perpustakaan pembelajaran mesin seperti Python
scikit-learn
atau Rlibsvm
, adaclass_weight
parameter, atauclass.weights
, masing-masing.Atau jika Anda akan menggunakan pengklasifikasi Bayes, Anda akan mempertimbangkan "condong" ini melalui probabilitas "prior (class)" P (ω j )
sumber
Mengenai pendekatan, SVM dengan kernel RBF melakukan pekerjaan dengan baik, tetapi SVM dapat diperlambat oleh ukuran objek besar, kecuali jika Anda menggunakan CV dengan misalnya sepersepuluh dari data yang secara acak ditugaskan untuk setiap lipatan. Namun, apakah Anda bertanya pada diri sendiri mengapa Anda menggunakan SVM sejak awal?
Sudahkah Anda mencoba regresi linier multivariat, , di mana setiap catatan dikodekan jika objek ke- ada di class , dan sebaliknya? Jika akurasi klasifikasi cukup tinggi menggunakan regresi linier, maka data Anda terpisah secara linear, dan metode yang lebih kompleks seperti SVM dan JST tidak diperlukan. Langkah 2 akan menunjukkan bahwa tetangga terdekat k, naif Bayes, analisis diskriminan linear (Fisher), regresi logistik politomous, dll., Rusak dan gagal.Y = X β Y ysaya j= + 1 saya j ysaya j= - 1
Untuk terminologi, Anda mungkin membahas masalah memiliki lebih banyak bobot kelas dalam konteks "proporsi objek yang lebih rendah di kelas tertentu," atau "ukuran kelas hampir nol." Cenderung cenderung digunakan untuk menggambarkan distribusi nilai-nilai fitur, seperti pada kemiringan, ekor gemuk, dll.
Berapa banyak fitur yang Anda miliki? Apakah Anda mencoba pengelompokan tanpa pengawasan (penemuan kelas) pada 100.000 objek sebelum mencoba klasifikasi yang diawasi (prediksi kelas) dengan SVM? Mungkin 100.000 objek dapat dikelompokkan ke dalam kurang dari 50 kelas, yang keanggotaan kelas baru dapat digunakan sebagai kelas target selama analisis klasifikasi. Ini dapat meringankan masalah memiliki ukuran kelas yang hampir nol.
sumber
Saya telah menghadapi masalah ini berkali-kali saat menggunakan SVM dengan kernel Rbf. Menggunakan kernel Linear dan bukan kernel Rbf memecahkan masalah saya, tetapi saya berurusan dengan jumlah kelas yang lebih sedikit. Hasilnya kurang miring dan lebih akurat dengan kernel linear. Semoga ini bisa menyelesaikan masalah Anda.
Sunting: Ketika saya menulis jawaban asli saya cukup naif untuk tidak mempertimbangkan bobot kelas sebagai salah satu dari mereka menjawab dengan benar. Juga, saat menggunakan rbf kernel, penting untuk memastikan bahwa parameter penalti atau nilai 'C' sesuai modul svm sklearn terlalu umum. Saya menemukan bahwa nilai default C = 1 terlalu umum sebagian besar waktu dan saya biasanya berakhir dengan nilai C = 10000. Semoga ini bisa membantu orang lain yang mendapatkan hasil yang miring dengan svm (rbf) meskipun memiliki distribusi kelas yang baik dalam data.
sumber