One of the most interesting features of machine learning is that it lies on the boundary of several diﬀerent academic disciplines, principally computer science, statistics, mathematics, and engineering. This has been a problem as well as an asset, since these groups have traditionally not talked to each other very much. To make it even worse, the areas where machine learning methods can be applied vary even more widely, from ﬁnance to biology and medicine to physics and chemistry and beyond. Over the past ten years this inherent multi-disciplinarity has been embraced and understood, with many beneﬁts for researchers in the ﬁeld. This makes writing a textbook on machine learning rather tricky, since it is potentially of interest to people from a variety of diﬀerent academic backgrounds.
In universities, machine learning is usually studied as part of artiﬁcial intelligence, which puts it ﬁrmly into computer science and—given the focus on algorithms—it certainly ﬁts there. However, understanding why these algorithms work requires a certain amount of statistical and mathematical sophistication that is often missing from computer science undergraduates. When I started to look for a textbook that was suitable for classes of undergraduate computer science and engineering students, I discovered that the level of mathematical knowledge required was (unfortunately) rather in excess of that of the majority of the students. It seemed that there was a rather crucial gap, and it resulted in me writing the ﬁrst draft of the student notes that have become this book. The emphasis is on the algorithms that make up the machine learning methods, and on nderstanding how and why these algorithms work. It is intended to be a practical book, with lots of programming examples and is supported by a website that makes available all of the code that was used to make the ﬁgures and examples in the book.