Hands-On Machine Learning with Scikit-Learn and PyTorch
The question this book sets out to answer is deceptively simple: can you take someone who knows how to code and leave them, 878 pages later, able to actually build intelligent systems? Géron has been trying to answer it since 2017, and this third major version — swapping TensorFlow for PyTorch and weaving in the Hugging Face ecosystem — is his most credible answer yet.
The structure does real pedagogical work. Part one uses Scikit-Learn to cover the classical half of the field: linear models, decision trees, ensemble methods, dimensionality reduction, unsupervised learning. The chapter on end-to-end ML projects is genuinely useful — it walks through data cleaning, feature engineering, pipeline construction, and model evaluation in a way that mirrors what production ML actually looks like rather than the toy-problem version you get in most tutorials. The second half is where the book earns its 2025 publication date. PyTorch chapters build from first principles — tensors, autograd, custom training loops — before escalating to CNNs, RNNs, and transformers. The transformer chapters are particularly strong: there's real implementation, not just architecture diagrams. By the end you've built an English-to-Spanish translation model from scratch, fine-tuned an LLM using direct preference optimization, and trained reinforcement learning agents on Atari. That breadth, covered coherently in a single volume, is rare.
The weakest stretch is the transition from classical to deep learning. Géron's treatment of neural network fundamentals — backpropagation, weight initialization, batch normalization — leans on intuition where a bit more mathematical grounding would serve the reader better. If you already know why vanishing gradients happen, these chapters are fine; if you don't, you might finish them understanding the fix without fully grasping the problem. The reinforcement learning chapter also compresses a genuinely hard subject: the examples work, but the conceptual foundations feel rushed compared to the attention given to transformers. Neither is fatal for a book pitched at practitioners, but readers who want the deep "why" will need to supplement.
What Géron does better than almost any competing text is maintain consistent pacing across wildly different material. The shift from k-means clustering to diffusion models to Q-learning doesn't feel like chapter-to-chapter whiplash because the code is always grounding the ideas. The integration of Hugging Face throughout the second half is a smart practical choice — it's where the field actually works now, and teaching it alongside the underlying PyTorch rather than as a magic shortcut gives you both the abstraction and the mechanism underneath it. That framing — learn the tool, then learn what the tool is hiding — runs through the whole book and is what separates it from the tutorial-aggregation problem that plagues most ML texts.
If you're a software engineer who wants to move into ML seriously, this is the right starting point — not because it's gentle, but because it's honest about what you'll need. The coverage is current, the code actually runs, and Géron doesn't oversell what deep learning can do. Data scientists already working in the field will find the first half review and the second half genuinely useful for closing gaps. For either reader, the real value is a single coherent path from linear regression to large language models, written by someone who has shipped real ML systems and knows which parts of the theory you actually need to understand.