@DefaultProvider(value=MeanVarianceNormalizer.Builder.class) @Shareable public class MeanVarianceNormalizer extends AbstractVectorNormalizer implements Serializable
Normalizes against the variance of the vector with optional smoothing as described in Hofmann '04.
For user rating vectors, this normalization assumes that a user's mean rating and variance are independent of actual preferences, and attempts to describe the preference of a rating by the distance of the rating from the mean, relative to the user's normal rating variance.
The smoothing factor helps to smooth out results for users with fewer ratings by re-weighting the user's rating variance. The 'smoothing number' is a number of 'default' ratings to give the user, weighting the user's variance towards the average community variance. Accordingly, set smoothing = 0 (or use default constructor) for no smoothing. The 'global variance' parameter only pertains to smoothing, and is unnecessary otherwise.
Modifier and Type | Class and Description |
---|---|
static class |
MeanVarianceNormalizer.Builder
A Builder for UserVarianceNormalizers that computes the variance from a
RatingBuildContext.
|
Constructor and Description |
---|
MeanVarianceNormalizer()
Initializes basic normalizer with no damping.
|
MeanVarianceNormalizer(double damping,
double globalVariance)
Construct a new mean variance normalizer.
|
Modifier and Type | Method and Description |
---|---|
double |
getDamping()
Get the damping term.
|
double |
getGlobalVariance()
Get the global variance.
|
VectorTransformation |
makeTransformation(SparseVector reference)
Create a vector transformation that normalizes and denormalizes vectors
with respect to the specified entity.
|
normalize
public MeanVarianceNormalizer()
public MeanVarianceNormalizer(double damping, double globalVariance)
damping
- damping factor to use. 0 for no damping, 5 for Hofmann's implementation.globalVariance
- global variance to use in the damping calculations.public double getDamping()
public double getGlobalVariance()
public VectorTransformation makeTransformation(SparseVector reference)
VectorNormalizer
If the reference vector is empty, the returned transformation should be the identity transform. Results are undefined if the reference vector is not complete or contains NaN values.
If the normalization needs to retain a copy of the sparse vector, it will take an immutable copy.
makeTransformation
in interface VectorNormalizer
reference
- The reference vector.