Das kannst du mit einer Support Vector Machine machen. Eine mögliche Implementierung von SVMs gäbe es beispielweise im Python-Library scikit-learn. Falls deine Daten nicht linear separierbar sind, kannst du es auch mit Kernel-SVMs versuchen.
Wenn du das zugrundeliegende Optimierungsproblem von Hand lösen möchtest (zumindest die Variante linear-separierbar und Hard-Margin), kannst du dir diesen Post durchlesen. Wenn man aber viele Punkte hat, ist das Ganze sehr unpraktisch.