IFT6390: Fundamentals of machine learning - Prerequisites

IMPORTANT: Please do not register for this class unless you have read and carefully considered all the class requirements listed in the following two sections.

Requirements and prerequisites

Machine learning is a very exciting discipline, but requires building upon some important skills. Before we begin, you should possess good knowlegde of:

  1. Python programming is mandatory. You cannot use a different programming language in the class.
  2. Linear algebra
  3. Probability

The pace is meant to be intensive and the homework and exam requirements are going to be tough. As a result, if you have not mastered those three required skills, you should work on them first. This class will not teach you the required math or programming, but you will need them to pass the class.

As an indication, students who took the class in 2019 reported that to keep up with the class’s needs, they worked on average:

Students who ignored our advice about the prerequisites and were missing some of it ended up having a really hard time. A number of students who were not comfortable with those prerequisites, abandoned the class before the middle of the semester.

Finally, if you are an international student, you will likely rely on scholarships in order to cover a big part of your tuition fees. Those scholarships (like the bourse C at UdeM) require you to maintain a high GPA. If you take this class before you are certain that you have the prerequisite skills, you might be putting your scholarship at risk.

Preparing to take the class

“It sounds scary so far!”

The above stats are meant to give you a clear idea of what to expect rather than to scare you. The good news is that, if you are determined, you can do it! Depending on your level this might require taking other classes first, or working to refresh your existing knowledge. This section will give you advice and resources to improve your background before taking the class.

Ideally, you have already taken university level classes in: probability, linear algebra and programming. It is hard to make up for those by yourself. Consider taking those classes at your university before you register for IFT6390. Even if you have taken such classes, you might need to work hard to improve those skills, especially if you took them many years ago, or if you didn’t perform well in those classes, or if you learned a different language other than Python.

Q: How do I make sure that I have all the necessary math prerequisites before I take IFT6390?

A: Study the book Mathematics for Machine Learning. Go over the following parts of the book, and make sure you already understand the material before IFT6390 begins.

You should be able to solve at least half of the questions from those sections. If you find that it is impossible to do that by yourself, then there is no way around it: you need to take one or two math classes before taking IFT6390.

Q: How do I make sure that I have the programming prerequisites before I take IFT6390?

A: Consider IFT6390’s lab midterm exam from 2019. The exam consists of 10 Python questions. In each question, you are given a description of the functionality of a Python fuction, along with its header. You goal is to implement the body of each function according to the instructions. IFT6390 students who took the exam had full access to internet resources during the exam, but only one hour to finish it. In the end, their solutions were graded by our system for correctness. In each question, the student got the associated points if their implementation passed all of our unit tests. If their implementation of the function returned the wrong answer in at least one of the tests, they got 0 points in that question. Since the goal was to assess effective programming, there was no partial credit for ``semi-correct’’ implementations.

Try taking the exam at home in one hour. Don’t worry if you cannot solve all questions in the alotted time. It is very hard. However, you should be able to correctly implement at least half of the functions in that time. This means that your code should run, and when you call the function with an arbitrary input it should always give the correct answer.