MCPcopy Index your code
hub / github.com/WinVector/Logistic / DataFn

Class DataFn

src/com/winvector/opt/impl/DataFn.java:11–62  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

9
10
11public final class DataFn<T extends ExampleRow> implements VectorFn {
12
13 private final Iterable<? extends T> dat;
14 private final LinearContribution<T> underlying;
15
16 private final class ObsHolder implements ReducibleObserver<T,ObsHolder> {
17 private final VEval r;
18 private final double[] pscratch = new double[underlying.noutcomes()];
19
20 public ObsHolder(final double[] x, final boolean wantGrad, final boolean wantHessian) {
21 r = new VEval(x,wantGrad,wantHessian);
22 }
23
24 @Override
25 public void observe(final T t) {
26 underlying.addTerm(r.x,r.gx!=null,r.hx!=null,t,r,pscratch);
27 }
28
29 @Override
30 public void observe(final ObsHolder o) {
31 r.add(o.r);
32 }
33
34 @Override
35 public ObsHolder newObserver() {
36 return new ObsHolder(r.x,r.gx!=null,r.hx!=null);
37 }
38
39 }
40
41
42
43 public DataFn(final LinearContribution<T> underlying, final Iterable<? extends T> dat) {
44 this.underlying = underlying;
45 this.dat = dat;
46 }
47
48 @Override
49 public int dim() {
50 return underlying.dim();
51 }
52
53
54 @Override
55 public VEval eval(final double[] x, final boolean wantGrad, final boolean wantHessian) {
56 final String logString = "DataFn(" + underlying.getClass().getName() + ")";
57 final ThreadedReducer<T,ObsHolder,ObsHolder> reducer = new ThreadedReducer<T,ObsHolder,ObsHolder>(5,logString);
58 final ObsHolder base = new ObsHolder(x,wantGrad,wantHessian);
59 reducer.reduce(dat,base);
60 return base.r;
61 }
62}

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected