public static HyperRectangle infiniteHyperRectangle(int dimension) { DoubleVector min = new DenseDoubleVector(dimension); DoubleVector max = new DenseDoubleVector(dimension); for (int i = 0; i < dimension; ++i) { min.set(i, Double.NEGATIVE_INFINITY); max.set(i, Double.POSITIVE_INFINITY); } return new HyperRectangle(min, max); }
static DoubleVector binarize(Random r, DoubleVector v) { for (int j = 0; j < v.getDimension(); j++) { v.set(j, v.get(j) > r.nextDouble() ? 1d : 0d); } return v; }
private void scale(DoubleVector a, double b) { for (int i = 0; i < a.getDimension(); i++) { a.set(i, a.get(i) * b); } }
@Override public DoubleVector divide(double scalar) { DoubleVector result = new SequentialSparseDoubleVector(this); Iterator<DoubleVectorElement> iter = result.iterateNonZero(); while (iter.hasNext()) { DoubleVectorElement e = iter.next(); int index = e.getIndex(); result.set(index, e.getValue() / scalar); } return result; }
@Override public DoubleVector add(double scalar) { DoubleVector v = new SparseDoubleVector(this.dimension, this.vector.size()); Iterator<DoubleVectorElement> it = iterate(); while (it.hasNext()) { DoubleVectorElement e = it.next(); v.set(e.getIndex(), e.getValue() + scalar); } return v; }
@Override public DoubleVector subtract(double scalar) { DoubleVector v = new SparseDoubleVector(this.dimension, this.vector.size()); Iterator<DoubleVectorElement> it = iterate(); while (it.hasNext()) { DoubleVectorElement e = it.next(); v.set(e.getIndex(), e.getValue() - scalar); } return v; }
@Override public DoubleVector add(double scalar) { DoubleVector v = new SparseBitVector(getDimension()); Iterator<DoubleVectorElement> it = iterate(); while (it.hasNext()) { DoubleVectorElement e = it.next(); v.set(e.getIndex(), e.getValue() + scalar); } return v; }
@Override public DoubleVector multiply(double scalar) { DoubleVector v = new SparseBitVector(getDimension()); Iterator<DoubleVectorElement> it = iterateNonZero(); while (it.hasNext()) { DoubleVectorElement e = it.next(); v.set(e.getIndex(), e.getValue() * scalar); } return v; }
private void fixDirectionSigns() { if (l1weight > 0) { for (int i = 0; i < dir.getDimension(); i++) { if (dir.get(i) * steepestDescDir.get(i) <= 0) { dir.set(i, 0); } } } }
@Override public DoubleVector add(DoubleVector other) { DoubleVector result = new SequentialSparseDoubleVector(this); Iterator<DoubleVectorElement> iter = other.iterateNonZero(); while (iter.hasNext()) { DoubleVectorElement e = iter.next(); int index = e.getIndex(); result.set(index, get(index) + e.getValue()); } return result; }
@Override public DoubleVector add(double scalar) { DoubleVector v = new SequentialSparseDoubleVector(dimension, mapping.getNumMappings()); Iterator<DoubleVectorElement> it = iterate(); while (it.hasNext()) { DoubleVectorElement e = it.next(); v.set(e.getIndex(), e.getValue() + scalar); } return v; }
@Override public DoubleVector abs() { DoubleVector v = new SparseDoubleVector(this); Iterator<DoubleVectorElement> it = v.iterateNonZero(); while (it.hasNext()) { DoubleVectorElement e = it.next(); v.set(e.getIndex(), FastMath.abs(e.getValue())); } return v; }
/** * Predicts the outcome of the given input by doing a forward pass. Used for * binary classification by a threshold. Everything above threshold will be * considered as 1, the other case as 0. */ public DoubleVector predict(DoubleVector xi, double threshold) { DoubleVector activations = predict(xi); for (int i = 0; i < activations.getLength(); i++) { activations.set(i, activations.get(i) > threshold ? 1.0d : 0.0d); } return activations; }
@Override public DoubleVector sqrt() { DoubleVector v = new SparseDoubleVector(this.dimension, this.vector.size()); Iterator<DoubleVectorElement> it = iterateNonZero(); while (it.hasNext()) { DoubleVectorElement e = it.next(); v.set(e.getIndex(), FastMath.sqrt(e.getValue())); } return v; }
@Override public DoubleVector abs() { DoubleVector v = new DenseDoubleVector(getLength()); for (int i = 0; i < v.getLength(); i++) { v.set(i, FastMath.abs(vector[i])); } return v; }
@Override public DoubleVector exp() { DoubleVector v = new DenseDoubleVector(getLength()); for (int i = 0; i < v.getLength(); i++) { v.set(i, FastMath.exp(vector[i])); } return v; }
@Override public DoubleVector subtract(DoubleVector other) { DoubleVector result = new SparseDoubleVector(this.vector.fastDeepCopy(), this.getDimension()); Iterator<DoubleVectorElement> iter = other.iterateNonZero(); while (iter.hasNext()) { DoubleVectorElement e = iter.next(); int index = e.getIndex(); result.set(index, result.get(index) - e.getValue()); } return result; }
@Override public DoubleVector divide(DoubleVector vector) { DoubleVector v = new SparseDoubleVector(this.dimension, this.vector.size()); Iterator<DoubleVectorElement> it = iterateNonZero(); while (it.hasNext()) { DoubleVectorElement e = it.next(); v.set(e.getIndex(), e.getValue() / vector.get(e.getIndex())); } return v; }
@Override public DoubleVector divideFrom(DoubleVector vector) { DoubleVector v = new SparseDoubleVector(this.dimension, this.vector.size()); Iterator<DoubleVectorElement> it = vector.iterateNonZero(); while (it.hasNext()) { DoubleVectorElement e = it.next(); v.set(e.getIndex(), e.getValue() / get(e.getIndex())); } return v; }
private void getNextPoint(double alpha) { addMultInto(newX, x, dir, alpha); if (l1weight > 0) { for (int i = 0; i < x.getDimension(); i++) { if (x.get(i) * newX.get(i) < 0.0) { newX.set(i, 0d); } } } }