Quale kernel SVM utilizzare per un problema di classificazione binaria?


9

Sono un principiante quando si tratta di supportare macchine vettoriali. Ci sono alcune linee guida che dicono quale kernel (ad esempio lineare, polinomiale) è più adatto per un problema specifico? Nel mio caso, devo classificare le pagine Web in base al fatto che contengano o meno alcune informazioni specifiche, ovvero ho un problema di classificazione binaria.

Puoi dire in generale quale kernel è più adatto a questo compito? O devo provarne molti nel mio set di dati specifico per trovare quello migliore? A proposito, sto usando la libreria Python scikit-learn che utilizza la libreria libSVM.


come stai rappresentando le tue pagine web? sacco di parole? La scelta del kernel dipende dalla misura di somiglianza desiderata nello spazio di input.
Memming

@Memming Sì, sto usando una rappresentazione bag-of-words. Cosa intendi esattamente per misura di somiglianza? Sto studiando se una pagina web contiene o meno un tipo specifico di informazioni.
pemistahl,

Questo tutorial potrebbe essere utile se non lo hai già verificato ( csie.ntu.edu.tw/~cjlin/papers/guide/guide.pdf ). Libsvm ha uno schema di convalida incrociata k-fold integrato per scegliere tra modelli e parametri del modello.
Zoran,

@PeterStahl Inoltre, dipende dal tipo di limiti di classe che ti aspetti. Non ho esperienza con lo spazio bag-of-word, quindi non posso aiutarti molto.
Memming

Risposte:


10

In realtà hai colto una domanda aperta in letteratura. Come dici tu, ci sono una varietà di kernel (ad esempio, lineare, funzione di base radiale, sigmoide, polinomiale) e eseguiranno il tuo compito di classificazione in uno spazio definito dalle rispettive equazioni. Per quanto ne sappia, nessuno ha definitivamente dimostrato che un kernel si comporta sempre meglio su un tipo di compito di classificazione del testo rispetto a un altro.

Una cosa da considerare è che ogni funzione del kernel ha 1 o più parametri che dovranno essere ottimizzati per il tuo set di dati, il che significa che, se lo stai facendo correttamente, dovresti avere una seconda raccolta di training su cui puoi investigare i migliori valori per questi parametri. (Dico una seconda raccolta, perché dovresti già averne una che stai usando per capire le migliori caratteristiche di input per il tuo classificatore.) Ho fatto un esperimento qualche tempo fa in cui ho fatto un'ottimizzazione su larga scala di ciascuno di questi parametri per un semplice compito di classificazione testuale e hanno scoperto che ciascun kernel sembrava funzionare abbastanza bene, ma lo ha fatto con diverse configurazioni. Se ricordo bene i miei risultati, sigmoid ha ottenuto i risultati migliori, ma lo ha fatto con parametri molto specifici - quelli che mi hanno impiegato più di un mese a trovare la mia macchina.


Grazie mille per i tuoi pensieri. Ci scusiamo per la mia reazione tardiva. Sto scrivendo la mia tesi di laurea al momento per la quale ho bisogno di valutare i risultati per diversi classificatori, non solo SVM. Sfortunatamente, non ho tempo di testare molte combinazioni di parametri. Ecco perché probabilmente mi atterrerò al kernel lineare.
pemistahl,

In bocca al lupo! Penso che sia una buona chiamata.
Kyle.

7

Prova il kernel gaussiano.

Il kernel gaussiano viene spesso provato per primo e risulta essere il miglior kernel in molte applicazioni (anche con le funzionalità bag-of-word). Dovresti provare anche il kernel lineare. Non aspettatevi che dia buoni risultati, i problemi di classificazione del testo tendono ad essere non lineari. Ma ti dà una sensazione per i tuoi dati e puoi essere felice di quanto la non linearità migliora i tuoi risultati.

Assicurati di convalidare correttamente la larghezza del kernel e pensa a come vuoi normalizzare le tue funzionalità (tf-idf ecc.).

Direi che puoi migliorare i tuoi risultati con una migliore normalizzazione delle funzionalità piuttosto che con la scelta di un kernel diverso (cioè non il gaussiano).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.