# Featurization¶

Many algorithms require that the input data be vectors in a (euclidean) vector space. This includes KMeans clustering, tICA, and others.

Since there’s usually no special rotational or translational reference frame in an MD simulation, it’s often desirable to remove rotational and translational motion via featurization that is insensitive to rotations and translations.

## Featurizations¶

 AtomPairsFeaturizer(pair_indices[, ...]) Featurizer based on distances between specified pairs of atoms. ContactFeaturizer([contacts, scheme, ...]) Featurizer based on residue-residue distances DRIDFeaturizer([atom_indices]) Featurizer based on distribution of reciprocal interatomic DihedralFeaturizer([types, sincos]) Featurizer based on dihedral angles. GaussianSolventFeaturizer(solute_indices, ...) Featurizer on weighted pairwise distance between solute and solvent. RMSDFeaturizer([reference_traj, ...]) Featurizer based on RMSD to one or more reference structures. RawPositionsFeaturizer([atom_indices, ref_traj]) Featurize an MD trajectory into a vector space with the raw SuperposeFeaturizer(atom_indices, reference_traj) Featurizer based on euclidian atom distances to reference structure.

## Alternative to Featurization¶

Many algorithms require vectorizable data. Other algorithms only require a pairwise distance metric, e.g. RMSD between two protein conformations. In general, you can define a pairwise distance among vectorized data, but you cannot embed data into a vector space only from pairwise distance.

Some clustering methods let you use an arbitrary distance metric, including RMSD. In this case, the input to fit() may be a list of MD trajectories instead of a list of numpy arrays. Clustering methods that allow this currently include KCenters and KMedoids.