tldr; There is not necessarily a "best" fingerprint method because there are many, many ways to generate fingerprints. ECFP4 or ECFP6 with >2048 bits is usually decent.
Generally speaking, a fingerprint is some large vector, typically binary, used for similarity-based screening and more recently machine learning. The elements of the fingerprint are some type of chemical descriptor.
Some recent reviews:
IMHO, there are a few general categories:
- Structural pattern fingerprints (e.g. MACCS) - sets of functional group patterns (e.g. alkyl chains, aromatic rings, ketones, ..) one bit or count per functional group in the fingerprint.
- Daylight-style linear fingerprints - take the atom, and it's linear neighbors
- Circular-style fingerprints (e.g. ECFP) - generating a radius or diameter around the neighbors of an atom. Like the linear fingerprints, these can essentially generate an infinite number of patterns, so it's hashed to a fixed bit vector
- 3D property fingerprints - interatomic distances, surfaces, electrostatic fields, etc.
There are countless new fingerprint schemes produced each year, e.g.
Open Babel can compute a few pattern-style fingerprints (FP3, FP4, and MACCS), the Daylight-style linear FP2 fingerprint, and a variety of ECFP circular fingerprint styles, e.g. ECFP4.
RDKit can generate a whole pile of fingerprints too: http://rdkit.org/docs/GettingStartedInPython.html#fingerprinting-and-molecular-similarity
You might say, but is there a good place to start? The Morgan circular / ECFP fingerprints are really good, especially with a fairly large bit vector (e.g. 2048 bits per molecule) to hash.