Machine learning-based cloud resource allocation algorithms: a comprehensive comparative review