Low rank approximation (LRA), a general approach for discovering linear models of data, applies to a wide range of problems in many disciplines, including computer science (CS) and engineering. It is therefore an instructive approach to teach in undergraduate courses, as well as a useful tool for practitioners and researchers.

This book gently takes the reader from the basic ideas of LRA to the most critical concepts, with an adequate number of examples to explain things along the way. Readers are only asked to have some basic knowledge in linear algebra and some patience about the presence of code chunks, which may sometimes distract them from focusing on the key concepts. In fact, the text is frequently interleaved with MATLAB code according to so-called “literate programming.” This choice has two opposing effects. On one hand, it is a precious aid for students who want to put into practice what they have learned. On the other hand, it confuses the overall format of the chapters--it is not always clear whether the code chunks can be safely skipped or are required to understand the contents of the text.

The first chapter of the book is enlightening; it motivates LRA as a generalization of the classical paradigm of linear modeling, usually ascribable to least squares methods. Moreover, with a rich number of examples in areas such as system identification, signal processing, computer algebra, machine learning, and computer vision, the author clearly shows how immediate and useful the application of LRA is to data modeling. The subsequent chapters are more technical, but the author does try to make the key concepts comprehensible. Furthermore, all the code and a substantial appendix with problems and solutions are freely available online (http://homepages.vub.ac.be/~imarkovs/book.html).

A good deal of the book is focused on system theory and signal processing. This makes the book particularly appealing for readers interested in engineering subjects. Nevertheless, readers more interested in computing-related subjects can focus on the chapters related to missing data filling, data centering, nonlinear and constrained data modeling, and so on. Unfortunately, only two lines in the whole book are devoted to nonnegative matrix factorization, which falls in the realm of LRA and is of significant importance in CS.

Overall, Markovsky has presented LRA in a way that is unifying and cross-disciplinary. The pages abound with code, examples, applications, and problems, from which readers can pick according to their own interests and without the risk of losing the main thread of the book. Even though the book could be expanded to better cover computing-related topics, it is a good reference for students, practitioners, and researchers.