public class RandomProjection extends java.lang.Object implements LinearProjection, java.io.Serializable
Fortunately, we can reduce the dimension of the data far more drastically for the particular case of mixtures of Gaussians. In fact, we can map the data into just d = O(log k) dimensions, where k is the number of Gaussians. Therefore, the amount of data we will need is only polynomial in k. Note that this projected dimension is independent of the number of data points and of their original dimension. Experiments show that a value of log k works nicely.
Besides, even if the original clusters are highly eccentric (that is, far from spherical), random projection will make them more spherical. Note that eccentric clusters are problematic for the EM algorithm because intermediate covariance matrices may become singular or close to singular. Note that for high enough dimension, almost the entire Gaussian distribution lies in a thin shell.
Constructor and Description |
---|
RandomProjection(smile.math.matrix.DenseMatrix projection)
Constructor.
|
Modifier and Type | Method and Description |
---|---|
smile.math.matrix.DenseMatrix |
getProjection()
Returns the projection matrix.
|
static RandomProjection |
of(int n,
int p)
Generates a non-sparse random projection.
|
static RandomProjection |
sparse(int n,
int p)
Generates a sparse random projection.
|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
project, project
public RandomProjection(smile.math.matrix.DenseMatrix projection)
projection
- the projection matrix.public static RandomProjection of(int n, int p)
n
- the dimension of input space.p
- the dimension of feature space.public static RandomProjection sparse(int n, int p)
n
- the dimension of input space.p
- the dimension of feature space.public smile.math.matrix.DenseMatrix getProjection()
LinearProjection
getProjection
in interface LinearProjection