This course aims to provide a comprehensive introduction to the fundamentals of machine learning, combining both theoretical insights and practical applications. The curriculum covers essential topics such as supervised (regression, classification, decision trees, SVMs, ensemble methods like random forests and gradient boosting, and neural networks for supervised tasks) and unsupervised learning (k-means, hierarchical clustering, dimensionality reduction methods such as PCA and t-SNE), model evaluation, optimization techniques, and common machine learning frameworks. Particular emphasis will be placed on the practical implementation of the various algorithms seen during the course (using Python).