Author: tdunning
Date: Tue Aug 17 16:22:05 2010
New Revision: 986372
URL: http://svn.apache.org/viewvc?rev=986372&view=rev
Log:
Rearrange to make encoding more widely visible.
Added comments.
Improved a few style points
Added:
mahout/trunk/.gitignore
mahout/trunk/core/src/main/java/org/apache/mahout/vectors/
mahout/trunk/core/src/main/java/org/apache/mahout/vectors/AdaptiveWordValueEncoder.java
- copied, changed from r986125,
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/AdaptiveWordValueEncoder.java
mahout/trunk/core/src/main/java/org/apache/mahout/vectors/ConstantValueEncoder.java
- copied, changed from r986125,
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/ConstantValueEncoder.java
mahout/trunk/core/src/main/java/org/apache/mahout/vectors/ContinuousValueEncoder.java
- copied, changed from r986125,
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/ContinuousValueEncoder.java
mahout/trunk/core/src/main/java/org/apache/mahout/vectors/Dictionary.java
- copied, changed from r986125,
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/Dictionary.java
mahout/trunk/core/src/main/java/org/apache/mahout/vectors/FeatureVectorEncoder.java
- copied, changed from r986125,
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/FeatureVectorEncoder.java
mahout/trunk/core/src/main/java/org/apache/mahout/vectors/MurmurHash.java
- copied, changed from r986125,
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/MurmurHash.java
mahout/trunk/core/src/main/java/org/apache/mahout/vectors/StaticWordValueEncoder.java
- copied, changed from r986125,
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/StaticWordValueEncoder.java
mahout/trunk/core/src/main/java/org/apache/mahout/vectors/TextValueEncoder.java
- copied, changed from r986125,
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/TextValueEncoder.java
mahout/trunk/core/src/main/java/org/apache/mahout/vectors/WordValueEncoder.java
- copied, changed from r986125,
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/WordValueEncoder.java
mahout/trunk/core/src/test/java/org/apache/mahout/vectors/
mahout/trunk/core/src/test/java/org/apache/mahout/vectors/ContinuousValueEncoderTest.java
- copied, changed from r986125,
mahout/trunk/core/src/test/java/org/apache/mahout/classifier/sgd/ContinuousValueEncoderTest.java
mahout/trunk/core/src/test/java/org/apache/mahout/vectors/MurmurHashTest.java
- copied, changed from r986125,
mahout/trunk/core/src/test/java/org/apache/mahout/classifier/MurmurHashTest.java
mahout/trunk/core/src/test/java/org/apache/mahout/vectors/TextValueEncoderTest.java
- copied, changed from r986125,
mahout/trunk/core/src/test/java/org/apache/mahout/classifier/sgd/TextValueEncoderTest.java
mahout/trunk/core/src/test/java/org/apache/mahout/vectors/WordLikeValueEncoderTest.java
- copied, changed from r986125,
mahout/trunk/core/src/test/java/org/apache/mahout/classifier/sgd/WordLikeValueEncoderTest.java
Removed:
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/MurmurHash.java
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/AdaptiveWordValueEncoder.java
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/ConstantValueEncoder.java
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/ContinuousValueEncoder.java
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/Dictionary.java
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/FeatureVectorEncoder.java
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/StaticWordValueEncoder.java
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/TextValueEncoder.java
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/WordValueEncoder.java
mahout/trunk/core/src/test/java/org/apache/mahout/classifier/MurmurHashTest.java
mahout/trunk/core/src/test/java/org/apache/mahout/classifier/sgd/ContinuousValueEncoderTest.java
mahout/trunk/core/src/test/java/org/apache/mahout/classifier/sgd/TextValueEncoderTest.java
mahout/trunk/core/src/test/java/org/apache/mahout/classifier/sgd/WordLikeValueEncoderTest.java
Modified:
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/AbstractOnlineLogisticRegression.java
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/CrossFoldLearner.java
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/CsvRecordFactory.java
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/ElasticBandPrior.java
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/L1.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/PriorFunction.java
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/TPrior.java
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/UniformPrior.java
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/package.html
mahout/trunk/core/src/test/java/org/apache/mahout/classifier/sgd/CsvRecordFactoryTest.java
Added: mahout/trunk/.gitignore
URL: http://svn.apache.org/viewvc/mahout/trunk/.gitignore?rev=986372&view=auto
==============================================================================
--- mahout/trunk/.gitignore (added)
+++ mahout/trunk/.gitignore Tue Aug 17 16:22:05 2010
@@ -0,0 +1,2 @@
+.idea/*
+*.iml
Modified:
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/AbstractOnlineLogisticRegression.java
URL:
http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/AbstractOnlineLogisticRegression.java?rev=986372&r1=986371&r2=986372&view=diff
==============================================================================
---
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/AbstractOnlineLogisticRegression.java
(original)
+++
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/AbstractOnlineLogisticRegression.java
Tue Aug 17 16:22:05 2010
@@ -179,7 +179,8 @@ public abstract class AbstractOnlineLogi
int j = updateLocation.index();
double missingUpdates = getStep() - updateSteps.get(j);
if (missingUpdates > 0) {
- double newValue = prior.age(beta.get(i, j), missingUpdates,
getLambda() * learningRate * perTermLearningRate(j));
+ double rate = getLambda() * learningRate * perTermLearningRate(j);
+ double newValue = prior.age(beta.get(i, j), missingUpdates, rate);
beta.set(i, j, newValue);
}
}
@@ -205,8 +206,8 @@ public abstract class AbstractOnlineLogi
return beta;
}
- public void setBeta(int i, int j, double beta_ij) {
- beta.set(i, j, beta_ij);
+ public void setBeta(int i, int j, double betaIJ) {
+ beta.set(i, j, betaIJ);
}
public int numCategories() {
Modified:
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/CrossFoldLearner.java
URL:
http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/CrossFoldLearner.java?rev=986372&r1=986371&r2=986372&view=diff
==============================================================================
---
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/CrossFoldLearner.java
(original)
+++
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/CrossFoldLearner.java
Tue Aug 17 16:22:05 2010
@@ -19,13 +19,16 @@ import java.util.List;
* record should be passed with each training example.
*/
class CrossFoldLearner extends AbstractVectorClassifier implements
OnlineLearner, Comparable<CrossFoldLearner> {
- int record = 0;
- OnlineAuc auc = new OnlineAuc();
- double logLikelihood = 0;
- List<OnlineLogisticRegression> models = Lists.newArrayList();
+ private static volatile int nextId = 0;
+
+ private final int id = nextId++;
+ private int record = 0;
+ private OnlineAuc auc = new OnlineAuc();
+ private double logLikelihood = 0;
+ private List<OnlineLogisticRegression> models = Lists.newArrayList();
// lambda, learningRate, perTermOffset, perTermExponent
- double[] parameters = new double[4];
+ private double[] parameters = new double[4];
CrossFoldLearner(int folds, int numCategories, int numFeatures,
PriorFunction prior) {
for (int i = 0; i < folds; i++) {
@@ -35,6 +38,37 @@ class CrossFoldLearner extends AbstractV
}
}
+ // -------- builder-like configuration methods
+
+ public CrossFoldLearner lambda(double v) {
+ for (OnlineLogisticRegression model : models) {
+ model.lambda(v);
+ }
+ return this;
+ }
+
+ public CrossFoldLearner learningRate(double x) {
+ for (OnlineLogisticRegression model : models) {
+ model.learningRate(x);
+ }
+ return this;
+ }
+
+ public CrossFoldLearner stepOffset(int x) {
+ for (OnlineLogisticRegression model : models) {
+ model.stepOffset(x);
+ }
+ return this;
+ }
+
+ public CrossFoldLearner decayExponent(double x) {
+ for (OnlineLogisticRegression model : models) {
+ model.decayExponent(x);
+ }
+ return this;
+ }
+
+ // -------- training methods
@Override
public void train(int actual, Vector instance) {
train(record, actual, instance);
@@ -68,43 +102,7 @@ class CrossFoldLearner extends AbstractV
record = 0;
}
- @Override
- public int compareTo(CrossFoldLearner other) {
- return Double.compare(this.logLikelihood, other.logLikelihood);
- }
-
- public CrossFoldLearner lambda(double v) {
- for (OnlineLogisticRegression model : models) {
- model.lambda(v);
- }
- return this;
- }
-
- public CrossFoldLearner learningRate(double x) {
- for (OnlineLogisticRegression model : models) {
- model.learningRate(x);
- }
- return this;
- }
-
- public CrossFoldLearner stepOffset(int x) {
- for (OnlineLogisticRegression model : models) {
- model.stepOffset(x);
- }
- return this;
- }
-
- public CrossFoldLearner decayExponent(double x) {
- for (OnlineLogisticRegression model : models) {
- model.decayExponent(x);
- }
- return this;
- }
-
- @Override
- public int numCategories() {
- return models.get(0).numCategories();
- }
+ // -------- classification methods
@Override
public Vector classify(Vector instance) {
@@ -127,6 +125,13 @@ class CrossFoldLearner extends AbstractV
return r / n;
}
+ // -------- status reporting methods
+
+ @Override
+ public int numCategories() {
+ return models.get(0).numCategories();
+ }
+
public double auc() {
return auc.auc();
}
@@ -134,4 +139,28 @@ class CrossFoldLearner extends AbstractV
public double logLikelihood() {
return logLikelihood;
}
+ // -------- general object and ordering stuff
+
+ /**
+ * Orders primarily by AUC descending with a fallback to object creation
order so that
+ * <pre>
+ * a.compareTo(b) == 0 <==> a.equals(b)
+ * </pre>
+ * Without the id comparison, it is dangerous to insert CrossFoldLearner's
into a
+ * TreeSet since if they ever have the same score, they can't be
distinguished.
+ */
+ @Override
+ public int compareTo(CrossFoldLearner other) {
+ int r = Double.compare(this.auc(), other.auc());
+ if (r != 0) {
+ return r;
+ } else {
+ return id - other.id;
+ }
+ }
+
+ @Override
+ public boolean equals(Object other) {
+ return other instanceof CrossFoldLearner && id == ((CrossFoldLearner)
other).id;
+ }
}
Modified:
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/CsvRecordFactory.java
URL:
http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/CsvRecordFactory.java?rev=986372&r1=986371&r2=986372&view=diff
==============================================================================
---
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/CsvRecordFactory.java
(original)
+++
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/CsvRecordFactory.java
Tue Aug 17 16:22:05 2010
@@ -25,6 +25,12 @@ import com.google.common.collect.Immutab
import com.google.common.collect.Lists;
import com.google.common.collect.Maps;
import org.apache.mahout.math.Vector;
+import org.apache.mahout.vectors.ConstantValueEncoder;
+import org.apache.mahout.vectors.ContinuousValueEncoder;
+import org.apache.mahout.vectors.Dictionary;
+import org.apache.mahout.vectors.FeatureVectorEncoder;
+import org.apache.mahout.vectors.StaticWordValueEncoder;
+import org.apache.mahout.vectors.TextValueEncoder;
import java.lang.reflect.Constructor;
import java.lang.reflect.InvocationTargetException;
@@ -65,7 +71,7 @@ public class CsvRecordFactory implements
// commas inside. Also, escaped quotes will not be unescaped. Good enough
for now.
private Splitter onComma = Splitter.on(",").trimResults(CharMatcher.is('"'));
- private static final Map<String, Class<? extends FeatureVectorEncoder>>
typeDictionary =
+ private static Map<String, Class<? extends FeatureVectorEncoder>>
typeDictionary =
ImmutableMap.<String, Class<? extends FeatureVectorEncoder>>builder()
.put("continuous", ContinuousValueEncoder.class)
.put("numeric", ContinuousValueEncoder.class)
@@ -88,6 +94,7 @@ public class CsvRecordFactory implements
private Map<String, String> typeMap;
private List<String> variableNames;
private boolean includeBiasTerm;
+ private static final String CANNOT_CONSTRUCT_CONVERTER = "Unable to
construct type converter... shouldn't be possible";
/**
* Construct a parser for CSV lines that encodes the parsed data in vector
form.
@@ -109,7 +116,8 @@ public class CsvRecordFactory implements
@Override
public void defineTargetCategories(List<String> values) {
if (values.size() > maxTargetValue) {
- throw new IllegalArgumentException("Must have less than or equal to " +
maxTargetValue + " categories for target variable, but found " + values.size());
+ throw new IllegalArgumentException("Must have less than or equal to " +
maxTargetValue
+ + " categories for target variable, but found " + values.size());
}
if (maxTargetValue == Integer.MAX_VALUE) {
@@ -188,7 +196,8 @@ public class CsvRecordFactory implements
}
try {
if (c == null) {
- throw new IllegalArgumentException("Invalid type of variable " +
typeMap.get(name) + " wanted on of " + typeDictionary.keySet());
+ throw new IllegalArgumentException("Invalid type of variable " +
typeMap.get(name)
+ + " wanted one of " + typeDictionary.keySet());
}
Constructor<? extends FeatureVectorEncoder> constructor =
c.getConstructor(String.class);
if (constructor == null) {
@@ -198,13 +207,13 @@ public class CsvRecordFactory implements
predictorEncoders.put(predictor, encoder);
encoder.setTraceDictionary(traceDictionary);
} catch (InstantiationException e) {
- throw new ImpossibleException("Unable to construct type converter...
shouldn't be possible", e);
+ throw new ImpossibleException(CANNOT_CONSTRUCT_CONVERTER, e);
} catch (IllegalAccessException e) {
- throw new ImpossibleException("Unable to construct type converter...
shouldn't be possible", e);
+ throw new ImpossibleException(CANNOT_CONSTRUCT_CONVERTER, e);
} catch (InvocationTargetException e) {
- throw new ImpossibleException("Unable to construct type converter...
shouldn't be possible", e);
+ throw new ImpossibleException(CANNOT_CONSTRUCT_CONVERTER, e);
} catch (NoSuchMethodException e) {
- throw new ImpossibleException("Unable to construct type converter...
shouldn't be possible", e);
+ throw new ImpossibleException(CANNOT_CONSTRUCT_CONVERTER, e);
}
}
}
@@ -280,7 +289,7 @@ public class CsvRecordFactory implements
return r;
}
- private static class ImpossibleException extends RuntimeException {
+ private static final class ImpossibleException extends RuntimeException {
private ImpossibleException(String message, Throwable cause) {
super(message, cause);
}
Modified:
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/ElasticBandPrior.java
URL:
http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/ElasticBandPrior.java?rev=986372&r1=986371&r2=986372&view=diff
==============================================================================
---
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/ElasticBandPrior.java
(original)
+++
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/ElasticBandPrior.java
Tue Aug 17 16:22:05 2010
@@ -17,6 +17,10 @@
package org.apache.mahout.classifier.sgd;
+/**
+ * Implements a linear combination of L1 and L2 priors. This can give an
+ * interesting mixture of sparsity and load-sharing between redundant
predictors.
+ */
public class ElasticBandPrior extends PriorFunction {
private double alphaByLambda;
private L1 l1;
@@ -41,7 +45,7 @@ public class ElasticBandPrior extends Pr
}
@Override
- public double logP(double beta_ij) {
- return l1.logP(beta_ij) + alphaByLambda * l2.logP(beta_ij);
+ public double logP(double betaIJ) {
+ return l1.logP(betaIJ) + alphaByLambda * l2.logP(betaIJ);
}
}
Modified:
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/L1.java
URL:
http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/L1.java?rev=986372&r1=986371&r2=986372&view=diff
==============================================================================
--- mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/L1.java
(original)
+++ mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/L1.java
Tue Aug 17 16:22:05 2010
@@ -39,7 +39,7 @@ public class L1 extends PriorFunction {
}
@Override
- public double logP(double beta_ij) {
- return - Math.abs(beta_ij) ;
+ public double logP(double betaIJ) {
+ return -Math.abs(betaIJ);
}
}
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=986372&r1=986371&r2=986372&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
Tue Aug 17 16:22:05 2010
@@ -38,7 +38,7 @@ public class L2 extends PriorFunction {
}
@Override
- public double logP(double beta_ij) {
- return -beta_ij * beta_ij / s2 / 2 - log(s) - log(2 * Math.PI) / 2;
+ public double logP(double betaIJ) {
+ return -betaIJ * betaIJ / s2 / 2 - log(s) - log(2 * Math.PI) / 2;
}
}
Modified:
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/PriorFunction.java
URL:
http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/PriorFunction.java?rev=986372&r1=986371&r2=986372&view=diff
==============================================================================
---
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/PriorFunction.java
(original)
+++
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/PriorFunction.java
Tue Aug 17 16:22:05 2010
@@ -18,7 +18,11 @@
package org.apache.mahout.classifier.sgd;
/**
- * A prior is used to regularize the learning algorithm.
+ * A prior is used to regularize the learning algorithm. This allows a
trade-off to
+ * be made between complexity of the model being learned and the accuracy with
which
+ * the model fits the training data. There are different definitions of
complexity
+ * which can be approximated using different priors. For large sparse
systems, such
+ * as text classification, the L1 prior is often used which favors sparse
models.
*/
public abstract class PriorFunction {
/**
@@ -32,8 +36,8 @@ public abstract class PriorFunction {
/**
* Returns the log of the probability of a particular coefficient value
according to the prior.
- * @param beta_ij The coefficient.
+ * @param betaIJ The coefficient.
* @return The log probability.
*/
- public abstract double logP(double beta_ij);
+ public abstract double logP(double betaIJ);
}
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=986372&r1=986371&r2=986372&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
Tue Aug 17 16:22:05 2010
@@ -39,7 +39,7 @@ public class TPrior extends PriorFunctio
}
@Override
- public double logP(double beta_ij) {
- return logGamma((df + 1) / 2) - log(df * Math.PI) - logGamma(df / 2) - (df
+ 1) / 2 * log(1 + beta_ij * beta_ij);
+ public double logP(double betaIJ) {
+ return logGamma((df + 1) / 2) - log(df * Math.PI) - logGamma(df / 2) - (df
+ 1) / 2 * log(1 + betaIJ * betaIJ);
}
}
Modified:
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/UniformPrior.java
URL:
http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/UniformPrior.java?rev=986372&r1=986371&r2=986372&view=diff
==============================================================================
---
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/UniformPrior.java
(original)
+++
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/UniformPrior.java
Tue Aug 17 16:22:05 2010
@@ -27,7 +27,7 @@ public class UniformPrior extends PriorF
}
@Override
- public double logP(double beta_ij) {
+ public double logP(double betaIJ) {
return 0;
}
}
Modified:
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/package.html
URL:
http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/package.html?rev=986372&r1=986371&r2=986372&view=diff
==============================================================================
---
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/package.html
(original)
+++
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/package.html
Tue Aug 17 16:22:05 2010
@@ -1,20 +1,26 @@
<html>
<body>
+Implements a variety of on-line logistric regression classifiers using
SGD-based algorithms.
SGD stands for Stochastic Gradient Descent and refers to a class of learning
algorithms
that make it relatively easy to build high speed on-line learning algorithms
for a variety
of problems, notably including supervised learning for classification.
-
-The primary class of interest in the this package is CrossFoldLearner which
contains a
+<p>
+The primary class of interest in the this package is @link{CrossFoldLearner}
which contains a
number (typically 5) of sub-learners, each of which is given a different
portion of the
training data. Each of these sub-learners can then be evaluated on the data
it was not
trained on. This allows fully incremental learning while still getting
cross-validated
performance estimates.
-
-The CrossFoldLearner implements OnlineLearner and thus expects to be fed input
in the form
+<p>
+The CrossFoldLearner implements @link{OnlineLearner} and thus expects to be
fed input in the form
of a target variable and a feature vector. The target variable is simply an
integer in the
half-open interval [0..numFeatures) where numFeatures is defined when the
CrossFoldLearner
is constructed. The creation of feature vectors is facilitated by the classes
that inherit
-from FeatureVectorEncoder. These classes currently implement a form of
feature hashing with
+from @link{FeatureVectorEncoder}. These classes currently implement a form of
feature hashing with
multiple probes to limit feature ambiguity.
+
+...@see{onlinelogisticregressiontest}
+...@see{continuousvalueencodertest}
+...@see{textvalueencodertest}
+...@see{wordlikevalueencodertest}
</body>
</html>
\ No newline at end of file
Copied:
mahout/trunk/core/src/main/java/org/apache/mahout/vectors/AdaptiveWordValueEncoder.java
(from r986125,
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/AdaptiveWordValueEncoder.java)
URL:
http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/vectors/AdaptiveWordValueEncoder.java?p2=mahout/trunk/core/src/main/java/org/apache/mahout/vectors/AdaptiveWordValueEncoder.java&p1=mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/AdaptiveWordValueEncoder.java&r1=986125&r2=986372&rev=986372&view=diff
==============================================================================
---
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/AdaptiveWordValueEncoder.java
(original)
+++
mahout/trunk/core/src/main/java/org/apache/mahout/vectors/AdaptiveWordValueEncoder.java
Tue Aug 17 16:22:05 2010
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.mahout.classifier.sgd;
+package org.apache.mahout.vectors;
import com.google.common.collect.HashMultiset;
import com.google.common.collect.Multiset;
Copied:
mahout/trunk/core/src/main/java/org/apache/mahout/vectors/ConstantValueEncoder.java
(from r986125,
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/ConstantValueEncoder.java)
URL:
http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/vectors/ConstantValueEncoder.java?p2=mahout/trunk/core/src/main/java/org/apache/mahout/vectors/ConstantValueEncoder.java&p1=mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/ConstantValueEncoder.java&r1=986125&r2=986372&rev=986372&view=diff
==============================================================================
---
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/ConstantValueEncoder.java
(original)
+++
mahout/trunk/core/src/main/java/org/apache/mahout/vectors/ConstantValueEncoder.java
Tue Aug 17 16:22:05 2010
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.mahout.classifier.sgd;
+package org.apache.mahout.vectors;
import org.apache.mahout.math.Vector;
Copied:
mahout/trunk/core/src/main/java/org/apache/mahout/vectors/ContinuousValueEncoder.java
(from r986125,
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/ContinuousValueEncoder.java)
URL:
http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/vectors/ContinuousValueEncoder.java?p2=mahout/trunk/core/src/main/java/org/apache/mahout/vectors/ContinuousValueEncoder.java&p1=mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/ContinuousValueEncoder.java&r1=986125&r2=986372&rev=986372&view=diff
==============================================================================
---
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/ContinuousValueEncoder.java
(original)
+++
mahout/trunk/core/src/main/java/org/apache/mahout/vectors/ContinuousValueEncoder.java
Tue Aug 17 16:22:05 2010
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.mahout.classifier.sgd;
+package org.apache.mahout.vectors;
import org.apache.mahout.math.Vector;
Copied:
mahout/trunk/core/src/main/java/org/apache/mahout/vectors/Dictionary.java (from
r986125,
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/Dictionary.java)
URL:
http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/vectors/Dictionary.java?p2=mahout/trunk/core/src/main/java/org/apache/mahout/vectors/Dictionary.java&p1=mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/Dictionary.java&r1=986125&r2=986372&rev=986372&view=diff
==============================================================================
---
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/Dictionary.java
(original)
+++ mahout/trunk/core/src/main/java/org/apache/mahout/vectors/Dictionary.java
Tue Aug 17 16:22:05 2010
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.mahout.classifier.sgd;
+package org.apache.mahout.vectors;
import com.google.common.collect.Maps;
Copied:
mahout/trunk/core/src/main/java/org/apache/mahout/vectors/FeatureVectorEncoder.java
(from r986125,
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/FeatureVectorEncoder.java)
URL:
http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/vectors/FeatureVectorEncoder.java?p2=mahout/trunk/core/src/main/java/org/apache/mahout/vectors/FeatureVectorEncoder.java&p1=mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/FeatureVectorEncoder.java&r1=986125&r2=986372&rev=986372&view=diff
==============================================================================
---
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/FeatureVectorEncoder.java
(original)
+++
mahout/trunk/core/src/main/java/org/apache/mahout/vectors/FeatureVectorEncoder.java
Tue Aug 17 16:22:05 2010
@@ -15,10 +15,10 @@
* limitations under the License.
*/
-package org.apache.mahout.classifier.sgd;
+package org.apache.mahout.vectors;
import com.google.common.collect.Sets;
-import org.apache.mahout.classifier.MurmurHash;
+import org.apache.mahout.vectors.MurmurHash;
import org.apache.mahout.math.Vector;
import java.nio.charset.Charset;
Copied:
mahout/trunk/core/src/main/java/org/apache/mahout/vectors/MurmurHash.java (from
r986125,
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/MurmurHash.java)
URL:
http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/vectors/MurmurHash.java?p2=mahout/trunk/core/src/main/java/org/apache/mahout/vectors/MurmurHash.java&p1=mahout/trunk/core/src/main/java/org/apache/mahout/classifier/MurmurHash.java&r1=986125&r2=986372&rev=986372&view=diff
==============================================================================
---
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/MurmurHash.java
(original)
+++ mahout/trunk/core/src/main/java/org/apache/mahout/vectors/MurmurHash.java
Tue Aug 17 16:22:05 2010
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.mahout.classifier;
+package org.apache.mahout.vectors;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
@@ -148,22 +148,22 @@ public class MurmurHash {
}
@Deprecated
- public static int hash_original(byte[] data, int seed) {
+ public static int hashOriginal(byte[] data, int seed) {
int m = 0x5bd1e995;
int r = 24;
int h = seed ^ data.length;
int len = data.length;
- int len_4 = len >> 2;
+ int len4 = len >> 2;
int k;
- for (int i = 0; i < len_4; i++) {
- int i_4 = i << 2;
- k = data[i_4];
- k |= data[i_4 + 1] << 8;
- k |= data[i_4 + 2] << 16;
- k |= data[i_4 + 3] << 24;
+ for (int i = 0; i < len4; i++) {
+ int i4 = i << 2;
+ k = data[i4];
+ k |= data[i4 + 1] << 8;
+ k |= data[i4 + 2] << 16;
+ k |= data[i4 + 3] << 24;
k *= m;
k ^= k >>> r;
@@ -173,18 +173,18 @@ public class MurmurHash {
h ^= k;
}
- int len_m = len_4 << 2;
- int left = len - len_m;
+ int lenM = len4 << 2;
+ int left = len - lenM;
- switch (left) {
- case 3:
- h ^= (int) data[len_m + 2] << 16;
- case 2:
- h ^= (int) data[len_m + 1] << 8;
- case 1:
- h ^= (int) data[len_m];
- h *= m;
- default:
+ if (left == 3) {
+ h ^= (int) data[lenM + 2] << 16;
+ }
+ if (left >= 2) {
+ h ^= (int) data[lenM + 1] << 8;
+ }
+ if (left >= 1) {
+ h ^= (int) data[lenM];
+ h *= m;
}
h ^= h >>> 13;
@@ -195,26 +195,26 @@ public class MurmurHash {
}
@Deprecated
- public static long hash64A_original(byte[] data, int seed) {
+ public static long hash64AOriginal(byte[] data, int seed) {
long m = 0xc6a4a7935bd1e995L;
int r = 47;
int len = data.length;
- int len_8 = len >> 3;
+ int len8 = len >> 3;
long h = seed ^ (len * m);
long k;
- for (int i = 0; i < len_8; i++) {
- int i_8 = i << 3;
- k = (data[i_8 + 7] & 0xffL) << 56;
- k |= (data[i_8 + 6] & 0xffL) << 48;
- k |= (data[i_8 + 5] & 0xffL) << 40;
- k |= (data[i_8 + 4] & 0xffL) << 32;
- k |= (data[i_8 + 3] & 0xffL) << 24;
- k |= (data[i_8 + 2] & 0xffL) << 16;
- k |= (data[i_8 + 1] & 0xffL) << 8;
- k |= (data[i_8] & 0xffL);
+ for (int i = 0; i < len8; i++) {
+ int i8 = i << 3;
+ k = (data[i8 + 7] & 0xffL) << 56;
+ k |= (data[i8 + 6] & 0xffL) << 48;
+ k |= (data[i8 + 5] & 0xffL) << 40;
+ k |= (data[i8 + 4] & 0xffL) << 32;
+ k |= (data[i8 + 3] & 0xffL) << 24;
+ k |= (data[i8 + 2] & 0xffL) << 16;
+ k |= (data[i8 + 1] & 0xffL) << 8;
+ k |= (data[i8] & 0xffL);
k *= m;
k ^= k >>> r;
@@ -224,26 +224,30 @@ public class MurmurHash {
h *= m;
}
- int len_m = len_8 << 3;
- int left = len - len_m;
+ int lenM = len8 << 3;
+ int left = len - lenM;
- switch (left) {
- case 7:
- h ^= (data[len_m + 6] & 0xffL) << 48;
- case 6:
- h ^= (data[len_m + 5] & 0xffL) << 40;
- case 5:
- h ^= (data[len_m + 4] & 0xffL) << 32;
- case 4:
- h ^= (data[len_m + 3] & 0xffL) << 24;
- case 3:
- h ^= (data[len_m + 2] & 0xffL) << 16;
- case 2:
- h ^= (data[len_m + 1] & 0xffL) << 8;
- case 1:
- h ^= data[len_m] & 0xffL;
- h *= m;
- default:
+ if (left == 7) {
+ h ^= (data[lenM + 6] & 0xffL) << 48;
+ }
+ if (left >= 6) {
+ h ^= (data[lenM + 5] & 0xffL) << 40;
+ }
+ if (left >= 5) {
+ h ^= (data[lenM + 4] & 0xffL) << 32;
+ }
+ if (left >= 4) {
+ h ^= (data[lenM + 3] & 0xffL) << 24;
+ }
+ if (left >= 3) {
+ h ^= (data[lenM + 2] & 0xffL) << 16;
+ }
+ if (left >= 2) {
+ h ^= (data[lenM + 1] & 0xffL) << 8;
+ }
+ if (left >= 1) {
+ h ^= data[lenM] & 0xffL;
+ h *= m;
}
h ^= h >>> r;
Copied:
mahout/trunk/core/src/main/java/org/apache/mahout/vectors/StaticWordValueEncoder.java
(from r986125,
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/StaticWordValueEncoder.java)
URL:
http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/vectors/StaticWordValueEncoder.java?p2=mahout/trunk/core/src/main/java/org/apache/mahout/vectors/StaticWordValueEncoder.java&p1=mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/StaticWordValueEncoder.java&r1=986125&r2=986372&rev=986372&view=diff
==============================================================================
---
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/StaticWordValueEncoder.java
(original)
+++
mahout/trunk/core/src/main/java/org/apache/mahout/vectors/StaticWordValueEncoder.java
Tue Aug 17 16:22:05 2010
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.mahout.classifier.sgd;
+package org.apache.mahout.vectors;
import java.util.Collections;
import java.util.Map;
Copied:
mahout/trunk/core/src/main/java/org/apache/mahout/vectors/TextValueEncoder.java
(from r986125,
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/TextValueEncoder.java)
URL:
http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/vectors/TextValueEncoder.java?p2=mahout/trunk/core/src/main/java/org/apache/mahout/vectors/TextValueEncoder.java&p1=mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/TextValueEncoder.java&r1=986125&r2=986372&rev=986372&view=diff
==============================================================================
---
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/TextValueEncoder.java
(original)
+++
mahout/trunk/core/src/main/java/org/apache/mahout/vectors/TextValueEncoder.java
Tue Aug 17 16:22:05 2010
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.mahout.classifier.sgd;
+package org.apache.mahout.vectors;
import com.google.common.base.Splitter;
import org.apache.mahout.math.Vector;
Copied:
mahout/trunk/core/src/main/java/org/apache/mahout/vectors/WordValueEncoder.java
(from r986125,
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/WordValueEncoder.java)
URL:
http://svn.apache.org/viewvc/mahout/trunk/core/src/main/java/org/apache/mahout/vectors/WordValueEncoder.java?p2=mahout/trunk/core/src/main/java/org/apache/mahout/vectors/WordValueEncoder.java&p1=mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/WordValueEncoder.java&r1=986125&r2=986372&rev=986372&view=diff
==============================================================================
---
mahout/trunk/core/src/main/java/org/apache/mahout/classifier/sgd/WordValueEncoder.java
(original)
+++
mahout/trunk/core/src/main/java/org/apache/mahout/vectors/WordValueEncoder.java
Tue Aug 17 16:22:05 2010
@@ -15,7 +15,7 @@
* limitations under the License.
*/
-package org.apache.mahout.classifier.sgd;
+package org.apache.mahout.vectors;
import org.apache.mahout.math.Vector;
Modified:
mahout/trunk/core/src/test/java/org/apache/mahout/classifier/sgd/CsvRecordFactoryTest.java
URL:
http://svn.apache.org/viewvc/mahout/trunk/core/src/test/java/org/apache/mahout/classifier/sgd/CsvRecordFactoryTest.java?rev=986372&r1=986371&r2=986372&view=diff
==============================================================================
---
mahout/trunk/core/src/test/java/org/apache/mahout/classifier/sgd/CsvRecordFactoryTest.java
(original)
+++
mahout/trunk/core/src/test/java/org/apache/mahout/classifier/sgd/CsvRecordFactoryTest.java
Tue Aug 17 16:22:05 2010
@@ -20,6 +20,7 @@ package org.apache.mahout.classifier.sgd
import com.google.common.collect.ImmutableMap;
import org.apache.mahout.math.DenseVector;
import org.apache.mahout.math.Vector;
+import org.apache.mahout.vectors.Dictionary;
import org.junit.Assert;
import org.junit.Test;
Copied:
mahout/trunk/core/src/test/java/org/apache/mahout/vectors/ContinuousValueEncoderTest.java
(from r986125,
mahout/trunk/core/src/test/java/org/apache/mahout/classifier/sgd/ContinuousValueEncoderTest.java)
URL:
http://svn.apache.org/viewvc/mahout/trunk/core/src/test/java/org/apache/mahout/vectors/ContinuousValueEncoderTest.java?p2=mahout/trunk/core/src/test/java/org/apache/mahout/vectors/ContinuousValueEncoderTest.java&p1=mahout/trunk/core/src/test/java/org/apache/mahout/classifier/sgd/ContinuousValueEncoderTest.java&r1=986125&r2=986372&rev=986372&view=diff
==============================================================================
---
mahout/trunk/core/src/test/java/org/apache/mahout/classifier/sgd/ContinuousValueEncoderTest.java
(original)
+++
mahout/trunk/core/src/test/java/org/apache/mahout/vectors/ContinuousValueEncoderTest.java
Tue Aug 17 16:22:05 2010
@@ -15,10 +15,12 @@
* limitations under the License.
*/
-package org.apache.mahout.classifier.sgd;
+package org.apache.mahout.vectors;
import org.apache.mahout.math.DenseVector;
import org.apache.mahout.math.Vector;
+import org.apache.mahout.vectors.ContinuousValueEncoder;
+import org.apache.mahout.vectors.FeatureVectorEncoder;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
Copied:
mahout/trunk/core/src/test/java/org/apache/mahout/vectors/MurmurHashTest.java
(from r986125,
mahout/trunk/core/src/test/java/org/apache/mahout/classifier/MurmurHashTest.java)
URL:
http://svn.apache.org/viewvc/mahout/trunk/core/src/test/java/org/apache/mahout/vectors/MurmurHashTest.java?p2=mahout/trunk/core/src/test/java/org/apache/mahout/vectors/MurmurHashTest.java&p1=mahout/trunk/core/src/test/java/org/apache/mahout/classifier/MurmurHashTest.java&r1=986125&r2=986372&rev=986372&view=diff
==============================================================================
---
mahout/trunk/core/src/test/java/org/apache/mahout/classifier/MurmurHashTest.java
(original)
+++
mahout/trunk/core/src/test/java/org/apache/mahout/vectors/MurmurHashTest.java
Tue Aug 17 16:22:05 2010
@@ -15,9 +15,10 @@
* limitations under the License.
*/
-package org.apache.mahout.classifier;
+package org.apache.mahout.vectors;
import junit.framework.TestCase;
+import org.apache.mahout.vectors.MurmurHash;
import org.junit.Test;
import java.io.UnsupportedEncodingException;
@@ -44,9 +45,9 @@ public class MurmurHashTest extends Test
@Test
public void testHash64original() throws UnsupportedEncodingException {
// test data generated by running MurmurHash2_64.cpp
- assertEquals(0x9cc9c33498a95efbL,
MurmurHash.hash64A_original("abc".getBytes("UTF-8"), 0));
- assertEquals(0xd2c8c9b470122bddL, MurmurHash.hash64A_original("abc def
ghi jkl ".getBytes("UTF-8"), 0));
- assertEquals(0xcd37895736a81cbcL, MurmurHash.hash64A_original("abc def
ghi jkl moreGoo".getBytes("UTF-8"), 0));
+ assertEquals(0x9cc9c33498a95efbL,
MurmurHash.hash64AOriginal("abc".getBytes("UTF-8"), 0));
+ assertEquals(0xd2c8c9b470122bddL, MurmurHash.hash64AOriginal("abc def
ghi jkl ".getBytes("UTF-8"), 0));
+ assertEquals(0xcd37895736a81cbcL, MurmurHash.hash64AOriginal("abc def
ghi jkl moreGoo".getBytes("UTF-8"), 0));
}
@Test
@@ -60,8 +61,8 @@ public class MurmurHashTest extends Test
@Test
public void testHashNio() throws UnsupportedEncodingException {
// test data generated by running MurmurHashNeutral2.cpp
- assertEquals(0x13577c9b,
MurmurHash.hash_original("abc".getBytes("UTF-8"), 0));
- assertEquals(0x6fec441b, MurmurHash.hash_original("abc def ghi jkl
".getBytes("UTF-8"), 0));
- assertEquals(0x7e953277, MurmurHash.hash_original("abc def ghi jkl
moreGoo".getBytes("UTF-8"), 0));
+ assertEquals(0x13577c9b,
MurmurHash.hashOriginal("abc".getBytes("UTF-8"), 0));
+ assertEquals(0x6fec441b, MurmurHash.hashOriginal("abc def ghi jkl
".getBytes("UTF-8"), 0));
+ assertEquals(0x7e953277, MurmurHash.hashOriginal("abc def ghi jkl
moreGoo".getBytes("UTF-8"), 0));
}
}
Copied:
mahout/trunk/core/src/test/java/org/apache/mahout/vectors/TextValueEncoderTest.java
(from r986125,
mahout/trunk/core/src/test/java/org/apache/mahout/classifier/sgd/TextValueEncoderTest.java)
URL:
http://svn.apache.org/viewvc/mahout/trunk/core/src/test/java/org/apache/mahout/vectors/TextValueEncoderTest.java?p2=mahout/trunk/core/src/test/java/org/apache/mahout/vectors/TextValueEncoderTest.java&p1=mahout/trunk/core/src/test/java/org/apache/mahout/classifier/sgd/TextValueEncoderTest.java&r1=986125&r2=986372&rev=986372&view=diff
==============================================================================
---
mahout/trunk/core/src/test/java/org/apache/mahout/classifier/sgd/TextValueEncoderTest.java
(original)
+++
mahout/trunk/core/src/test/java/org/apache/mahout/vectors/TextValueEncoderTest.java
Tue Aug 17 16:22:05 2010
@@ -15,11 +15,13 @@
* limitations under the License.
*/
-package org.apache.mahout.classifier.sgd;
+package org.apache.mahout.vectors;
import com.google.common.collect.ImmutableMap;
import org.apache.mahout.math.DenseVector;
import org.apache.mahout.math.Vector;
+import org.apache.mahout.vectors.StaticWordValueEncoder;
+import org.apache.mahout.vectors.TextValueEncoder;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
Copied:
mahout/trunk/core/src/test/java/org/apache/mahout/vectors/WordLikeValueEncoderTest.java
(from r986125,
mahout/trunk/core/src/test/java/org/apache/mahout/classifier/sgd/WordLikeValueEncoderTest.java)
URL:
http://svn.apache.org/viewvc/mahout/trunk/core/src/test/java/org/apache/mahout/vectors/WordLikeValueEncoderTest.java?p2=mahout/trunk/core/src/test/java/org/apache/mahout/vectors/WordLikeValueEncoderTest.java&p1=mahout/trunk/core/src/test/java/org/apache/mahout/classifier/sgd/WordLikeValueEncoderTest.java&r1=986125&r2=986372&rev=986372&view=diff
==============================================================================
---
mahout/trunk/core/src/test/java/org/apache/mahout/classifier/sgd/WordLikeValueEncoderTest.java
(original)
+++
mahout/trunk/core/src/test/java/org/apache/mahout/vectors/WordLikeValueEncoderTest.java
Tue Aug 17 16:22:05 2010
@@ -15,12 +15,15 @@
* limitations under the License.
*/
-package org.apache.mahout.classifier.sgd;
+package org.apache.mahout.vectors;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableMap;
import org.apache.mahout.math.DenseVector;
import org.apache.mahout.math.Vector;
+import org.apache.mahout.vectors.AdaptiveWordValueEncoder;
+import org.apache.mahout.vectors.FeatureVectorEncoder;
+import org.apache.mahout.vectors.StaticWordValueEncoder;
import org.junit.Test;
import java.util.Iterator;