@Override public final DoubleVector add(double scalar) { DoubleVector newv = new DenseDoubleVector(this.getLength()); for (int i = 0; i < this.getLength(); i++) { newv.set(i, this.get(i) + scalar); } return newv; }
private DenseDoubleVector getProbabilityDistribution(DoubleVector document) { int numClasses = classPriorProbability.getLength(); DenseDoubleVector distribution = new DenseDoubleVector(numClasses); // loop through all classes and get the max probable one for (int i = 0; i < numClasses; i++) { double probability = getProbabilityForClass(document, i); distribution.set(i, probability); } double maxProbability = distribution.max(); double probabilitySum = 0.0d; // we normalize it back for (int i = 0; i < numClasses; i++) { double probability = distribution.get(i); double normalizedProbability = FastMath.exp(probability - maxProbability + classPriorProbability.get(i)); distribution.set(i, normalizedProbability); probabilitySum += normalizedProbability; } // since the sum is sometimes not 1, we need to divide by the sum distribution = (DenseDoubleVector) distribution.divide(probabilitySum); return distribution; }
@Override public DoubleVector divide(double scalar) { if (scalar == 0d) { throw new java.lang.ArithmeticException("/ by zero"); } DenseDoubleVector v = new DenseDoubleVector(this.getLength()); for (int i = 0; i < v.getLength(); i++) { v.set(i, this.get(i) / scalar); } return v; }
/** * @return If the number of outcomes is 2 (binary prediction) the returned * vector contains the class id (0 or 1) at the first index. If not, a * histogram of the classes that were predicted. */ @Override public DoubleVector predict(DoubleVector features) { List<VectorDistanceTuple<DoubleVector>> nearestNeighbours = getNearestNeighbours( features, k); DenseDoubleVector outcomeHistogram = new DenseDoubleVector(numOutcomes); for (VectorDistanceTuple<DoubleVector> tuple : nearestNeighbours) { int classIndex = 0; if (numOutcomes == 2) { classIndex = (int) tuple.getValue().get(0); } else { classIndex = tuple.getValue().maxIndex(); } outcomeHistogram.set(classIndex, outcomeHistogram.get(classIndex) + 1); } if (numOutcomes == 2) { return new SingleEntryDoubleVector(outcomeHistogram.maxIndex()); } else { return outcomeHistogram; } }
@Override public DoubleVector divideFrom(double scalar) { DoubleVector v = new DenseDoubleVector(this.getLength()); for (int i = 0; i < v.getLength(); i++) { if (this.get(i) != 0.0d) { double result = scalar / this.get(i); v.set(i, result); } else { throw new java.lang.ArithmeticException("/ by zero"); } } return v; }
private DenseDoubleVector getProbabilityDistribution(DoubleVector document) { int numClasses = model.getClassPriorProbability().getLength(); DenseDoubleVector distribution = new DenseDoubleVector(numClasses); // loop through all classes and get the max probable one for (int i = 0; i < numClasses; i++) { double probability = getProbabilityForClass(document, i); distribution.set(i, probability); } double maxProbability = distribution.max(); double probabilitySum = 0.0d; // we normalize it back for (int i = 0; i < numClasses; i++) { double probability = distribution.get(i); double normalizedProbability = FastMath.exp(probability - maxProbability + model.getClassPriorProbability().get(i)); distribution.set(i, normalizedProbability); probabilitySum += normalizedProbability; } // since the sum is sometimes not 1, we need to divide by the sum distribution = (DenseDoubleVector) distribution.divide(probabilitySum); return distribution; }
@Override public DoubleVector divideFrom(DoubleVector vector) { DoubleVector v = new DenseDoubleVector(this.getLength()); for (int i = 0; i < v.getLength(); i++) { if (this.get(i) != 0.0d) { double result = vector.get(i) / this.get(i); v.set(i, result); } else { throw new java.lang.ArithmeticException("/ by zero"); } } return v; }
@Override public DoubleVector multiply(double scalar) { DoubleVector v = new DenseDoubleVector(this.getLength()); for (int i = 0; i < v.getLength(); i++) { v.set(i, this.get(i) * scalar); } return v; }
/** * Returns the indices of the relevant items that are above the threshold. */ static int[] filterRelevantItems(DenseDoubleVector relevanceScores, double threshold) { TIntArrayList list = new TIntArrayList(); for (int i = 0; i < relevanceScores.getLength(); i++) { double val = relevanceScores.get(i); if (val > threshold) { list.add(i); } } return list.toArray(); }
@Override public double dot(DoubleVector s) { double dotProduct = 0.0d; if (s.isSparse()) { Iterator<DoubleVectorElement> iterateNonZero = s.iterateNonZero(); while (iterateNonZero.hasNext()) { DoubleVectorElement next = iterateNonZero.next(); dotProduct += this.get(next.getIndex()) * next.getValue(); } } else { for (int i = 0; i < getLength(); i++) { dotProduct += this.get(i) * s.get(i); } } return dotProduct; }
@Override public DoubleVector divide(DoubleVector vector) { DoubleVector v = new DenseDoubleVector(this.getLength()); for (int i = 0; i < v.getLength(); i++) { if (vector.get(i) != 0.0d) { double result = this.get(i) / vector.get(i); v.set(i, result); } else { throw new java.lang.ArithmeticException("/ by zero"); } } return v; }
@Override public DoubleVector multiply(DoubleVector v) { DoubleVector newv = new DenseDoubleVector(this.getLength()); if (v.isSparse()) { Iterator<DoubleVectorElement> iterateNonZero = v.iterateNonZero(); while (iterateNonZero.hasNext()) { DoubleVectorElement next = iterateNonZero.next(); newv.set(next.getIndex(), this.get(next.getIndex()) * next.getValue()); } } else { for (int i = 0; i < v.getLength(); i++) { newv.set(i, this.get(i) * v.get(i)); } } return newv; }
@Override public final DoubleVector subtract(DoubleVector v) { DoubleVector newv = null; if (v.isSparse()) { newv = new DenseDoubleVector(vector); Iterator<DoubleVectorElement> iterateNonZero = v.iterateNonZero(); while (iterateNonZero.hasNext()) { DoubleVectorElement next = iterateNonZero.next(); newv.set(next.getIndex(), this.get(next.getIndex()) - next.getValue()); } } else { newv = new DenseDoubleVector(this.getLength()); for (int i = 0; i < v.getLength(); i++) { newv.set(i, this.get(i) - v.get(i)); } } return newv; }
@Override public final DoubleVector add(DoubleVector v) { DoubleVector newv = null; if (v.isSparse()) { newv = new DenseDoubleVector(vector); Iterator<DoubleVectorElement> iterateNonZero = v.iterateNonZero(); while (iterateNonZero.hasNext()) { DoubleVectorElement next = iterateNonZero.next(); newv.set(next.getIndex(), this.get(next.getIndex()) + next.getValue()); } } else { newv = new DenseDoubleVector(this.getLength()); for (int i = 0; i < v.getLength(); i++) { newv.set(i, this.get(i) + v.get(i)); } } return newv; }