I recently completed the Machine Learning by Stanford University course taught by Dr. Andrew Ng, and offered through Coursera.

Previously I had taken a several courses from DataCamp (see my review here), and while I found them valuable I still didn’t feel like I understood the material to a sufficiently deep level. I gained a general understanding of the tools and techniques presented and became proficient enough to use these tools for my own projects (here, and here), but as a mathematician I don’t feel like I understand an algorithm until I can code it up myself.

After completing Dr. Ng’s course, I feel like I understand the algorithms covered and the coursework provides a foundation that gives me confidence that I can implement these algorithms myself.

### Course Structure and Content

The course is designed to take 11 weeks assuming you spend 5-8 hours per week on it, but allows students to work at their own pace. The material each week is presented through a set of video lectures by Dr. Ng, along with quizzes and a programming exercise.

Dr. Ng covers the most commonly used algorithms for supervised and unsupervised machine learning tasks:

- Linear regression
- Logistic regression
- Neural networks
- Support vector machines
- K-means clustering
- Principal component analysis

Dr. Ng is an engaging lecturer who is able to distill the essential information into easily digested pieces. The material is presented at multiple levels providing both intuition about the algorithm and the technical details behind it.

The lectures are complemented by programming exercises. Here again the essential components of each algorithm are the focus of the assignment. For example, in the linear regression exercise the students write code to compute the cost function, and a single step in the gradient descent loop. The loop structure is provided, as are a number of test cases to allow the student to verify their solution is correct. All the assignments are done in Matlab or Octave which reduces the level of programming skill required while still requiring an understanding of the math involved in each algorithm. This isn’t a coding course and much of the tedious work is done for the students. At the same time the full code is provided to the students and can be examined by those so inclined.

### More than just algorithms

Week 6 in the syllabus is called “Advice for Applying Machine Learning,” and I found this to be one of the most beneficial topics. Following my earlier courses, I was able to use any number of machine learning algorithms (whether I really understood them or not) because I knew which library to load, and the syntax to train the model. But I didn’t know how to deal with cases that weren’t so simple (see here). My approach in these cases was to go with my gut feeling and hope for the best.

In the week 6 lectures, Dr. Ng presents best practices for applying machine learning, and discusses diagnostic tools (eg. error metrics, learning curves) that can help highlight reasons why the algorithm may be under-performing. Armed with these new skills, I’m going back to my previous problem to see what can be done.

### Best course ever?

This course came highly recommended by a number of data scientists who I respect, and it was certainly a valuable course to take. I’m happy that I now understand the algorithms covered in this course at the deep level I was looking for.

I can’t answer this question based on my own experience, as I haven’t taken every other machine learning course that is out there. However, thanks to this course, I could build a collaborative filtering algorithm and recommender system to help answer this question.

In all seriousness, I found this course to be incredibly helpful, and would recommend it to anyone who is interested in machine learning.