Which supervised learning algorithm uses hyperplanes to separate data into classes and maximizes the margin between them?