C# para aprendizado de máquina: possibilidades, limitações e exemplos de código

Treinador Online de Python para Iniciantes

Aprenda Python facilmente sem sobrecarga teórica. Resolva tarefas práticas com verificação automática e escreva código diretamente no navegador.

Start Course

Introdução: C# no mundo do machine learning

O mundo do machine learning (ML) está fortemente associado ao Python: TensorFlow, PyTorch, scikit-learn — essas são as principais ferramentas de um data scientist. No entanto, o ecossistema .NET e a linguagem C# oferecem um caminho alternativo. A plataforma ML.NET da Microsoft permite integrar ML diretamente em aplicações de negócios em C#, sem reescrever o código em Python. Mas quão prático é isso? Neste artigo, vamos analisar as capacidades reais, as limitações e escrever código funcional em C# para machine learning.

No site pythonlib.ru, falamos frequentemente sobre Python, mas hoje vamos olhar para o problema de outra perspectiva. C# é uma linguagem fortemente tipada e de alto desempenho, e seu uso para ML pode ser justificado em ambientes corporativos onde já existe código legado em .NET.



Principais capacidades do ML.NET: o que o C# pode fazer?

ML.NET é uma biblioteca multiplataforma de código aberto. Ela suporta algoritmos clássicos: regressão, classificação, clusterização, bem como deep learning através da integração com TensorFlow e ONNX.



1. Classificação de texto (Sentiment Analysis)

O exemplo mais popular é a análise de sentimento. O ML.NET permite treinar um modelo em C# sem chamar scripts externos.

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

// 1. Definindo o esquema de dadospublic 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. Carregando os dados e treinando o modelovar 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. Fazendo uma prediçãovar 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")}");

Este código é completamente autossuficiente. Você não precisa de Python, nem de requisições REST para serviços externos. Tudo funciona dentro de um único processo .NET.



2. Integração com TensorFlow e ONNX

Se você precisar de uma rede neural (por exemplo, para reconhecimento de imagens), o ML.NET pode carregar um modelo pré-treinado do TensorFlow ou ONNX e usá-lo para inferência.

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" });

Uma observação importante: o treinamento de redes neurais complexas em C# ainda não é possível — para isso, você precisa usar Python. No entanto, carregar e usar um modelo pronto é um cenário 100% funcional.



Limitações do C# para ML: por que Python ainda é melhor?

Apesar de todas as vantagens, o C# perde para o Python em vários aspectos-chave.



1. Tamanho da comunidade e bibliotecas

O número de pacotes NuGet para ML é centenas de vezes menor do que no PyPI. Se você precisar de algo não convencional (por exemplo, um novo algoritmo de um artigo de 2024), provavelmente só existe em Python. O ML.NET é atualizado trimestralmente, enquanto scikit-learn e PyTorch são atualizados quase continuamente.



2. Treinamento de modelos (Training)

O ML.NET lida muito bem com tarefas em dados tabulares (regressão, classificação). Mas para

Blogs

Book Recommendations