C# für maschinelles Lernen: Möglichkeiten, Grenzen und Codebeispiele

Online Python-Trainer für Anfänger

Lernen Sie Python einfach ohne theoretische Überlastung. Lösen Sie praktische Aufgaben mit automatischer Überprüfung und schreiben Sie Code direkt im Browser.

Kurs starten

Einleitung: C# in der Welt des maschinellen Lernens

Die Welt des maschinellen Lernens (ML) wird stark mit Python assoziiert: TensorFlow, PyTorch, scikit-learn – das sind die wichtigsten Werkzeuge eines Data Scientists. Allerdings bieten das .NET-Ökosystem und die Sprache C# einen alternativen Weg. Die Plattform ML.NET von Microsoft ermöglicht es, ML direkt in Geschäftsanwendungen auf C# zu integrieren, ohne den Code in Python umschreiben zu müssen. Aber wie praktisch ist das? In diesem Artikel analysieren wir die tatsächlichen Möglichkeiten, Grenzen und schreiben funktionierenden Code in C# für maschinelles Lernen.

Auf der Website pythonlib.ru sprechen wir oft über Python, aber heute betrachten wir die Aufgabe von einer anderen Seite. C# ist eine streng typisierte, leistungsstarke Sprache, und ihre Verwendung für ML kann in Unternehmensumgebungen, in denen bereits Legacy-Code auf .NET vorhanden ist, gerechtfertigt sein.



Schlüsselfunktionen von ML.NET: Was kann C#?

ML.NET ist eine plattformübergreifende Open-Source-Bibliothek. Sie unterstützt klassische Algorithmen: Regression, Klassifikation, Clustering sowie Deep Learning durch Integration mit TensorFlow und ONNX.



1. Textklassifikation (Sentiment Analysis)

Das bekannteste Beispiel ist die Stimmungsanalyse. ML.NET ermöglicht das Trainieren eines Modells in C#, ohne externe Skripte aufrufen zu müssen.

using Microsoft.ML;using Microsoft.ML.Data;

// 1. Datenschema definierenpublic class SentimentData{ public string Text { get; set; } public bool Label { get; set; }}

public class SentimentPrediction{ [ColumnName("PredictedLabel")] public bool Prediction { get; set; } public float Probability { get; set; }}

// 2. Daten laden und Modell trainierenvar context = new MLContext();IDataView data = context.Data.LoadFromTextFile<SentimentData>("data.tsv", separatorChar: '\\t');

var pipeline = context.Transforms.Text.FeaturizeText("Features", nameof(SentimentData.Text)) .Append(context.BinaryClassification.Trainers.SdcaLogisticRegression());

var model = pipeline.Fit(data);

// 3. Vorhersage treffenvar predictionEngine = context.Model.CreatePredictionEngine<SentimentData, SentimentPrediction>(model);var result = predictionEngine.Predict(new SentimentData { Text = "C# is great for ML!" });Console.WriteLine($"Sentiment: {(result.Prediction ? "Positive" : "Negative")}");

Dieser Code ist vollständig autark. Sie benötigen weder Python noch REST-Anfragen an externe Dienste. Alles funktioniert innerhalb eines einzigen .NET-Prozesses.



2. Integration mit TensorFlow und ONNX

Wenn Sie ein neuronales Netz benötigen (z. B. zur Bilderkennung), kann ML.NET ein vortrainiertes TensorFlow- oder ONNX-Modell laden und für die Inferenz verwenden.

var pipeline = context.Transforms.LoadImages("Image", folder, "ImagePath")    .Append(context.Transforms.ResizeImages("Image", 224, 224))    .Append(context.Transforms.ExtractPixels("Input", "Image"))    .Append(modelTensorFlow);

var prediction = pipeline.Fit(data).CreatePredictionEngine<ImageData, ImagePrediction>(data);var result = prediction.Predict(new ImageData { ImagePath = "cat.jpg" });

Ein wichtiger Punkt: Das Training eines komplexen neuronalen Netzes in C# ist derzeit nicht möglich – dafür muss Python verwendet werden. Das Laden und Verwenden eines fertigen Modells ist jedoch ein zu 100 % funktionierendes Szenario.



Grenzen von C# für ML: Warum ist Python immer noch besser?

Trotz aller Vorteile verliert C# in mehreren Schlüsselaspekten gegen Python.



1. Community-Größe und Bibliotheken

Die Anzahl der NuGet-Pakete für ML ist hunderte Male geringer als auf PyPI. Wenn Sie etwas Ungewöhnliches benötigen (z. B. einen neuen Algorithmus aus einem Artikel von 2024), ist dies höchstwahrscheinlich nur in Python verfügbar. ML.NET wird vierteljährlich aktualisiert, während scikit-learn und PyTorch praktisch kontinuierlich aktualisiert werden.



2. Modelltraining (Training)

ML.NET bewältigt Aufgaben mit tabellarischen Daten (Regression, Klassifikation) hervorragend. Aber für

Blogs

Buchempfehlungen