ML.NET – Einführung in das Machine-Learning-Framework für .NET-Entwickler

Ein Fachbeitrag von Dennis Teering, Senior IT Consultant & Delivery Manager

Motivation

Dieser Artikel soll als eine Einführung für .NET-Entwickler in das Machine-Learning-Framework ML.NET dienen. Es werden die verschiedenen Einsatzgebiete und die Arbeitsweise beleuchtet.

Was ist ML.NET?

ML.NET ist ein plattformübergreifendes Open Source-Framework von Microsoft für Machine Learning, welches für verschiedene ML-Bereiche eingesetzt werden kann. Zusätzlich lässt es sich in bestehende .NET-Anwendungen integrieren. Das Framework läuft unter der MIT-Lizenz und wird für eine Integration in .NET-Anwendungen per „Microsoft.ML“-NuGet-Pakete bereitgestellt. Neben dem „primären“ NuGet-Paket können weitere Lernalgorithmen in Form von zusätzlichen NuGet-Paketen eingebunden werden. Die aktuelle Versionsnummer lautet 1.3.1 und wurde am 06.08.2019 veröffentlicht.

Was kann ML.NET
Einsatzbereiche

ML.NET kann für die nachfolgenden Bereiche eingesetzt werden.

  • Klassifikation
  • Unterteilung bzw. Einteilung von Elementen in verschiedene Bereiche bzw. Kategorien.
  • Es werden die nachfolgenden Verfahren unterstützt:
    – Binäre Klassifikation
    – Multiklassen Klassifikation
    – Clustering
  •  Regression

Eine Möglichkeit wäre hierbei die Preisvorhersage eines Hauses innerhalb eines definierten Stadtgebietes.

  • Anomalie-Erkennung

Hierbei geht es um die Erkennung von Anomalien, wie beispielsweise untypische „Ausschläge“ in einem Graphen.

  • Empfehlung

Hierbei geht es darum, konkrete und möglichst zutreffende Empfehlungen zu ermitteln. Solche Empfehlungen kennt man aus diversen Online-Einkaufsplattformen und der Musik-Streaming-Dienste.

Zusätzlich können weitere „fremde“-ML-Bibliotheken eingebunden und berücksichtigt werden. Es kann somit beispielsweise eine Objekterkennung in Bildern realisiert werden.

Arbeitsablauf

Der notwendige Arbeitsablauf, von der Erstellung des Modells bis zur Vorhersage von möglichen Ergebnissen, kann in zwei Abschnitte unterteilt werden:

Erzeugung des Modells

Hier geht es um das Sammeln und Bereitstellen der Daten zum Lernen, dem Trainie-ren des Modells anhand verschiedener Lernalgorithmen, dem Validieren des Modells anhand von Metriken, dem Verbessern des Modells bis hin zum konkreten Speichern des Modells.
Verwendung des Modells
Hier geht es um das Verwenden des gelernten Modells zur Vorhersage von Ergebnissen.

ML.NET AutoML

Neben der manuellen Erzeugung eines passenden Modells und dem damit verbundenen zeitlichen Aufwands bietet ML.NET auch ML.NET AutoML an. Mit Hilfe von ML.NET AutoML wird versucht, das optimale ML-Modell mit hoher Performance automatisiert zu erzeugen, samt optimaler Einstellungen und der Menge der notwendigen Parameter. Hierzu gibt es drei unterschiedliche Möglichkeiten, wobei nur die Binäre-, die Multiklassen-Klassifikation und die Regression unterstützt werden:

ML.NET CLI

Das Modell wird über ein Command-Line-Interface (CLI) und dem entsprechenden Aufruf in PowerShell erzeugt.

Verwendung der automatisierten ML-API per Code
Hierzu werden sogenannte „Experimente“ samt deren Settings definiert und ausgeführt. Das Ergebnis ist ein generiertes Modell.

ML.NET Model Builder

Der ML.NET Model Builder wird per Visual Studio Extension eingebunden und führt den .NET-Entwickler mittels grafischem Benutzer-Wizard durch die einzelnen Arbeitsschritte und erzeugt anschließend das Modell und die dazugehörigen C#-Klassen. Diese Klassen und das Modell können dann wiederrum in eine bestehende .NET-Anwendung integriert werden.

Fazit

Der Funktionsumfang und die daraus resultierenden Möglichkeiten sind groß und ermöglichen ein breites Anwendungsspektrum für .NET-Entwickler, vor allem durch die Möglichkeit weitere ML-Bibliotheken/Frameworks einzubeziehen. Neben einigen Beispielen und einer guten Dokumentation kann der erste Einstieg schnell erfolgen. Mit Hilfe von ML.NET AutoML steht der Entwicklung eine Möglichkeit zur Verfügung, sich auf eine zeitsparende Art und Weise ein passendes Modell auf Basis der vorhandenen Daten zu erzeugen. Des Weiteren kann die Erzeugung des Modells und der spätere Einsatz auch komplett ohne ML.NET AutoML erfolgen, so dass die Entwicklung hier alle unterstützten Einsatzbereiche abdecken kann.