Canonical discriminant analysis