5

Actualmente estoy trabajando en un problema donde tengo que resolver una regresión logística regularizada en L2 o un problema de SVM lineal en L2, donde tengo un término afín agregado.Agregar un término afín a función de objetivo de regresión logística/SVM lineal

Así que mi problema es por ejemplo:

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

donde v es un vector constante.

Por supuesto, esto es un problema convexo y se puede solucionar con los métodos habituales, pero tengo que resolver muchos de los grandes problemas de este tipo, por lo que les gustaría mucho usar una biblioteca estándar como LIBLINEAR.

Mi pregunta es, ¿hay alguna manera de transformar los datos x, las etiquetas y, o el factor de pesaje C (quizás en un C_i diferente para cada instancia), de modo que este problema sea equivalente a una bisagra estándar- Pérdida SVM o problema de regresión logística?

Respuesta

5

No puedo pensar en una forma de convertirlo en algo que pueda ser procesado por algo como liblinear. Sin embargo, podría resolver fácilmente este problema de optimización con una de las bibliotecas de optimización de planos de corte de uso general. Todo lo que tiene que hacer es escribir código para calcular un elemento del subgrado (que es solo w + v - C sum_i x_i y_i en su caso) y el valor del objetivo. Luego, una rutina de plano de corte puede encontrar la w óptima.

Hay un optimizador de CPA en Shogun y también uno en dlib. No he usado la versión de Shogun, pero he usado la de dlib para muchos problemas (también soy el autor de dlib).

0

Es posible si su algoritmo de entrenamiento estándar le permite polarizar la pérdida de bisagra o la regresión logística para cada punto de datos. Así es cómo.

Completar el cuadrado en los últimos dos términos:

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

continuación, introducir el cambio de variable

u = w+v/2 

su optimización es entonces equivalente a

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

que con b_i = 1 + v'x_i * y_i/2, es equivalente a

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

Por lo tanto, si su algoritmo de entrenamiento le permite reemplazar 1 con un b_i de su elección para cada punto de datos, puede resolver este problema.

Casi todos los paquetes acomodarán b_i de una forma u otra. Por ejemplo, lo anterior es equivalente a

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

(suponiendo b_i> 0) por lo que si su paquete le permite ponderar cada punto de manera diferente, se puede resolver el problema anterior.

Cuestiones relacionadas