Teaching

CS 245: Probabilistic Foundations of Machine Learning


Description: In recent years, Machine Learning (ML) has been used in novel applications—from generating new art and music to systems that accurately and reliably predict outcomes of medical interventions in real-time. Faster computing hardware, large datasets, and the probabilistic paradigm of ML, which frames advances like neural networks within statistical learning, have enabled these developments. In this course, we introduce the foundational concepts behind the probabilistic paradigm of predictive ML: statistical model specification and learning. We will focus on connecting theory with real-world applications. Students will get hands-on experience building models for specific tasks, most taken from healthcare contexts, using probabilistic programming languages. While expanding our methodological toolkit, we will simultaneously introduce critical perspectives to examine the ethics of ML within sociotechnical systems. This course lays the foundation for advanced study and research in ML. Topics include: directed graphical models, deep regression/classification, frequentist learning, and model evaluation.

Note: I wrote a textbook especially for this course. You can learn more about my approach to ML pedagogy in this paper.


CS 345: Probabilistic and Bayesian Deep Learning (New!)


Description: In this course, we will incorporate ideas from modern deep learning into the probabilistic framework of machine learning to explore uncertainty, interpretability, and decision-making. The course develops rigorous understanding and practical fluency with Bayesian neural networks, Gaussian Processes, deep generative models (e.g. Variational Autoencoders), and scalable inference methods for high-dimensional, complex models (including variational inference and Markov Chain Monte Carlo methods). A central focus is on how probabilistic thinking informs model design, evaluation, and deployment in real-world, high-stakes settings such as healthcare. Throughout the course, students will implement and experiment with state-of-the-art probabilistic deep learning models in NumPyro, critically analyze their behavior and limitations in a way that bridges theory, computation, and ethical reflection.

Note: This course is currently under development to be offered in the Spring of 2027.


CS 230: Data Structures


Description: An introduction to techniques and building blocks for organizing large programs. Topics include: modules, abstract data types, recursion, algorithmic efficiency, and the use and implementation of standard data structures and algorithms, such as lists, trees, graphs, stacks, queues, priority queues, tables, sorting, and searching. Students become familiar with these concepts through weekly programming assignments using the Java programming language.