5

我目前正在解决一个问题,我必须解决 L2-regularized 逻辑回归或 L2-reg 线性 SVM 问题,其中我有一个附加的仿射项。

所以我的问题例如是:

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

其中 v 是一个常数向量。

当然这是一个凸问题,可以用通常的方法解决,但是我要解决很多这种类型的大问题,所以我很想用一个标准库,比如liblinear

我的问题是,有没有办法转换数据 x、标签 y 或权重因子 C(可能为每个实例转换为不同的 C_i),这样这个问题就相当于标准的铰链损失 SVM 或逻辑回归问题?

4

2 回答 2

5

我想不出一种方法可以将它变成可以由 liblinear 之类的东西处理的东西。但是,您可以使用通用切割平面优化库之一轻松解决此优化问题。您所要做的就是编写代码来计算次梯度的元素(在您的情况下只是 w + v - C sum_i x_i y_i)和目标的值。然后切割平面例程可以找到最佳 w。

Shogun中有一个 CPA 优化器, dlib中也有一个。我没有使用 Shogun 的版本,但我使用 dlib 中的版本解决了很多问题(我也是 dlib 的作者)。

于 2012-02-08T22:42:41.260 回答
0

如果您的现成训练算法允许您对每个数据点的铰链损失或逻辑回归进行偏差,那么这是可能的。就是这样。

完成最后两项的正方形:

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

然后引入变量的变化

u = w+v/2

您的优化相当于

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

其中,b_i = 1+v'x_i*y_i/2,等价于

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

因此,如果您的训练算法允许您将 1 替换为您为每个数据点选择的 b_i,它就可以解决这个问题。

几乎每个包都会以一种或另一种方式容纳 b_i 。例如,上面等价于

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

(假设 b_i>0)因此,如果您的包裹允许您对每个点进行不同的加权,则可以解决上述问题。

于 2012-11-27T06:45:51.707 回答