Apakah mungkin untuk menambahkan data pelatihan ke model SVM yang ada?

14

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?

mugetsu
sumber
Saya tidak yakin apa yang Anda maksud dengan 'memasukkan data ke model yang sudah ada'? Bisakah Anda memberi contoh beberapa teknik lain (bukan SVM) yang memungkinkan Anda melakukan ini? Ambil contoh regresi logistik; jika Anda menambahkan data baru, Anda akan mendapatkan serangkaian koefisien baru yang dilatih ulang pada perangkat yang ada tanpa referensi data mana yang 'baru' atau 'lama', semuanya hanya data pelatihan. Saya kira jika Anda menggunakan pemecah tipe gradient descent, Anda dapat menghemat waktu dengan menginisialisasi pada nilai yang dioptimalkan sebelumnya, yang mungkin akan dekat dengan solusi baru. Apakah ini yang Anda maksud?
Bogdanovist

Jawaban:

17

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.

Matt Krause
sumber
1
Menarik, terima kasih atas perhatiannya. Saya telah melihat istilah 'online' dibumbui sebelumnya, tetapi belum menyadari signifikansi teknis (saya pikir secara harfiah berarti 'can haz internetz').
Bogdanovist
Senang untuk membantu! Saya seharusnya menyebutkan ini di atas, tetapi beberapa algoritma online / incremental sebenarnya memberi bobot lebih pada contoh "terbaru", yang mungkin atau mungkin tidak berguna, tergantung pada aplikasi Anda (misalnya, bagus untuk memprediksi topik twitter, kurang bagus untuk kanker penelitian).
Matt Krause
12

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 .

rahulkmishra
sumber
(+1) Selamat datang di situs ini. Itu daftar yang lengkap! :)
kardinal
4

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.

jpmuc
sumber
apakah ada perpustakaan di luar sana yang menerapkan metode ini?
d.putto
rupanya libsvm sudah melakukannya, atau setidaknya beberapa varian dari algoritma work.caltech.edu/~htlin/program/libsvm
jpmuc
1

Pilihan lain jika Anda mencari solusi "tambahan" dapat ditemukan di sini ...

Liblinear Incremental

Perpanjangan LIBLINEAR yang memungkinkan pembelajaran tambahan.

Chantz Besar
sumber