5

Attualmente sto lavorando su un problema in cui devo risolvere una regressione logistica L2-regolarizzata o un problema SVM lineare L2-reg, dove ho un termine affine aggiunto.Aggiunta di un termine affine a SVM lineare/funzione obiettivo di regressione logistica

Quindi il mio problema, per esempio è:

min_ w {C*sum_i max(1-w*x_i*y_i,0) + 0.5*||w||^2_2 + w * v } 

dove v è un vettore costante.

Naturalmente questo è un problema convessa e può essere risolto con i metodi usuali, ma devo risolvere molti grandi problemi di questo tipo, quindi sarebbe molto desidera utilizzare una libreria standard come liblinear.

La mia domanda è, c'è un modo per trasformare i dati x, le etichette y, o il fattore di pesatura C (forse in un C_i diverso per ogni istanza), in modo tale che questo problema sia equivalente a un cardine standard- perdita SVM o problema di regressione logistica?

risposta

5

Non riesco a pensare a un modo per trasformarlo in qualcosa che può essere elaborato da qualcosa come liblinear. Tuttavia, è possibile risolvere facilmente questo problema di ottimizzazione con una delle librerie di ottimizzazione del piano di taglio di uso generale. Tutto quello che devi fare è scrivere codice per calcolare un elemento del subgradiente (che è solo w + v - C sum_i x_i y_i nel tuo caso) e il valore dell'obiettivo. Quindi una routine di piano di taglio può trovare il w ottimale.

C'è un ottimizzatore CPA in Shogun e uno in dlib. Non ho usato la versione di Shogun ma ho usato quello in dlib per molti problemi (sono anche l'autore di dlib).

0

È possibile che l'algoritmo di allenamento predefinito ti consenta di pregiudicare la perdita di cerniera o la regressione logistica per ciascun punto di dati. Ecco come.

completare il quadrato sulle ultime due termini:

0.5 ||w||^2 + w'v 
= 0.5 ||w+v/2||^2 - v'v/2 

poi introdurre il cambio di variabili

u = w+v/2 

L'ottimizzazione è quindi equivalente a

min_u C*sum_i max(1-(u-v/2)*x_i*y_i,0) + 0.5*||u||^2_2 

che, con b_i = 1 + v'x_i * y_i/2, è equivalente a

min_u C*sum_i max(b_i - u*x_i*y_i ,0) + 0.5*||u||^2_2 

Quindi, se il tuo algoritmo di allenamento ti consente di sostituire 1 con un b_i di tua scelta per ogni punto di dati, può risolvere questo problema.

Quasi ogni pacchetto ospiterà b_i in un modo o nell'altro. Ad esempio, quanto sopra è equivalente a

min_u C*sum_i b_i max(1 - u*x_i*y_i/b_i ,0) + 0.5*||u||^2_2 

(supponendo b_i> 0) in modo che la confezione permette peso ogni punto diverso, è possibile risolvere il problema di cui sopra.

Problemi correlati