2012-04-30 5 views
5

"grid.py" di libsvm tenta di ottimizzare solo due parametri "c" e "g" di svm-train. Volevo estendere "grid.py" per ottimizzare altri parametri (ad esempio "r" o "d") eseguendo "grid.py" ancora e ancora per diversi parametri. Ho alcune domande
1. Esiste già uno script in grado di ottimizzare i parametri diversi da "c" e "g"?
2. Quali parametri sono più cruciali e quali sono il range massimo/minimo. A volte cambiare/ottimizzare un parametro ottimizza automaticamente altri parametri. È il caso dei parametri svm-train?
svm-train altri parametri ottimizzazione

risposta

11

Per quanto ne so non esiste uno script che faccia questo, tuttavia non vedo perché grid.py non possa essere facilmente esteso per farlo. Tuttavia, non penso che ne valga la pena.

Prima di tutto, è necessario scegliere il proprio kernel. Questo è un parametro in sé. Ogni kernel ha un diverso set di parametri, e si esibirà in modo diverso, quindi per confrontare i kernel dovrai ottimizzare i parametri di ogni kernel.

C, il parametro costo è un parametro generale che si applica a SVM stesso. Gli altri parametri sono tutti input per la funzione del kernel. C controlla il compromesso tra margine ampio e più punti di allenamento classificati in modo errato (ma un modello che può generalizzare meglio i dati futuri) e un margine ristretto che si adatta meglio ai punti di allenamento, ma può essere sovraffollato con i dati di addestramento.

In genere, i due kernel più utilizzati sono lineari (che non richiede parametri) e il kernel RBF.

Il kernel RBF accetta il parametro gamma. Questo deve essere ottimizzato, il suo valore influenzerà significativamente le prestazioni.

Se si utilizza il kernel Polynomial, d è il parametro principale, lo si ottimizzerebbe. Non ha senso modificare gli altri parametri da quelli predefiniti a meno che non si abbia una ragione matematica per cui fare ciò si adatta meglio ai dati. Secondo la mia esperienza il kernel polinomiale può dare buoni risultati, ma un minuscolo aumento se c'è sopra il kernel RBF a un enorme costo computazionale.

Simile al kernel sigmoid, gamma è il parametro principale, ottimizzarlo e lasciare il coef0 al valore predefinito, a meno che non si abbia una buona comprensione del motivo per cui ciò si adatta meglio ai dati.

Quindi il motivo per cui grid.py non ottimizza altri parametri è perché nella maggior parte dei casi è semplicemente inutile e generalmente non si tradurrà in un miglioramento delle prestazioni. Per quanto riguarda la seconda domanda: No, non è questo il caso in cui l'ottimizzazione ottimizzerà l'altra. I valori ottimali di questi parametri sono specifici per il set di dati. La modifica del valore dei parametri del kernel influirà sul valore ottimale di C. Ecco perché è consigliabile una ricerca della griglia. Aggiungere questi parametri extra alla tua ricerca aumenterà significativamente il tempo necessario e difficilmente ti darà un aumento delle prestazioni del classificatore.

+0

vuoi dire con D è laurea giusto? dove posso trovare informazioni su quali parametri sono essenziali per quali kernel? quindi non perderei tempo con parametri inutili. ty – MonsterMMORPG