summaryrefslogtreecommitdiffstats
path: root/ml/dlib/docs/docs/books.xml
diff options
context:
space:
mode:
Diffstat (limited to 'ml/dlib/docs/docs/books.xml')
-rw-r--r--ml/dlib/docs/docs/books.xml306
1 files changed, 306 insertions, 0 deletions
diff --git a/ml/dlib/docs/docs/books.xml b/ml/dlib/docs/docs/books.xml
new file mode 100644
index 000000000..cda81bd86
--- /dev/null
+++ b/ml/dlib/docs/docs/books.xml
@@ -0,0 +1,306 @@
+<?xml version="1.0" encoding="ISO-8859-1"?>
+<?xml-stylesheet type="text/xsl" href="stylesheet.xsl"?>
+
+<doc>
+ <title>Suggested Books</title>
+
+
+
+ <!-- ************************************************************************* -->
+
+ <body>
+
+ <p>
+ One of the major goals of dlib is to have documentation that enables
+ someone to easily make use of its various components. Ideally,
+ you would read a short description of something, understand it immediately,
+ and begin using it in your application without any difficulty. Obviously, this
+ depends partly on the background of the user. For example, if you have
+ never written C++ software before then it probably isn't going to be this easy.
+ </p>
+ <p>
+ This page is meant to complement the main library documentation by providing
+ references to books, along with my commentary, which explain most of
+ the background material needed to understand the various parts of the library.
+ In most cases these are the books I learned from during the process
+ of creating dlib. As always, if you disagree with anything or think I have left out
+ an important text then shoot me an <a href="mailto:davis@dlib.net">email</a>.
+ </p>
+ <br/><br/>
+
+
+ <h2>General Programming</h2>
+ <ul>
+ <h3>C++</h3>
+ <ul>
+ <li> <i>Programming: Principles and Practice Using C++</i> by Bjarne Stroustrup
+ <ul> This is the sort of book you would use in a freshman introduction-to-programming class.
+ So if you are just beginning to study programming and are interested in C++ then I think
+ it is probably safe to say this is one of the best books you could read. </ul> <br/>
+ </li>
+ <li> <i>Accelerated C++: Practical Programming by Example</i> by Andrew Koenig and Barbara E. Moo
+ <ul> If you are new to C++ but already know how to program then this is a great book. It's also
+ about one fourth the size of the Stroustrup book. </ul> <br/>
+ </li>
+ <li> <i>Effective C++: 55 Specific Ways to Improve Your Programs and Designs</i> (3rd Edition) by Scott Meyers
+ <ul> This is a great intermediate level C++ book. Most people have heard the jokes about
+ how easy it is to shoot yourself in the foot with C++. This book explains many things you
+ need to know about the language to avoid doing so on a regular basis. So if you are
+ writing C++ software then this is a must-read. I would even claim that
+ you are a danger to the C++ software you touch unless you know what is in this book.
+ I'm not kidding. Finally, the book isn't just about the quirks of C++. It also discusses many general
+ software engineering ideas which have wide applicability. So in this
+ respect it is a great book for any software developer to read.
+ </ul><br/>
+ </li>
+ <li> <i>More Effective C++: 35 New Ways to Improve Your Programs and Designs</i> by Scott Meyers
+ <ul> Consider this an expansion to Effective C++. If you are going to read the above
+ book then you would almost certainly benefit from reading this one as well.
+ </ul><br/>
+ </li>
+ <li> <i>The C++ Standard Library: A Tutorial and Reference</i> by Nicolai M. Josuttis
+ <ul> If you are going to buy a reference book on the C++ standard library then this
+ is the one to get. I think you
+ will find it is better than any of the available online references. So if you find
+ yourself frustrated with the online resources, then this is the book for you.
+ </ul><br/>
+ </li>
+ <li> <a href="http://www.cplusplus.com/reference/">Online C++ Standard Library Reference</a>
+ <ul> What I said aside, this is a good online reference. I often find myself referring to it
+ when I do not have the Josuttis book on hand.
+ </ul><br/>
+ </li>
+ </ul>
+
+
+ <h3>Multithreading</h3>
+ <ul>
+ <li> <i>Programming with POSIX Threads</i> by David R. Butenhof
+ <ul> When I was an undergrad, this book was my main resource for learning about multithreading.
+ It was enjoyable to read, as are all the books on this list, and covered everything
+ in great depth without becoming overbearing. Also, despite what the title may suggest,
+ this book is useful for understanding multithreading broadly, not just multithreading
+ on POSIX systems.
+ </ul><br/>
+ </li>
+ </ul>
+
+ <h3>Network Programming</h3>
+ <ul>
+ <li> <i>Unix Network Programming, Volume 1: The Sockets Networking API</i> (3rd Edition)
+ by W. Richard Stevens
+ <ul> A lot of people call this book the network programming Bible and
+ this praise is well deserved. If you want a deep understanding of how computer networks
+ function, including the Internet, then this is the book to read. As with
+ the Butenhof book above, this is an excellent choice even for people who do not
+ intend to write software for Unix systems.
+ </ul><br/>
+ </li>
+ </ul>
+
+ <h3>WIN32 Programming</h3>
+ It has been a long time since I needed to refer to these two books. However,
+ they contained information I couldn't find elsewhere no matter
+ how hard I looked. So I recommend them in case you need to create or understand
+ some low level win32 code.
+ <br/>
+ <br/>
+ <ul>
+ <li> <i>Win32 Programming</i> by Brent E. Rector and Joseph M. Newcomer </li>
+ <li> <i>Programming Windows</i> by Charles Petzold </li>
+ <li> <a href="http://msdn.microsoft.com/en-us/library/default.aspx">MSDN Library</a>
+ <ul> This is Microsoft's online reference documentation. It is very large and sometimes
+ confusing. But at the end of the day you should be able to find the documentation
+ for just about every function in the entire Windows API.
+ </ul><br/>
+ </li>
+ </ul>
+ </ul>
+
+
+
+
+
+ <h2>Computer Science: Algorithms and Data Structures</h2>
+ <ul>
+ <li> <i>Introduction to Algorithms</i> by Cormen, Leiserson, Rivest and Stein
+ <ul> You should get this book if you are looking for a good discussion of the classic computer science
+ algorithms and data structures (e.g. most of the components on the <a href="containers.html">containers</a>
+ page).
+ </ul><br/>
+ </li>
+ <li> <i>Algorithms in C++, Parts 1-4: Fundamentals, Data Structure, Sorting, Searching</i>
+ (3rd Edition) by Robert Sedgewick
+ <ul> This is another good algorithms book. If you are going to get only one book on this
+ subject then get the one above. However, when I was learning about these topics I
+ used both these books and on many occasions I found it helpful to read the description
+ of an algorithm or data structure in both. Where one description was a little vague or
+ confusing the other generally filled in the gaps.
+ </ul><br/>
+ </li>
+ </ul>
+
+
+
+ <h2>Lossless Data Compression</h2>
+ <ul>
+ <li> <i>Text Compression</i> by Bell, Cleary, and Witten
+ <ul> When I was studying data compression this was my most useful
+ resource. If you are looking to understand how lossless data compression
+ algorithms work then this is the book you want. It is completely self-contained
+ and an absolute joy to read. Note that contrary to one of the reviews on
+ amazon.com, the book <i>Managing Gigabytes</i> is not the second edition of this book;
+ if this topic interests you then be sure you get the 318 page
+ book published in 1990.
+ </ul><br/>
+ </li>
+ </ul>
+
+
+
+ <h2>General Math</h2>
+
+ <ul>
+ <li> <i>Linear Algebra Done Right</i> by Sheldon Jay Axler
+ <ul> If a matrix seems like an arbitrary grid of numbers or you find that
+ you are confused by vectors, matrices, and the various things
+ that get done with them then this book will change your whole view of this subject.
+ It doesn't teach you any algorithms. Instead, it will give you a general
+ framework in which to think about all this stuff. Once you have that down
+ everything else will start to make a lot more sense. If all goes well
+ you will even start to agree with the following: linear algebra is beautiful. :)
+ </ul><br/>
+ </li>
+ <li> <i>Numerical Linear Algebra</i> by Trefethen and Bau
+ <ul> While <i>Linear Algebra Done Right</i> is fairly abstract, this book by
+ Trefethen and Bau will
+ explain some of the actual algorithms that are often used.
+ This is a great second book if you find that you want to know more about
+ the SVD, LU decomposition, or various other algorithms involving linear algebra.
+ </ul><br/>
+ </li>
+ <li> <i>Calculus: Single and Multivariable</i> by Hughes-Hallett, Gleason, and McCallum
+ <ul>
+ Some of the books below will require and understanding of basic calculus. So
+ I'm recommending this book. It was the book I used as an undergrad and I
+ remember it being alright. That isn't exactly a glowing review so if you
+ are really considering buying a calculus book you may want to check out
+ other reviews before picking this one.
+ </ul><br/>
+ </li>
+ <li> <i>Introduction to Real Analysis</i> (third edition) by Bartle and Sherbert
+ <ul> At some level real analysis is like a really rigorous repeat of calculus.
+ So if you already have an undergraduate education in calculus and
+ you are reading things that seem reminiscent of calculus but involve
+ stuff you haven't seen before (e.g. sup, inf, "sets of numbers", sequences of points)
+ then you may be in need of a real analysis book. This one is quite good and should
+ be accessible to someone with the usual undergraduate computer science math background.
+ </ul><br/>
+ </li>
+ </ul>
+
+
+
+
+
+ <h2>Optimization</h2>
+
+ The subject of linear algebra is fundamental to optimization. So you must be familiar
+ with the contents of a book like <i>Linear Algebra Done Right</i> if you are going to study
+ this area. You will also need to know how to find the derivative of a function and
+ understand what a derivative is all about. So you will need to know a little bit of
+ calculus. Finally, once in a while you will need to know a little bit about real
+ analysis. Ultimately, what you need all depends on how deep you want to go.
+
+ <ul>
+ <li> <i>Practical Methods of Optimization</i> (second edition) by R. Fletcher 1987
+ <ul> I love this book. When I got it I literally spent my weekends sitting around
+ reading it for hours. It is a fascinating and well written introduction to
+ the subject of optimization. This has been my most valuable resource for
+ learning the fundamentals of optimization and I cannot recommend it highly enough.
+ </ul><br/>
+ </li>
+ <li> <i>Numerical Optimization</i> by Jorge Nocedal and Stephen Wright 2006
+ <ul> This is a more recent text on optimization that is also very good. It
+ covers many algorithms not covered by the above book.
+ </ul><br/>
+ </li>
+ <li> <i>Introduction to Derivative-Free Optimization</i> by Conn, Scheinberg, and Vicente
+ <ul> If you want to understand algorithms like <a href="optimization.html#find_min_bobyqa">BOBYQA</a>
+ then this is a good recent book on the subject. Note that a book like <i>Practical Methods of Optimization</i>
+ is almost certainly a prerequisite for reading this book. As an aside, BOBYQA is not discussed in this book but
+ its predecessor, NEWUOA is.
+ </ul><br/>
+ </li>
+ </ul>
+
+
+
+
+ <h2>Machine Learning</h2>
+
+ <ul>
+ <li> <i>Artificial Intelligence: A Modern Approach </i> (3rd Edition) by Stuart Russell and Peter Norvig
+ <ul> This book is about the much broader field of AI but it contains an excellent introduction
+ to machine learning and it also covers other useful topics like <a href="bayes.html">bayesian networks</a>.
+ Moreover, it is very well written and self-contained. So you don't need any particular
+ background to be able to learn from it apart from a typical undergraduate background
+ in computer science.
+ </ul><br/>
+ </li>
+ <li> <i>Learning with Kernels: Support Vector Machines, Regularization, Optimization, and Beyond </i>
+ by Bernhard Schlkopf and Alexander J. Smola
+ <ul> Most of the machine learning tools in dlib are implementations of various kernel methods.
+ So if you want a book that covers this topic in great depth as well as breadth then this is
+ probably the book for you. The most important prerequisite for this book is linear
+ algebra. Virtually everything in this book depends on linear algebra in a fundamental way.
+ <p>
+ The second important subject is optimization. Whenever you see the text
+ mention the KKT conditions, duality, "primal variables", or quadratic programming it
+ is talking about ideas from optimization. A good book which will explain all this to you
+ is <i>Practical Methods of Optimization</i>. Note that this book calls the KKT conditions
+ just the "KT" conditions. It is talking about the same thing. Also, duality
+ is something that comes up a lot in optimization but in the context of machine learning
+ usually people are talking about a particular form known as the Wolfe Dual.
+ </p>
+ It would also be good (but maybe not critical depending on which parts you want to read) to
+ be familiar with real analysis.
+ </ul><br/>
+ </li>
+ <li> <i>Kernel Methods for Pattern Analysis </i> by John Shawe-Taylor and Nello Cristianini
+ <ul> This is another good book about kernel methods. If you have to choose between
+ this book and <i>Learning with Kernels</i> I would go with <i>Learning with Kernels</i>. However, it is
+ good to have both since reading different presentations of difficult subjects
+ usually makes learning them easier.
+ </ul><br/>
+ </li>
+
+ <li> <i>Structured Prediction and Learning in Computer Vision</i> by Sebastian Nowozin and Christoph H. Lampert 2011
+ <ul> If you are looking for a book discussing the background material necessary
+ for understanding things like the <a href="ml.html#structural_svm_problem">Structural SVM</a>
+ tools in dlib then this is a good book. It is also available online
+ in <a href="http://www.nowozin.net/sebastian/papers/nowozin2011structured-tutorial.pdf">PDF form</a>.
+ </ul><br/>
+ </li>
+
+ </ul>
+
+ <h2>Image Processing</h2>
+ <ul>
+ <li> <i>Digital Image Processing</i> by Rafael C. Gonzalez and Richard E. Woods
+ <ul> This is a terrific introduction to digital image processing.
+ By and large this book doesn't require any special prerequisites. Sometimes
+ calculus shows up, but not too much.
+ </ul><br/>
+ </li>
+ </ul>
+
+
+ </body>
+
+
+
+ <!-- ************************************************************************* -->
+
+</doc>
+