List of usage examples for org.apache.commons.math3.linear ArrayRealVector ArrayRealVector
public ArrayRealVector(ArrayRealVector v) throws NullArgumentException
From source file:org.lambda3.indra.service.impl.MockedVectorResourceImpl.java
@Override public VectorResponse getVector(VectorRequest request) { Map<String, Map<Integer, Double>> terms = new HashMap<>(); request.getTerms()/* w w w . j a v a 2 s .c o m*/ .forEach(t -> terms.put(t, RealVectorUtil.vectorToMap(new ArrayRealVector(rvg.nextVector())))); return new VectorResponse(request, terms); }
From source file:org.lambda3.indra.service.mock.MockedVectorResourceImpl.java
@Override public VectorResponse getVector(VectorRequest request) { Map<String, Map<Integer, Double>> terms = new HashMap<>(); request.getTerms()//from www. j a v a2 s.co m .forEach(t -> terms.put(t, RealVectorUtil.vectorToMap(new ArrayRealVector(rvg.nextVector())))); VectorResponse response = new SparseVectorResponse(request, terms); return response; }
From source file:org.lenskit.predict.ordrec.OrdRecModel.java
/** * The constructor of OrdRecParameter./*from w w w .ja va2s . co m*/ * It use the quantized values of rating to initialize t1 and beta. * Each threshold is initialized as the mean of two contiguous rating values. * Since the index of quantizer is always an successive non-negative integer * begin from 0, so t1 will initialize as 0.5, and the interval between two * thresholds will be 1. * @param qtz The quantizer for ratings */ OrdRecModel(Quantizer qtz) { qtzValues = qtz.getValues(); levelCount = qtzValues.getDimension(); t1 = (qtzValues.getEntry(0) + qtzValues.getEntry(1)) / 2; beta = new ArrayRealVector(levelCount - 2); double tr = t1; for (int i = 1; i <= beta.getDimension(); i++) { double trnext = (qtzValues.getEntry(i) + qtzValues.getEntry(i + 1)) * 0.5; beta.setEntry(i - 1, Math.log(trnext - tr)); tr = trnext; } }
From source file:org.lenskit.predict.ordrec.OrdRecRatingPredictor.java
/** * The train function of OrdRec. Get all parameters after learning process. *//*from www . j a va 2s .co m*/ @SuppressWarnings("ConstantConditions") private void trainModel(OrdRecModel model, SparseVector ratings, MutableSparseVector scores) { RealVector beta = model.getBeta(); RealVector deltaBeta = new ArrayRealVector(beta.getDimension()); double dt1; // n is the number of iteration; for (int j = 0; j < iterationCount; j++) { for (VectorEntry rating : ratings) { long iid = rating.getKey(); double score = scores.get(iid); int r = quantizer.index(rating.getValue()); double probEqualR = model.getProbEQ(score, r); double probLessR = model.getProbLE(score, r); double probLessR_1 = model.getProbLE(score, r - 1); double t1 = model.getT1(); dt1 = learningRate / probEqualR * (probLessR * (1 - probLessR) * dBeta(r, 0, t1) - probLessR_1 * (1 - probLessR_1) * dBeta(r - 1, 0, t1) - regTerm * t1); double dbetaK; for (int k = 0; k < beta.getDimension(); k++) { dbetaK = learningRate / probEqualR * (probLessR * (1 - probLessR) * dBeta(r, k + 1, beta.getEntry(k)) - probLessR_1 * (1 - probLessR_1) * dBeta(r - 1, k + 1, beta.getEntry(k)) - regTerm * beta.getEntry(k)); deltaBeta.setEntry(k, dbetaK); } model.update(dt1, deltaBeta); } } }
From source file:org.lenskit.predict.ordrec.OrdRecRatingPredictor.java
@Nonnull private ResultMap computePredictions(long user, @Nonnull Collection<Long> items, boolean includeDetails) { logger.debug("predicting {} items for {}", items.size(), user); SparseVector ratings = makeUserVector(user, userEventDao); LongSet allItems = new LongOpenHashSet(ratings.keySet()); allItems.addAll(items);/*from www . j av a 2s.c o m*/ ResultMap baseResults = null; Map<Long, Double> scores; if (includeDetails) { baseResults = itemScorer.scoreWithDetails(user, allItems); scores = baseResults.scoreMap(); } else { scores = itemScorer.score(user, allItems); } MutableSparseVector scoreVector = MutableSparseVector.create(scores); OrdRecModel params = new OrdRecModel(quantizer); trainModel(params, ratings, scoreVector); logger.debug("trained parameters for {}: {}", user, params); RealVector probabilities = new ArrayRealVector(params.getLevelCount()); List<Result> results = new ArrayList<>(); LongIterator iter = LongIterators.asLongIterator(items.iterator()); while (iter.hasNext()) { final long item = iter.nextLong(); double score = scoreVector.get(item, Double.NaN); if (Double.isNaN(score)) { continue; } params.getProbDistribution(score, probabilities); int mlIdx = probabilities.getMaxIndex(); double pred = quantizer.getIndexValue(mlIdx); if (includeDetails) { results.add(new FullResult(baseResults.get(item), pred, new ArrayRealVector(probabilities))); } else { results.add(Results.create(item, pred)); } } return Results.newResultMap(results); }
From source file:org.lenskit.transform.quantize.PreferenceDomainQuantizer.java
static RealVector makeValues(PreferenceDomain domain) { if (!domain.hasPrecision()) { throw new IllegalArgumentException("domain is not discrete"); }/*from ww w . j a va 2 s . c o m*/ final double min = domain.getMinimum(); final double max = domain.getMaximum(); final double prec = domain.getPrecision(); final double nv = (max - min) / prec; int n = (int) nv; if (Math.abs(nv - n) > 1.0e-6) { n += 1; // one more to cover everything... } if (n == 0) { throw new IllegalArgumentException("range has no elements"); } double[] values = new double[n + 1]; for (int i = 0; i <= n; i++) { values[i] = min + (prec * i); } return new ArrayRealVector(values); }
From source file:org.lenskit.transform.quantize.PreferenceDomainQuantizerTest.java
@Test public void testMakeValues() { RealVector vals = PreferenceDomainQuantizer.makeValues(domain); RealVector evals = new ArrayRealVector(new double[] { 0.5, 1.0, 1.5, 2.0, 2.5, 3.0, 3.5, 4.0, 4.5, 5.0 }); assertThat(vals.getDimension(), equalTo(evals.getDimension())); for (int i = 0; i < vals.getDimension(); i++) { assertThat("element " + i, vals.getEntry(i), closeTo(evals.getEntry(i), 1.0e-6)); }/*w w w . j ava 2 s.co m*/ }
From source file:org.lenskit.transform.quantize.ValueArrayQuantizer.java
/** * Construct a new quantizer using the specified array of values. * * @param vs The discrete values to quantize to. *///from w w w. ja v a 2 s. c o m public ValueArrayQuantizer(double[] vs) { Preconditions.checkArgument(vs.length > 0, "must have at least one value"); values = new ArrayRealVector(vs); }
From source file:org.lenskit.transform.quantize.ValueArrayQuantizer.java
public ValueArrayQuantizer(RealVector vs) { Preconditions.checkArgument(vs.getDimension() > 0, "must have at least one value"); values = new ArrayRealVector(vs); }
From source file:org.lenskit.util.math.RowView.java
@Override public RealVector append(RealVector v) { return new ArrayRealVector(this).append(v); }