Understanding how to leverage both labeled and unlabeled data for better machine learning performance