Background and Description
Machine learning is all about finding patterns in data. The whole
idea is to replace the "human writing code" with a "human supplying
data" and then let the system figure out what it is that the person
wants to do by looking at the examples. The most central concept in
machine learning is generalization: how to generalize beyond
the examples that have been provided at "training time" to new
examples that you see at "test time." A very large fraction of what
we'll talk about has to do with figuring out what generalization
means. We'll look at it from lots of different perspectives and
hopefully gain some understanding of what's going on.
This class will showcase machine learning technology in the context of
recommender systems, ala what you see on Amazon or NetFlix (or
eHarmony). The data we'll be working with is recommendations for CS
courses at UMD!
There are a few cool things about machine learning that I hope to get
across in class. The first is that it's broadly applicable. These
techniques have led to significant advances in many fields, including
stock trading, robotics, machine translation, computer vision,
medicine, etc. The second is that there is a very close connection
between theory and practice. While this course is more on the
"practical" side of things, almost everything we will talk about has a
huge amount of accompanying theory. The third is that once you
understand the basics of machine learning technology, it's a very open
field and lots of progress can be made quickly, effectively by
figuring out ways to formalize whatever we can figure out about the
Prerequisites: I take prerequisites seriously. There will be a
lot of math in this class and if you do not come prepared, life
will be rough. You should be able to take derivatives by hand
(preferably of multivariate functions), you should know what dot
products are and how they are related to projections onto subspaces,
you should know what Bayes' rule is and you should know that it's okay
for the density of a Gaussian probability distribution to be greater
than one. I've provided some reading
material to refresh these issues in your head, but if you haven't
at least seen these things before, you should beef up your math
background before class begins. On the
programming side, projects will be in Python; you should understand basic
computer science concepts (like recursion), basic data structures
(trees, graphs), and basic algorithms (search, sorting, etc.). (If
you know matlab, here's a nice cheat sheet.)
Structure of Class
I will take a slightly non-standard approach to class time. I will
not spend 3 hours per week going over material that was in the
readings. As a result, you should read. And you should do the short
written assignments. My responsibility will be to help you understand
things that are hard, and to give you an insider's view of the field.
Class time will be interactive. Certain homework problems will be
marked for in-class presentation, and you will do them. The
rest of class time will be spent talking about issues that arise,
things that I think are particularly interesting, doing activities
Your responsibilities are as follows:
Given that this is a three credit class, I expect you to spend nine
hours per week working on ML stuff. Three of those hours will be in
class. Of the remaining six, I expect about two to be spent reading
(one hour per assignment), two to be spent on written homeworks and
two to be spent on projects. If things are taking significantly more
time than this, you should talk to us.
- Read the assigned reading assignments before class. There
are inline questions in the reading that you should be prepared to
answer in class. Though you don't need to be right, you do need to
have an answer (or face public embarassment!).
- It will be very helpful if you write down a short list of
questions before class, though this isn't actually required. I'm
serious about reading; to demonstrate that, most reading assignments
are about 10 pages long (some are 15ish).
- Complete the assigned weekly homework assignments before class.
Some will be "starred", meaning that we will spend the first part of
class time going over the solutions. Students will present the
solutions: you will be chosen to present uniformly at random (without
replacement). We have our own handin
- Participate actively in class discussions and on Piazza
(questions and answers are considered participation!).
The purpose of grading (in my mind) is to provide extra incentive for
you to keep up with the material and to ensure that you exit the class
as a machine learnign genius. If everyone gets an A, that
would make me happy (sadly, it hasn't happened yet). The components
of grading are:
There are three programming projects, each worth 9% of your final
grade. You will be graded on both code correctness as well as your
analysis of the results. These must be completed in teams of two or
There are thirteen written homeworks (one per week), each is worth 1.5%
of your final grade (lowest one dropped). They will be graded on a high-pass (100%),
low-pass (50%) or fail (0%) basis. These are to be completed
initial homework, HW00, is not graded, but required if you do not
want to fail.)
Roughly halfway through the semester, there will be a midterm exam
that covers everything up until that point. Obviously it is to be
completed individually, but is open-book.
|25%||Final (practical) exam|
Everyone is to complete a final project, in teams of arbitrary size,
which will play the role of a practical final exam.
We will discuss the scope of the project later
You will be graded on your
in-class presentations of homework questions and other general
participation, including participation in the comments on the blog. This is mostly subjective.
Late homeworks are not allowed (without prior approval). This
is because I need to put solutions up on the web page. You may hand
any project in up to 48 hours late; however, once it is late by one
minute, your final score will be halved.
We will post notes on the blog when assignments have been graded. If
you handed something in and do not get a score for an
assignment, you have a one week moritorium on complaints.
There are no official books for this course. Our primary source will
be a collection of notes (aka CIML) I
have been writing. Some recommended (but not required) books:
The following schedule is subject to change, but likely not by very
much. The readings listed are readings that you should have finished
by that date. Everything is due by 10:55am on the date listed on the
schedule. Programming assignments are to be completed in Python.
Written assignments are to be handed in in PDF format.
One thing that students have pointed out in the past that I'll point
out to you is that Wikipedia has a
bunch of good articles related to machine learning and statistics.
Especially basic statistics stuff (various distributions, rules of
probability, etc.) are very well explained there. I highly
recommend it as an alternative source of information.
 What is machine learning?
| Basic Supervised Learing |
 Decision trees and inductive bias
 Geometry and nearest neighbors
 K-means clustering
 Perceptrons II
 Practical issues and evaluation
 Imbalanced and multiclass classification
 Ranking and collective classification
| Advanced Supervised Learing |
 Linear models and gradient descent
 Subgradient descent and support vector machines
 Probabilistic modeling
 Probabilistic modeling II
 Neural networks
 Neural networks II
 Kernel methods
 Kernel methods II
 Ensemble methods
 Efficient learning
| Unupervised Learing |
 Linear unsupervised learning
 Non-linear unsupervised learning
 Expectation maximization
 Expectation maximization II
 Semi-supervised learning
||ssl_survey (sec 2-4)
| Advanced Topics |
 Hidden Markov models
 Graphical models
 Online learning
 Structured learning
 Bayesian learning
All written homeworks are due on Thursday. See the schedule above for due dates.
You may handin your homework/projects here.
You're free to use the LaTeX source in any way you want, but you'll need haldefs.sty and notes.sty to build them.
Survey and background check
Basic concepts and geometry
Clustering and perceptrons
Perceptrons and evaluation
Gradient descent and friends
Probabilistic and neural modeling
Ensembles and efficiency
Advanced learning topics
This course has been taught (by me!) in the past:
This course is similar to several other machine learning courses, taught at
CMU (Tom Mitchell and Andrew Moore),
Stanford (Andrew Ng),
Cornell (Thorsten Joachims) and
Edinburgh (Sethu Vijayakumar).
There have also been a series of summer schools on
machine learning, some of which have videos up.
Although you won't need to use any of this software for your homeworks/projects, there are a large number of open-source machine learning toolkits out there. (Some of these may be useful for the competition.) A small sample:
- Torch3: a generic machine learning library, particularly good for neural networks, but also a lot more!
- MegaM: Optimization software for maximum entropy models, uses conjugate gradient for binary/binomial problems and LM-BFGS for multiclass problems
- FastDT: Very fast decision tree learner that implements bagging and boosting
- libSVM: a very efficient library for SVMs
- SVM-Light: another efficient library for SVMs
- Weka: the "defacto" machine learning/data-mining library
- Mallet: a library for structured prediction with CRFs (plus other stuff)
Cheating: Any assignment or exam that is handed in must be your own work. However, talking with one another to understand the material better is strongly encouraged. Recognizing the distinction between cheating and cooperation is very important.
If you copy someone else's solution, you are cheating. If you let someone else copy your solution, you are cheating.
If someone dictates a solution to you, you are cheating. Everything you hand in must be in your own words, and based on your own understanding of the solution.
If someone helps you understand the problem during a high-level discussion, you are not cheating. We strongly encourage students to help one another understand the material presented in class, in the book, and general issues relevant to the assignments.
When taking an exam, you must work independently. Any collaboration during an exam will be considered cheating.
Any student who is caught cheating will be given an E in the course and referred to the University Student Behavior Committee. Please don't take that chance - if you're having trouble understanding the material, please let us know and we will be more than happy to help.
ADA: Any student eligible for and requesting reasonable
academic accommodations due to a disability is requested to
provide, to the instructor in office hours, a letter of
the Office of
Disability Support Services (DSS) within the first two weeks of
the semester. You may reach them at 301-314-7682 or by visiting
Susquehanna Hall on the 4th Floor.
College guidelines: Document concerning adding, dropping, etc. here.