2013-04-09 21 views
12

Muovendo dalle Invalid probability model for large support vector machines using ksvm in R:Linea ricerca fallisce nella formazione ksvm prob.model

mi alleno uno SVM utilizzando ksvm dal pacchetto kernlab in R. Voglio utilizzare il modello di probabilità, ma durante la sigma raccordo ottengo il seguente messaggio di errore:

line search fails -1.833726 0.5772808 5.844462e-05 5.839508e-05 -1.795008e-08 
-1.794263e-08 -2.096847e-12 

Quando questo accade, il valore risultante di prob.model(m) è un vettore di tutte le probabilità, piuttosto che i parametri attesi di una funzione sigmoidale calzato su queste probabilità. Cosa causa questo errore e come posso prevenirlo? La ricerca del messaggio di errore non ha prodotto risultati.

esempio riproducibile:

load(url('http://roelandvanbeek.nl/files/df.rdata')) 
ksvm(label~value,df[1:1000],C=10,prob.model=TRUE)->m 
prob.model(m) # works as it should, prints a list containing one named list 

# the below, non-working problem, unfortunately takes an hour due to the large 
# sample size 
ksvm(label~value,df,C=10,prob.model=TRUE)->m # line search fails 
prob.model(m) # just a vector of values 
+0

Sei riuscito a capirlo? –

+4

No. Ho scoperto che si verifica anche con insiemi di dati più piccoli, ma non è ancora stato possibile trovare una spiegazione coerente. Spesso, riducendo o aumentando il numero di osservazioni si risolve il problema, che aggiunge all'irregolarità della sua natura ... – roelandvanbeek

+0

@roelandvanbeek, vedo il problema quando provo a tracciare la curva di apprendimento per il mio set di dati, ma quando corro solo per alcune divisioni 70/30 ad esempio, non mostra il problema? è questo che intendi riducendo o aumentando le osservazioni? –

risposta

1

Guardando il codice sorgente, this is the line that throws that error.

È sul metodo .probPlatt utilizzando il metodo Newton per ottimizzare la funzione, in questo caso il ridimensionamento di Platt. Se si controlla line 3007 sebbene si vedano alcuni parametri relativi al metodo.

Uno di questi parametri è minstep in pratica il passo numerico minimo il metodo dovrebbe continuare a cercare di ottimizzare la funzione. Vedete, questa è esattamente la condizione dell'errore nella riga 3090: if (stepsize < minstep). Quindi, in sostanza, la funzione non converge, anche quando si raggiunge la dimensione minima del passo.

Si può provare a cambiare minstep per abbassare i valori per aggirarlo. Alexandros ha anche commentato che questi parametri dovrebbero probabilmente essere nell'interfaccia.

+0

stai dicendo che dovremmo cambiare il codice e ricompilarlo? –

+0

@EB Sì, riguardo alla modifica del codice, tuttavia la ricompilazione non è strettamente necessaria. –

Problemi correlati