You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mahout.apache.org by sr...@apache.org on 2011/10/01 14:16:58 UTC
svn commit: r1177970 - in /mahout/trunk:
core/src/main/java/org/apache/mahout/classifier/
core/src/main/java/org/apache/mahout/classifier/bayes/mapreduce/cbayes/
core/src/main/java/org/apache/mahout/classifier/bayes/mapreduce/common/
core/src/main/java...
Author: srowen
Date: Sat Oct 1 12:16:57 2011
New Revision: 1177970
URL: http://svn.apache.org/viewvc?rev=1177970&view=rev
Log:
Fun small thing I learned: Java has a special faster/more accurate method for ln(1+x)
Modified:
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/AbstractVectorClassifier.java
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/mapreduce/cbayes/CBayesThetaNormalizerMapper.java
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/mapreduce/common/BayesFeatureMapper.java
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/evaluation/Auc.java
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sequencelearning/hmm/HmmAlgorithms.java
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sequencelearning/hmm/HmmTrainer.java
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/L2.java
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/TPrior.java
mahout/trunk/core/src/main/java/org/apache/mahout/clustering/dirichlet/UncommonDistributions.java
mahout/trunk/core/src/main/java/org/apache/mahout/clustering/lda/LDAUtil.java
mahout/trunk/core/src/main/java/org/apache/mahout/ep/State.java
mahout/trunk/core/src/main/java/org/apache/mahout/math/stats/entropy/SpecificConditionalEntropyReducer.java
mahout/trunk/core/src/main/java/org/apache/mahout/vectorizer/encoders/TextValueEncoder.java
mahout/trunk/core/src/test/java/org/apache/mahout/ep/ThreadedEvolutionaryProcessTest.java
mahout/trunk/examples/src/main/java/org/apache/mahout/classifier/sgd/SimpleCsvExamples.java
mahout/trunk/examples/src/main/java/org/apache/mahout/classifier/sgd/TrainNewsGroups.java
mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/Exponential.java
mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/Gamma.java
mahout/trunk/math/src/test/java/org/apache/mahout/math/jet/stat/GammaTest.java
mahout/trunk/math/src/test/java/org/apache/mahout/math/stats/LogLikelihoodTest.java
mahout/trunk/math/src/test/java/org/apache/mahout/math/stats/OnlineSummarizerTest.java
Modified: mahout/trunk/core/src/main/java/org/apache/mahout/classifier/AbstractVectorClassifier.java
URL: http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/AbstractVectorClassifier.java?rev=1177970&r1=1177969&r2=1177970&view=diff
==============================================================================
--- mahout/trunk/core/src/main/java/org/apache/mahout/classifier/AbstractVectorClassifier.java (original)
+++ mahout/trunk/core/src/main/java/org/apache/mahout/classifier/AbstractVectorClassifier.java Sat Oct 1 12:16:57 2011
@@ -170,14 +170,14 @@ public abstract class AbstractVectorClas
if (actual > 0) {
return Math.max(-100.0, Math.log(p));
} else {
- return Math.max(-100.0, Math.log(1.0 - p));
+ return Math.max(-100.0, Math.log1p(-p));
}
} else {
Vector p = classify(data);
if (actual > 0) {
return Math.max(-100.0, Math.log(p.get(actual - 1)));
} else {
- return Math.max(-100.0, Math.log(1.0 - p.zSum()));
+ return Math.max(-100.0, Math.log1p(-p.zSum()));
}
}
}
Modified: mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/mapreduce/cbayes/CBayesThetaNormalizerMapper.java
URL: http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/mapreduce/cbayes/CBayesThetaNormalizerMapper.java?rev=1177970&r1=1177969&r2=1177970&view=diff
==============================================================================
--- mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/mapreduce/cbayes/CBayesThetaNormalizerMapper.java (original)
+++ mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/mapreduce/cbayes/CBayesThetaNormalizerMapper.java Sat Oct 1 12:16:57 2011
@@ -89,7 +89,7 @@ public class CBayesThetaNormalizerMapper
double dIJ = value.get();
double denominator = 0.5 * (sigmaJSigmaK / vocabCount + dIJ * this.labelWeightSum.size());
- double weight = Math.log(1.0 - dIJ / denominator);
+ double weight = Math.log1p(-dIJ / denominator);
reporter.setStatus("Complementary Bayes Theta Normalizer Mapper: " + label + " => " + weight);
Modified: mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/mapreduce/common/BayesFeatureMapper.java
URL: http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/mapreduce/common/BayesFeatureMapper.java?rev=1177970&r1=1177969&r2=1177970&view=diff
==============================================================================
--- mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/mapreduce/common/BayesFeatureMapper.java (original)
+++ mahout/trunk/core/src/main/java/org/apache/mahout/classifier/bayes/mapreduce/common/BayesFeatureMapper.java Sat Oct 1 12:16:57 2011
@@ -119,7 +119,7 @@ public class BayesFeatureMapper extends
tuple.add(BayesConstants.WEIGHT);
tuple.add(label);
tuple.add(token);
- DoubleWritable f = new DoubleWritable(Math.log(1.0 + dKJ) / lengthNormalisation);
+ DoubleWritable f = new DoubleWritable(Math.log1p(dKJ) / lengthNormalisation);
output.collect(tuple, f);
} catch (IOException e) {
throw new IllegalStateException(e);
Modified: mahout/trunk/core/src/main/java/org/apache/mahout/classifier/evaluation/Auc.java
URL: http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/evaluation/Auc.java?rev=1177970&r1=1177969&r2=1177970&view=diff
==============================================================================
--- mahout/trunk/core/src/main/java/org/apache/mahout/classifier/evaluation/Auc.java (original)
+++ mahout/trunk/core/src/main/java/org/apache/mahout/classifier/evaluation/Auc.java Sat Oct 1 12:16:57 2011
@@ -81,7 +81,7 @@ public class Auc {
if (isProbabilityScore()) {
double limited = Math.max(1.0e-20, Math.min(score, 1 - 1.0e-20));
double v0 = entropy.get(trueValue, 0);
- entropy.set(trueValue, 0, (Math.log(1 - limited) - v0) / samples + v0);
+ entropy.set(trueValue, 0, (Math.log1p(-limited) - v0) / samples + v0);
double v1 = entropy.get(trueValue, 1);
entropy.set(trueValue, 1, (Math.log(limited) - v1) / samples + v1);
@@ -211,9 +211,9 @@ public class Auc {
// find a constant score that would optimize log-likelihood, but use a dash of Bayesian
// conservatism to avoid dividing by zero or taking log(0)
double p = (0.5 + confusion.get(1, 1)) / (1 + confusion.get(0, 0) + confusion.get(1, 1));
- entropy.set(0, 0, confusion.get(0, 0) * Math.log(1 - p));
+ entropy.set(0, 0, confusion.get(0, 0) * Math.log1p(-p));
entropy.set(0, 1, confusion.get(0, 1) * Math.log(p));
- entropy.set(1, 0, confusion.get(1, 0) * Math.log(1 - p));
+ entropy.set(1, 0, confusion.get(1, 0) * Math.log1p(-p));
entropy.set(1, 1, confusion.get(1, 1) * Math.log(p));
}
return entropy;
Modified: mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sequencelearning/hmm/HmmAlgorithms.java
URL: http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sequencelearning/hmm/HmmAlgorithms.java?rev=1177970&r1=1177969&r2=1177970&view=diff
==============================================================================
--- mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sequencelearning/hmm/HmmAlgorithms.java (original)
+++ mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sequencelearning/hmm/HmmAlgorithms.java Sat Oct 1 12:16:57 2011
@@ -79,7 +79,7 @@ public final class HmmAlgorithms {
double tmp = alpha.getQuick(t - 1, j) + Math.log(a.getQuick(j, i));
if (tmp > Double.NEGATIVE_INFINITY) {
// make sure we handle log(0) correctly
- sum = tmp + Math.log(1 + Math.exp(sum - tmp));
+ sum = tmp + Math.log1p(Math.exp(sum - tmp));
}
}
alpha.setQuick(t, i, sum + Math.log(b.getQuick(i, observations[t])));
@@ -150,7 +150,7 @@ public final class HmmAlgorithms {
+ Math.log(b.getQuick(j, observations[t + 1]));
if (tmp > Double.NEGATIVE_INFINITY) {
// handle log(0)
- sum = tmp + Math.log(1 + Math.exp(sum - tmp));
+ sum = tmp + Math.log1p(Math.exp(sum - tmp));
}
}
beta.setQuick(t, i, sum);
Modified: mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sequencelearning/hmm/HmmTrainer.java
URL: http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sequencelearning/hmm/HmmTrainer.java?rev=1177970&r1=1177969&r2=1177970&view=diff
==============================================================================
--- mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sequencelearning/hmm/HmmTrainer.java (original)
+++ mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sequencelearning/hmm/HmmTrainer.java Sat Oct 1 12:16:57 2011
@@ -419,7 +419,7 @@ public final class HmmTrainer {
+ beta.getQuick(t + 1, j);
if (temp > Double.NEGATIVE_INFINITY) {
// handle 0-probabilities
- sum = temp + Math.log(1 + Math.exp(sum - temp));
+ sum = temp + Math.log1p(Math.exp(sum - temp));
}
}
transitionMatrix.setQuick(i, j, transitionMatrix.getQuick(i, j)
@@ -436,7 +436,7 @@ public final class HmmTrainer {
double temp = alpha.getQuick(t, i) + beta.getQuick(t, i);
if (temp > Double.NEGATIVE_INFINITY) {
// handle 0-probabilities
- sum = temp + Math.log(1 + Math.exp(sum - temp));
+ sum = temp + Math.log1p(Math.exp(sum - temp));
}
}
}
Modified: mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/L2.java
URL: http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/L2.java?rev=1177970&r1=1177969&r2=1177970&view=diff
==============================================================================
--- mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/L2.java (original)
+++ mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/L2.java Sat Oct 1 12:16:57 2011
@@ -26,6 +26,9 @@ import java.io.IOException;
* doesn't tend to set them to exactly zero.
*/
public class L2 implements PriorFunction {
+
+ private static final double HALF_LOG_2PI = Math.log(2.0 * Math.PI) / 2.0;
+
private double s2;
private double s;
@@ -44,7 +47,7 @@ public class L2 implements PriorFunction
@Override
public double logP(double betaIJ) {
- return -betaIJ * betaIJ / s2 / 2.0 - Math.log(s) - Math.log(2.0 * Math.PI) / 2.0;
+ return -betaIJ * betaIJ / s2 / 2.0 - Math.log(s) - HALF_LOG_2PI;
}
@Override
Modified: mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/TPrior.java
URL: http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/TPrior.java?rev=1177970&r1=1177969&r2=1177970&view=diff
==============================================================================
--- mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/TPrior.java (original)
+++ mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/TPrior.java Sat Oct 1 12:16:57 2011
@@ -46,7 +46,7 @@ public class TPrior implements PriorFunc
return Gamma.logGamma((df + 1.0) / 2.0)
- Math.log(df * Math.PI)
- Gamma.logGamma(df / 2.0)
- - (df + 1.0) / 2.0 * Math.log(1.0 + betaIJ * betaIJ);
+ - (df + 1.0) / 2.0 * Math.log1p(betaIJ * betaIJ);
}
@Override
Modified: mahout/trunk/core/src/main/java/org/apache/mahout/clustering/dirichlet/UncommonDistributions.java
URL: http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/clustering/dirichlet/UncommonDistributions.java?rev=1177970&r1=1177969&r2=1177970&view=diff
==============================================================================
--- mahout/trunk/core/src/main/java/org/apache/mahout/clustering/dirichlet/UncommonDistributions.java (original)
+++ mahout/trunk/core/src/main/java/org/apache/mahout/clustering/dirichlet/UncommonDistributions.java Sat Oct 1 12:16:57 2011
@@ -224,7 +224,7 @@ public final class UncommonDistributions
if (p >= 1.0) {
return n; // needed to avoid infinite loops and negative results
}
- double q = -Math.log(1.0 - p);
+ double q = -Math.log1p(-p);
double sum = 0.0;
int x = 0;
while (sum <= q) {
Modified: mahout/trunk/core/src/main/java/org/apache/mahout/clustering/lda/LDAUtil.java
URL: http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/clustering/lda/LDAUtil.java?rev=1177970&r1=1177969&r2=1177970&view=diff
==============================================================================
--- mahout/trunk/core/src/main/java/org/apache/mahout/clustering/lda/LDAUtil.java (original)
+++ mahout/trunk/core/src/main/java/org/apache/mahout/clustering/lda/LDAUtil.java Sat Oct 1 12:16:57 2011
@@ -27,7 +27,7 @@ final class LDAUtil {
*/
static double logSum(double a, double b) {
return a == Double.NEGATIVE_INFINITY ? b : b == Double.NEGATIVE_INFINITY ? a
- : a < b ? b + Math.log(1 + Math.exp(a - b)) : a + Math.log(1 + Math.exp(b - a));
+ : a < b ? b + Math.log1p(Math.exp(a - b)) : a + Math.log1p(Math.exp(b - a));
}
}
Modified: mahout/trunk/core/src/main/java/org/apache/mahout/ep/State.java
URL: http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/ep/State.java?rev=1177970&r1=1177969&r2=1177970&view=diff
==============================================================================
--- mahout/trunk/core/src/main/java/org/apache/mahout/ep/State.java (original)
+++ mahout/trunk/core/src/main/java/org/apache/mahout/ep/State.java Sat Oct 1 12:16:57 2011
@@ -113,7 +113,7 @@ public class State<T extends Payload<U>,
State<T, U> r = this.copy();
double magnitude = 0.9 * omni + sum / 10;
- r.omni = magnitude * -Math.log(1 - gen.nextDouble());
+ r.omni = magnitude * -Math.log1p(-gen.nextDouble());
for (int i = 0; i < step.length; i++) {
r.step[i] = lambda * step[i] + r.omni * gen.nextGaussian();
r.params[i] += r.step[i];
Modified: mahout/trunk/core/src/main/java/org/apache/mahout/math/stats/entropy/SpecificConditionalEntropyReducer.java
URL: http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/math/stats/entropy/SpecificConditionalEntropyReducer.java?rev=1177970&r1=1177969&r2=1177970&view=diff
==============================================================================
--- mahout/trunk/core/src/main/java/org/apache/mahout/math/stats/entropy/SpecificConditionalEntropyReducer.java (original)
+++ mahout/trunk/core/src/main/java/org/apache/mahout/math/stats/entropy/SpecificConditionalEntropyReducer.java Sat Oct 1 12:16:57 2011
@@ -33,6 +33,8 @@ import java.io.IOException;
* = (sum * log(sum) - sum_i(values_i * log(values_i)) / (n * log(2))
*/
public final class SpecificConditionalEntropyReducer extends Reducer<Text, VarIntWritable, Text, DoubleWritable> {
+
+ private static final double LOG2 = Math.log(2.0);
private final DoubleWritable result = new DoubleWritable();
private double numberItemsLog2;
@@ -40,8 +42,7 @@ public final class SpecificConditionalEn
@Override
protected void setup(Context context) throws IOException, InterruptedException {
super.setup(context);
- numberItemsLog2 =
- Math.log(2) * Integer.parseInt(context.getConfiguration().get(ConditionalEntropy.NUMBER_ITEMS_PARAM));
+ numberItemsLog2 = LOG2 * Integer.parseInt(context.getConfiguration().get(ConditionalEntropy.NUMBER_ITEMS_PARAM));
}
@Override
Modified: mahout/trunk/core/src/main/java/org/apache/mahout/vectorizer/encoders/TextValueEncoder.java
URL: http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/vectorizer/encoders/TextValueEncoder.java?rev=1177970&r1=1177969&r2=1177970&view=diff
==============================================================================
--- mahout/trunk/core/src/main/java/org/apache/mahout/vectorizer/encoders/TextValueEncoder.java (original)
+++ mahout/trunk/core/src/main/java/org/apache/mahout/vectorizer/encoders/TextValueEncoder.java Sat Oct 1 12:16:57 2011
@@ -86,7 +86,7 @@ public class TextValueEncoder extends Fe
public void flush(double weight, Vector data) {
for (String word : counts.elementSet()) {
// weight words by log_2(tf) times whatever other weight we are given
- wordEncoder.addToVector(word, weight * Math.log(1 + counts.count(word)) / LOG_2, data);
+ wordEncoder.addToVector(word, weight * Math.log1p(counts.count(word)) / LOG_2, data);
}
counts.clear();
}
Modified: mahout/trunk/core/src/test/java/org/apache/mahout/ep/ThreadedEvolutionaryProcessTest.java
URL: http://svn.apache.org/viewvc/mahout/trunk/core/src/test/java/org/apache/mahout/ep/ThreadedEvolutionaryProcessTest.java?rev=1177970&r1=1177969&r2=1177970&view=diff
==============================================================================
--- mahout/trunk/core/src/test/java/org/apache/mahout/ep/ThreadedEvolutionaryProcessTest.java (original)
+++ mahout/trunk/core/src/test/java/org/apache/mahout/ep/ThreadedEvolutionaryProcessTest.java Sat Oct 1 12:16:57 2011
@@ -43,7 +43,7 @@ public final class ThreadedEvolutionaryP
}
try {
// variable delays to emulate a tricky function
- Thread.sleep((long) Math.floor(-2 * Math.log(1 - random.nextDouble())));
+ Thread.sleep((long) Math.floor(-2 * Math.log1p(-random.nextDouble())));
} catch (InterruptedException e) {
// ignore interruptions
}
Modified: mahout/trunk/examples/src/main/java/org/apache/mahout/classifier/sgd/SimpleCsvExamples.java
URL: http://svn.apache.org/viewvc/mahout/trunk/examples/src/main/java/org/apache/mahout/classifier/sgd/SimpleCsvExamples.java?rev=1177970&r1=1177969&r2=1177970&view=diff
==============================================================================
--- mahout/trunk/examples/src/main/java/org/apache/mahout/classifier/sgd/SimpleCsvExamples.java (original)
+++ mahout/trunk/examples/src/main/java/org/apache/mahout/classifier/sgd/SimpleCsvExamples.java Sat Oct 1 12:16:57 2011
@@ -177,7 +177,7 @@ public final class SimpleCsvExamples {
* @return
*/
private static int randomValue(double mean) {
- return (int) (-mean * Math.log(1 - rand.nextDouble()));
+ return (int) (-mean * Math.log1p(-rand.nextDouble()));
}
@Override
Modified: mahout/trunk/examples/src/main/java/org/apache/mahout/classifier/sgd/TrainNewsGroups.java
URL: http://svn.apache.org/viewvc/mahout/trunk/examples/src/main/java/org/apache/mahout/classifier/sgd/TrainNewsGroups.java?rev=1177970&r1=1177969&r2=1177970&view=diff
==============================================================================
--- mahout/trunk/examples/src/main/java/org/apache/mahout/classifier/sgd/TrainNewsGroups.java (original)
+++ mahout/trunk/examples/src/main/java/org/apache/mahout/classifier/sgd/TrainNewsGroups.java Sat Oct 1 12:16:57 2011
@@ -313,7 +313,7 @@ public final class TrainNewsGroups {
Vector v = new RandomAccessSparseVector(FEATURES);
bias.addToVector("", 1, v);
for (String word : words.elementSet()) {
- encoder.addToVector(word, Math.log(1 + words.count(word)), v);
+ encoder.addToVector(word, Math.log1p(words.count(word)), v);
}
return v;
Modified: mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/Exponential.java
URL: http://svn.apache.org/viewvc/mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/Exponential.java?rev=1177970&r1=1177969&r2=1177970&view=diff
==============================================================================
--- mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/Exponential.java (original)
+++ mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/Exponential.java Sat Oct 1 12:16:57 2011
@@ -46,7 +46,7 @@ public class Exponential extends Abstrac
*/
@Override
public double nextDouble() {
- return -Math.log(1 - randomGenerator.nextDouble()) / lambda;
+ return -Math.log1p(-randomGenerator.nextDouble()) / lambda;
}
/**
Modified: mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/Gamma.java
URL: http://svn.apache.org/viewvc/mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/Gamma.java?rev=1177970&r1=1177969&r2=1177970&view=diff
==============================================================================
--- mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/Gamma.java (original)
+++ mahout/trunk/math/src/main/java/org/apache/mahout/math/jet/random/Gamma.java Sat Oct 1 12:16:57 2011
@@ -190,12 +190,12 @@ public class Gamma extends AbstractConti
if (x > 0.0) { // Step 5. Calculation of q
v = t / (s + s); // Step 6.
if (Math.abs(v) > 0.25) {
- q = q0 - s * t + 0.25 * t * t + (ss + ss) * Math.log(1.0 + v);
+ q = q0 - s * t + 0.25 * t * t + (ss + ss) * Math.log1p(v);
} else {
q = q0 + 0.5 * t * t * ((((((((a9 * v + a8) * v + a7) * v + a6)
* v + a5) * v + a4) * v + a3) * v + a2) * v + a1) * v;
} // Step 7. Quotient acceptance
- if (Math.log(1.0 - u) <= q) {
+ if (Math.log1p(-u) <= q) {
return gds / rate;
}
}
@@ -219,7 +219,7 @@ public class Gamma extends AbstractConti
} while (t <= -0.71874483771719); // Step 9. Rejection of t
v = t / (s + s); // Step 10. New q(t)
if (Math.abs(v) > 0.25) {
- q = q0 - s * t + 0.25 * t * t + (ss + ss) * Math.log(1.0 + v);
+ q = q0 - s * t + 0.25 * t * t + (ss + ss) * Math.log1p(v);
} else {
q = q0 + 0.5 * t * t * ((((((((a9 * v + a8) * v + a7) * v + a6)
* v + a5) * v + a4) * v + a3) * v + a2) * v + a1) * v;
Modified: mahout/trunk/math/src/test/java/org/apache/mahout/math/jet/stat/GammaTest.java
URL: http://svn.apache.org/viewvc/mahout/trunk/math/src/test/java/org/apache/mahout/math/jet/stat/GammaTest.java?rev=1177970&r1=1177969&r2=1177970&view=diff
==============================================================================
--- mahout/trunk/math/src/test/java/org/apache/mahout/math/jet/stat/GammaTest.java (original)
+++ mahout/trunk/math/src/test/java/org/apache/mahout/math/jet/stat/GammaTest.java Sat Oct 1 12:16:57 2011
@@ -102,8 +102,8 @@ public final class GammaTest extends Mah
public void beta() {
Random r = RandomUtils.getRandom();
for (int i = 0; i < 200; i++) {
- double alpha = -50 * Math.log(1 - r.nextDouble());
- double beta = -50 * Math.log(1 - r.nextDouble());
+ double alpha = -50 * Math.log1p(-r.nextDouble());
+ double beta = -50 * Math.log1p(-r.nextDouble());
double ref = Math.exp(Gamma.logGamma(alpha) + Gamma.logGamma(beta) - Gamma.logGamma(alpha + beta));
double actual = Gamma.beta(alpha, beta);
double err = (ref - actual) / ref;
Modified: mahout/trunk/math/src/test/java/org/apache/mahout/math/stats/LogLikelihoodTest.java
URL: http://svn.apache.org/viewvc/mahout/trunk/math/src/test/java/org/apache/mahout/math/stats/LogLikelihoodTest.java?rev=1177970&r1=1177969&r2=1177970&view=diff
==============================================================================
--- mahout/trunk/math/src/test/java/org/apache/mahout/math/stats/LogLikelihoodTest.java (original)
+++ mahout/trunk/math/src/test/java/org/apache/mahout/math/stats/LogLikelihoodTest.java Sat Oct 1 12:16:57 2011
@@ -81,7 +81,7 @@ public final class LogLikelihoodTest ext
.assign(new DoubleFunction() {
@Override
public double apply(double arg1) {
- return -Math.log(1 - rand.nextDouble());
+ return -Math.log1p(-rand.nextDouble());
}
});
Modified: mahout/trunk/math/src/test/java/org/apache/mahout/math/stats/OnlineSummarizerTest.java
URL: http://svn.apache.org/viewvc/mahout/trunk/math/src/test/java/org/apache/mahout/math/stats/OnlineSummarizerTest.java?rev=1177970&r1=1177969&r2=1177970&view=diff
==============================================================================
--- mahout/trunk/math/src/test/java/org/apache/mahout/math/stats/OnlineSummarizerTest.java (original)
+++ mahout/trunk/math/src/test/java/org/apache/mahout/math/stats/OnlineSummarizerTest.java Sat Oct 1 12:16:57 2011
@@ -108,7 +108,7 @@ public final class OnlineSummarizerTest
// TODO use RandomUtils.getRandom() and rejigger constants to make test pass
Random gen = new Random(1L);
for (int i = 0; i < n; i++) {
- x.add(-Math.log(1 - gen.nextDouble()));
+ x.add(-Math.log1p(-gen.nextDouble()));
}
return x;
}