|
22 | 22 |
|
23 | 23 | %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% DEFAULT PARAMETERS STARTS %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
|
24 | 24 | DEFAULTS.optimizer = @(lossfcn, xinit)(RarmaSolvers.fmin_LBFGS(lossfcn, xinit, struct('maxiter', 1000)));
|
| 25 | +%options = optimoptions(@fminunc,'GradObj','on') |
| 26 | +%DEFAULTS.optimizer = @(lossfcn, xinit)(fminunc(lossfcn, xinit, options)); |
25 | 27 | DEFAULTS.ardim = 5;
|
26 | 28 | DEFAULTS.init_stepsize = 10;
|
27 | 29 | DEFAULTS.Loss = @RarmaFcns.euclidean_rarma;
|
|
77 | 79 | function [model,obj] = solve_ar()
|
78 | 80 | %% SOLVE_AR
|
79 | 81 | % Solve only for A, since q = 0
|
80 |
| - [A, obj, iter, msg] = RarmaSolvers.lbfgs(@(Avec)(objA(Avec, X, [])), Ainit(:), opts.ar_params); |
| 82 | + [A, obj, iter, msg] = opts.optimizer(@(Avec)(objA(Avec, X, [])), Ainit(:)); |
81 | 83 | model.A = reshape(A, sizeA);
|
82 |
| - model.predict = @(Xstart, Phistart, horizon, opts)(RarmaFcns.iterate_predict_ar(Xstart, model, horizon, opts)); |
| 84 | + model.predict = @(Xstart, horizon, opts)(RarmaFcns.iterate_predict_ar(Xstart, model, horizon, opts)); |
83 | 85 | end
|
84 | 86 |
|
85 | 87 | function [model,obj] = solve_ma()
|
|
88 | 90 | % Note: the code is currently not well-designed to do long-horizon prediction
|
89 | 91 | % with only a moving average models, since future moving average
|
90 | 92 | % components are not imputed; should work, however, for 1-step prediction
|
91 |
| - [Z, obj, iter, msg] = RarmaSolvers.lbfgs(@(Zvec)(objZ(Zvec, zeros(sizeA))), zeros(sizeZ), opts.ar_params); |
| 93 | + [Z, obj, iter, msg] = opts.optimizer(@(Zvec)(objZ(Zvec, zeros(sizeA))), zeros(sizeZ)); |
92 | 94 | model.Z = reshape(Z, sizeZ);
|
93 | 95 | model.A = zeros(sizeA);
|
94 | 96 | if opts.recover == 1
|
95 | 97 | [model.B, model.Epsilon] = recoverModels(Z);
|
96 | 98 | end
|
97 |
| - model.predict = @(Xstart, Phistart, horizon, opts)(RarmaFcns.iterate_predict(Xstart, model, horizon, opts)); |
| 99 | + model.predict = @(Xstart, horizon, ... |
| 100 | + opts)(RarmaFcns.iterate_predict(Xstart, [], model, horizon, opts)); |
98 | 101 | end
|
99 | 102 |
|
100 | 103 |
|
101 | 104 | function [model,obj] = solve_rarma()
|
102 | 105 | %% SOLVE_RARMA
|
103 | 106 | % Solve for A first (with Z = 0), then iterate between Z and A
|
104 | 107 | Z = zeros(sizeZ);
|
105 |
| - [A, obj, iter, msg] =... |
106 |
| - RarmaSolvers.fmin_LBFGS(@(Avec)(objA(Avec, X, Z)), Ainit(:)); |
| 108 | + [A, obj, iter, msg] =opts.optimizer(@(Avec)(objA(Avec, X, Z)), Ainit(:)); |
107 | 109 | A = reshape(A, sizeA);
|
108 | 110 | [Z, prev_obj] = iterateZ(Z,A);
|
109 | 111 |
|
|
170 | 172 | f = f + opts.reg_wgt_ar*f2;
|
171 | 173 | end
|
172 | 174 |
|
173 |
| -% Need to linearize for LBFGS |
| 175 | +% Need to linearize for LBFGS or fminunc |
174 | 176 | function [f,g] = objZ(Zin, A)
|
175 | 177 | %% OBJZ Zin can either be a vector or matrix
|
176 | 178 | % the gradient is returned to be of the same size
|
|
0 commit comments