Saya menggunakan libsvm dan saya perhatikan bahwa setiap kali saya memanggil svmtrain (), saya membuat model baru dan sepertinya tidak ada pilihan untuk memasukkan data ke dalam model yang sudah ada. Apakah ini mungkin dilakukan? Apakah saya tidak melihat aspek ini di libsvm?
14
Jawaban:
Kedengarannya Anda sedang mencari algoritma pembelajaran "tambahan" atau "online". Algoritma ini memungkinkan Anda memperbarui classifier dengan contoh baru, tanpa melatih ulang semuanya dari awal.
Ini pasti mungkin dengan mesin-mesin vektor dukungan, meskipun saya percaya libSVM saat ini tidak mendukungnya. Mungkin ada baiknya melihat beberapa paket lain yang menawarkannya, termasuk
PS: @Bogdanovist: Ada literatur yang cukup luas tentang ini. kNN jelas dan sepele tambahan. Seseorang dapat mengubah (beberapa) pengklasifikasi bayesian menjadi pengklasifikasi tambahan dengan menyimpan jumlah alih-alih probabilitas. STAGGER, AQ * dan beberapa (tetapi tidak semua) dari keluarga ID * algoritma pohon keputusan juga tambahan, dari atas kepala saya.
sumber
Sebagian besar utilitas SVM online / incremental adalah untuk kernel linier dan saya kira itu tidak sesulit seperti untuk kernel non-linear.
Beberapa alat SVM Online / incremental terkenal saat ini tersedia:
+ Leon Bottous's LaSVM : Ini mendukung kernel linear dan non-linear. Kode C ++
+ LaRank Bordes : Mendukung kernel linear dan non-linear. Kode C ++. Tampaknya tautannya terputus sekarang :-(
+ Gert Cauwenberghs kode incremental dan decremental : mendukung kernel linier dan nonlinear. Kode Matlab.
+ Incremental SVM Learning Chris Diehl : mendukung kernel linear dan non-linear. Kode Matlab.
+ Alistair Shilton's SVMHeavy : Hanya klasifikasi dan regresi biner. C ++ kode
+ OnlineSVR Francesco Parrella: Hanya Regresi. Matlab dan C ++.
+ Pegasos : Baik linier dan nonlinear. Kode C dan Matlab. Antarmuka java .
+ Langford's Vowpal Wabbit : Tidak yakin :-(
+ MCSVM Koby Crammer : Baik kode linier dan non-linier. C
Daftar yang lebih baru dapat ditemukan pada jawaban Quora saya .
sumber
Kemungkinan lain adalah alpha-seeding . Saya tidak tahu apakah libSVM mendukungnya. Idenya adalah untuk membagi sejumlah besar data pelatihan menjadi potongan-potongan. Kemudian Anda melatih SVM pada chunk pertama. Karena vektor dukungan yang dihasilkan tidak lain adalah beberapa sampel data Anda, Anda mengambilnya dan menggunakannya untuk melatih SVM Anda dengan potongan berikutnya. Juga, Anda menggunakan SVM itu untuk menghitung estimasi awal dari nilai alpha untuk iterasi berikutnya (seeding). Oleh karena itu, manfaatnya ada dua: masing-masing masalah lebih kecil dan melalui inisialisasi cerdas mereka bertemu lebih cepat. Dengan cara ini Anda menyederhanakan masalah besar menjadi pemecahan berurutan serangkaian langkah sederhana.
sumber
Pilihan lain jika Anda mencari solusi "tambahan" dapat ditemukan di sini ...
Liblinear Incremental
Perpanjangan LIBLINEAR yang memungkinkan pembelajaran tambahan.
sumber