@Override public Double sample() { return sample(gen.nextDouble()); }
@Override public double apply(double value) { return rnd.nextDouble() - 0.5; } });
@Override public double apply(double value) { return rnd.nextDouble() - 0.5; } });
@Override public Double sample() { return sample(gen.nextDouble()); }
double x; do { double u = RANDOM.nextDouble(); double v = RANDOM.nextDouble(); double y = 1.0 / lam * Math.log(v / (1.0 - v)); x = k * Math.exp(y); double x; do { double u = RANDOM.nextDouble(); double v = RANDOM.nextDouble(); double z = -Math.log(u); double e = -Math.log(v);
double x; do { double u = RANDOM.nextDouble(); double v = RANDOM.nextDouble(); double y = 1.0 / lam * Math.log(v / (1.0 - v)); x = k * Math.exp(y); double x; do { double u = RANDOM.nextDouble(); double v = RANDOM.nextDouble(); double z = -Math.log(u); double e = -Math.log(v);
/** * Returns an integer sampled according to this distribution. Takes time proportional to np + 1. (Reference: * Non-Uniform Random Variate Generation, Devroye http://cgm.cs.mcgill.ca/~luc/rnbookindex.html) Second * time-waiting algorithm. */ public static int rBinomial(int n, double p) { if (p >= 1.0) { return n; // needed to avoid infinite loops and negative results } double q = -Math.log1p(-p); double sum = 0.0; int x = 0; while (sum <= q) { double u = RANDOM.nextDouble(); double e = -Math.log(u); sum += e / (n - x); x++; } if (x == 0) { return 0; } return x - 1; }
/** * Returns an integer sampled according to this distribution. Takes time proportional to np + 1. (Reference: * Non-Uniform Random Variate Generation, Devroye http://cgm.cs.mcgill.ca/~luc/rnbookindex.html) Second * time-waiting algorithm. */ public static int rBinomial(int n, double p) { if (p >= 1.0) { return n; // needed to avoid infinite loops and negative results } double q = -Math.log1p(-p); double sum = 0.0; int x = 0; while (sum <= q) { double u = RANDOM.nextDouble(); double e = -Math.log(u); sum += e / (n - x); x++; } if (x == 0) { return 0; } return x - 1; }
double x; do { double u = RANDOM.nextDouble(); double v = RANDOM.nextDouble(); double y = 1.0 / lam * Math.log(v / (1.0 - v)); x = k * Math.exp(y); double x; do { double u = RANDOM.nextDouble(); double v = RANDOM.nextDouble(); double z = -Math.log(u); double e = -Math.log(v);
/** * Returns an integer sampled according to this distribution. Takes time proportional to np + 1. (Reference: * Non-Uniform Random Variate Generation, Devroye http://cgm.cs.mcgill.ca/~luc/rnbookindex.html) Second * time-waiting algorithm. */ public static int rBinomial(int n, double p) { if (p >= 1.0) { return n; // needed to avoid infinite loops and negative results } double q = -Math.log1p(-p); double sum = 0.0; int x = 0; while (sum <= q) { double u = RANDOM.nextDouble(); double e = -Math.log(u); sum += e / (n - x); x++; } if (x == 0) { return 0; } return x - 1; }
private Matrix randomMatrix(int numRows, int numColumns, double range) { double[][] data = new double[numRows][numColumns]; for (int i = 0; i < numRows; i++) { for (int j = 0; j < numColumns; j++) { double sqrtUniform = random.nextDouble(); data[i][j] = sqrtUniform * range; } } return new DenseMatrix(data); }
public void setUpSyntheticData() throws Exception { int numUsers = 2000; int numItems = 1000; double sparsity = 0.5; this.rank = 20; this.lambda = 0.000000001; this.numIterations = 100; Matrix users = randomMatrix(numUsers, rank, 1); Matrix items = randomMatrix(rank, numItems, 1); Matrix ratings = users.times(items); normalize(ratings, 5); FastByIDMap<PreferenceArray> userData = new FastByIDMap<PreferenceArray>(); for (int userIndex = 0; userIndex < numUsers; userIndex++) { List<Preference> row= Lists.newArrayList(); for (int itemIndex = 0; itemIndex < numItems; itemIndex++) { if (random.nextDouble() <= sparsity) { row.add(new GenericPreference(userIndex, itemIndex, (float) ratings.get(userIndex, itemIndex))); } } userData.put(userIndex, new GenericUserPreferenceArray(row)); } dataModel = new GenericDataModel(userData); }