Leveraging Machine Learning Techniques for Architecting Self-Adaptive IoT Systems