我正在测试RISO的L-BFGS库的实现,以便在Java中进行逻辑回归的函数最小化。 Here是我正在使用的课程的链接。
为了测试库,我试图最小化函数:
f(x) = 2*(x1^2) + 4*x2 + 5
库需要我实现的目标和梯度函数,如下所示:
/**
The value of the objective function, given variable assignments
x. This is specific to your problem, so you must override it.
Remember that LBFGS only minimizes, so lower is better.
**/
public double objectiveFunction(double[] x) throws Exception {
return (2*x[0]*x[0] + 3*x[1] + 1);
}
/**
The gradient of the objective function, given variable assignments
x. This is specific to your problem, so you must override it.
**/
public double[] evaluateGradient(double[] x) throws Exception {
double[] result = new double[x.length];
result[0] = 4 * x[0];
result[1] = 3;
return result;
}
使用目标函数和渐变的此实现运行代码会给出以下异常:
Exception in thread "main" Line search failed. See documentation of routine mcsrch.
Error return of line search: info = 3 Possible causes:
function or gradient are incorrect, or incorrect tolerances. (iflag == -1)
我没有更改默认值的公差。我做错了什么?
答案 0 :(得分:1)
我认为您的费用函数不是最小值,因为x2
可以达到-Inf
,并且渐变算法找不到它。
它是x1的二次函数,但不是x2的二次函数。我怀疑异常被抛出,因为梯度算法找不到最优解,并且它'认为'问题是容差系数没有正确设置,或者梯度函数是错误的
你的目标函数是指f(x) = 2*(x^2) + 3*x + 1
吗?