List of usage examples for org.apache.commons.math3.linear RealVector getDimension
public abstract int getDimension();
From source file:org.lambda3.indra.core.impl.DiceClient.java
@Override protected double sim(RealVector r1, RealVector r2, boolean sparse) { if (r1.getDimension() != r2.getDimension()) { return 0; }/*from ww w.ja va2s . co m*/ double min = 0.0; double sum = 0.0; for (int i = 0; i < r1.getDimension(); ++i) { if (r1.getEntry(i) > r2.getEntry(i)) { min += r2.getEntry(i); } else { min += r1.getEntry(i); } sum += r1.getEntry(i) + r2.getEntry(i); } if (sum == 0) { return 0; } double result = 2 * min / sum; return Math.abs(result); }
From source file:org.lambda3.indra.core.impl.Jaccard2Client.java
@Override protected double sim(RealVector r1, RealVector r2, boolean sparse) { if (r1.getDimension() != r2.getDimension()) { return 0; }/*from ww w.j a v a2s . com*/ double min = 0.0; double max = 0.0; for (int i = 0; i < r1.getDimension(); ++i) { if (r1.getEntry(i) > r2.getEntry(i)) { min += r2.getEntry(i); max += r1.getEntry(i); } else { min += r1.getEntry(i); max += r2.getEntry(i); } } if (max == 0) { return 0; } return Math.abs(min / max); }
From source file:org.lambda3.indra.core.impl.JensenShannonClient.java
@Override protected double sim(RealVector r1, RealVector r2, boolean sparse) { if (r1.getDimension() != r2.getDimension()) { return 0; }/*from www. j ava2s . c om*/ double divergence = 0.0; double avr = 0.0; for (int i = 0; i < r1.getDimension(); ++i) { avr = (r1.getEntry(i) + r2.getEntry(i)) / 2; if (r1.getEntry(i) > 0.0 && avr > 0.0) { divergence += r1.getEntry(i) * Math.log(r1.getEntry(i) / avr); } } for (int i = 0; i < r2.getDimension(); ++i) { avr = (r1.getEntry(i) + r2.getEntry(i)) / 2; if (r2.getEntry(i) > 0.0 && avr > 0.0) { divergence += r1.getEntry(i) * Math.log(r2.getEntry(i) / avr); } } double result = 1 - (divergence / (2 * Math.sqrt(2 * Math.log(2)))); return Math.abs(result); }
From source file:org.lenskit.mf.funksvd.FunkSVDItemScorer.java
@Override protected double computeScore(double bias, @Nonnull RealVector user, @Nonnull RealVector item) { if (domain == null) { return super.computeScore(bias, user, item); } else {/* w w w . j a va 2 s.c om*/ double result = bias; int n = user.getDimension(); for (int i = 0; i < n; i++) { result = domain.clampValue(result + user.getEntry(i) * item.getEntry(i)); } return result; } }
From source file:org.lenskit.mf.funksvd.FunkSVDModelBuilder.java
/** * Add a feature's summary to the feature info builder. * * @param ufv The user values./*from w ww. j a v a 2s . com*/ * @param ifv The item values. * @param fib The feature info builder. */ protected void summarizeFeature(RealVector ufv, RealVector ifv, FeatureInfo.Builder fib) { fib.setUserAverage(realVectorSum(ufv) / ufv.getDimension()) .setItemAverage(realVectorSum(ifv) / ifv.getDimension()) .setSingularValue(ufv.getNorm() * ifv.getNorm()); }
From source file:org.lenskit.mf.svd.DomainClampingKernel.java
@Override public double apply(double bias, @Nonnull RealVector user, @Nonnull RealVector item) { final int n = user.getDimension(); Preconditions.checkArgument(item.getDimension() == n, "vectors have different lengths"); double result = bias; for (int i = 0; i < n; i++) { result = domain.clampValue(result + user.getEntry(i) * item.getEntry(i)); }//from ww w . j a v a 2 s . c o m return result; }
From source file:org.lenskit.pf.HPFModelProvider.java
public void logNormalize(RealVector phi) { final int size = phi.getDimension(); if (size == 1) { phi.setEntry(0, 1.0);//from ww w.ja v a 2 s . com } if (size > 1) { double logsum = phi.getEntry(0); for (int i = 1; i < size; i++) { double phiK = phi.getEntry(i); if (phiK < logsum) { logsum = logsum + Math.log(1 + Math.exp(phiK - logsum)); } else { logsum = phiK + Math.log(1 + Math.exp(logsum - phiK)); } } for (int k = 0; k < size; k++) { double phiK = phi.getEntry(k); double normalized = Math.exp(phiK - logsum); phi.setEntry(k, normalized); } } }
From source file:org.lenskit.pf.PMFModel.java
private static void logNormalize(RealVector phi) { final int size = phi.getDimension(); if (size == 1) { phi.setEntry(0, 1.0);/*from w ww . j a v a2 s . co m*/ } if (size > 1) { double logsum = phi.getEntry(0); for (int k = 1; k < size; k++) { double phiK = phi.getEntry(k); if (phiK < logsum) { logsum = logsum + Math.log(1 + Math.exp(phiK - logsum)); } else { logsum = phiK + Math.log(1 + Math.exp(logsum - phiK)); } } for (int k = 0; k < size; k++) { double phiK = phi.getEntry(k); double normalized = Math.exp(phiK - logsum); phi.setEntry(k, normalized); } } }
From source file:org.lenskit.predict.ordrec.OrdRecRatingPredictor.java
/** * The train function of OrdRec. Get all parameters after learning process. *//*from w ww. ja va 2 s .c o 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.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)); }/*from w ww .jav a 2 s . c o m*/ }