Semi-supervised dictionary learning via structural sparse preserving