Good beginner/intermediate text. Provides a Scikit-Learn tour through classical machine learning algorithms such as perceptron, SVMs, decision trees, and k-nearest neighbours. Gives a decent overview of the machine learning pipeline, from data acquisition to model evaluation. The second half introduces Pytorch, and covers briefly some modern techniques such as GNNs and GANs.