Automated and Feature-Based Problem Characterization and Algorithm Selection Through Machine Learning