Example usage for org.apache.commons.math3.linear ArrayRealVector ArrayRealVector

List of usage examples for org.apache.commons.math3.linear ArrayRealVector ArrayRealVector

Introduction

In this page you can find the example usage for org.apache.commons.math3.linear ArrayRealVector ArrayRealVector.

Prototype

public ArrayRealVector(ArrayRealVector v) throws NullArgumentException 

Source Link

Document

Construct a vector from another vector, using a deep copy.

Usage

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);
}