This course is meant to introduce students to machine learning and deep learning. ME 107 is taught at the undergraduate level and teaches students how to identify a machine learning problem in the context of real-world applications, mathematically formulate a learning problem, identify when a learning problem is well-posed, under-determined and overdetermined, and develop algorithms and Python code to solve the problem. Students are introduced to the concepts of learning algorithms, overfitting, under-fitting, statistical measures of estimators, optimization approaches to learning, principal component analysis, regression, support vector machines, and artificial neural networks.