2012-09-19 11 views
13

Uso libsvm in modalità C-SVC con un kernel polinomiale di grado 2 e mi viene richiesto di addestrare SVM multipli. Durante l'addestramento, io sono sempre uno o addirittura entrambi questi avvertimenti per alcune delle SVM che mi alleno:libsvm Shrinking Heuristics

WARNING: using -h 0 may be faster 
* 
WARNING: reaching max number of iterations 
optimization finished, #iter = 10000000 

ho trovato la descrizione per il parametro h:

-h shrinking : whether to use the shrinking heuristics, 0 or 1 (default 1) 

ed io Ho provato a leggere la spiegazione dalla documentazione di libsvm, ma per me è un po 'troppo alto. Qualcuno può per favore fornire una spiegazione per un laico e, forse, alcuni suggerimenti come impostare questo sarebbe utile perché ...? Inoltre, sarebbe utile sapere se impostando questo parametro per tutti gli SVM che mi alleno, potrebbe produrre un impatto negativo sull'accuratezza per quegli SVM che non danno esplicitamente questo avvertimento.

Non sono sicuro di cosa fare dell'altro avviso.

Solo per dare maggiori dettagli: i miei set di allenamento hanno 10 attributi (caratteristiche) e sono costituiti da 5000 vettori.


Aggiornamento:

Nel caso in cui nessun altro è sempre il "numero massimo di iterazioni di raggiungere", che sembra essere causato da problemi di stabilità numerici. Inoltre, questo produrrà un tempo di allenamento molto lento. I kernel polinomiali traggono beneficio dall'uso di tecniche di validazione incrociata per determinare il miglior valore per la regolarizzazione (il parametro C), e, nel caso di kernel polinomiali, per me ha contribuito a tenerlo più piccolo di 8. Inoltre, se il kernel non è omogeneo \ sum (\ gamma x_i s_i + coef0)^d (mi dispiace, LaTeX non è supportato su SO), dove coef0! = 0, quindi la convalida incrociata può essere implementata con una tecnica di ricerca della griglia per gamma e C, poiché, in questo caso, il valore predefinito per gamma (1/number_of_features) potrebbe non essere la scelta migliore. Tuttavia, dai miei esperimenti, probabilmente non vuoi che la gamma sia troppo grande, poiché causerà problemi numerici (sto provando un valore massimo di 8 per esso).

Per ulteriori suggerimenti sui valori possibili per gamma e C, è necessario provare a eseguire griglia.py.

risposta

8

Le euristiche restringenti sono lì per accelerare l'ottimizzazione. Come si dice nelle FAQ, a volte aiutano, ea volte no. Credo che sia una questione di runtime, piuttosto che di convergenza.

Il fatto che l'ottimizzazione raggiunga il numero massimo di iterazioni è tuttavia interessante. Si potrebbe voler giocare con la tolleranza (parametro di costo), o dare un'occhiata ai singoli problemi che causano questo. I set di dati sono grandi?

+0

Grazie per la risposta! Penso che tu abbia ragione riguardo alla riduzione delle euristiche. Aiutano semplicemente ad allenare i modelli più velocemente. –

+0

Per quanto riguarda le iterazioni massime, i miei set di dati contengono 5000 elementi ciascuno. L'allenamento richiede meno di un minuto. Qual è il parametro di costo? È la regolarizzazione? In questo momento sto solo impostandolo su 1, il valore predefinito in libsvm ... –

+0

Oh, dovrei chiarire questo: i miei set di allenamento hanno 10 attributi/caratteristiche e sono costituiti da 5000 vettori. –

Problemi correlati