C# para aprendizado de máquina: visão geral das possibilidades e limitações do .NET

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: O C# Pode Competir com o Python em ML?

O mundo do aprendizado de máquina (ML) há muito tempo é associado exclusivamente ao Python. Uma vasta quantidade de bibliotecas (scikit-learn, PyTorch, TensorFlow), uma comunidade ativa e uma abundância de materiais educacionais tornaram o Python o líder indiscutível. No entanto, desenvolvedores que trabalham com C# e a plataforma .NET frequentemente se perguntam: posso usar uma ferramenta familiar para tarefas de ML? A resposta é sim, você pode, mas com algumas ressalvas.

Neste artigo, veremos quais ferramentas o ecossistema .NET oferece para aprendizado de máquina, quais são seus pontos fortes e onde o C# ainda fica atrás do Python. O artigo será útil tanto para desenvolvedores .NET que desejam entrar no mundo do ML quanto para cientistas de dados que consideram alternativas.



ML.NET: Biblioteca Nativa da Microsoft

A principal ferramenta para aprendizado de máquina em C# é o ML.NET. É uma biblioteca de código aberto e multiplataforma desenvolvida pela Microsoft especificamente para o ecossistema .NET. Ela permite incorporar modelos de ML diretamente em aplicações C# sem a necessidade de migrar para o Python.



Principais Recursos do ML.NET

  • Treinamento e Inferência: O ML.NET suporta tanto o treinamento de modelos do zero quanto o carregamento de modelos pré-treinados.
  • Tarefas Comuns: Classificação, regressão, agrupamento, ranqueamento, detecção de anomalias, análise de sentimento em texto.
  • AutoML: Um mecanismo integrado para seleção automática do melhor algoritmo e hiperparâmetros (Aprendizado de Máquina Automatizado).
  • Integração com ONNX: Suporte ao formato Open Neural Network Exchange (ONNX) para importar modelos do PyTorch ou TensorFlow.


Exemplo: Previsão de Preços (Regressão) com ML.NET

Vamos ver um exemplo simples de treinamento de um modelo para prever preços de imóveis com base na área. Primeiro, defina a classe de dados:

public class HousingData{    public float Size { get; set; }    public float Price { get; set; }}

public class PricePrediction{ [ColumnName("Score")] public float Price { get; set; }}

Agora, vamos escrever o código de treinamento:

using Microsoft.ML;

var context = new MLContext();var data = context.Data.LoadFromTextFile<HousingData>("housing.csv", separatorChar: ',');

var pipeline = context.Transforms.Concatenate("Features", new[] { "Size" }) .Append(context.Regression.Trainers.Sdca(labelColumnName: "Price"));

var model = pipeline.Fit(data);

var predictionEngine = context.Model.CreatePredictionEngine<HousingData, PricePrediction>(model);var prediction = predictionEngine.Predict(new HousingData { Size = 75f });

Console.WriteLine($"Preço previsto: {prediction.Price:F2}");

Como você pode ver, a API é intuitiva para um desenvolvedor .NET. No entanto, é importante entender: o ML.NET não suporta aprendizado profundo (redes neurais) com tanta flexibilidade quanto o Keras ou o PyTorch.



TensorFlow.NET e a Pilha SciSharp

Para tarefas de aprendizado profundo em C#, existe o projeto TensorFlow.NET (TF.NET). Trata-se de uma vinculação .NET ao TensorFlow original, permitindo criar, treinar e executar redes neurais em C#. Juntamente com as bibliotecas SciSharp (Keras.NET, NumSharp, Pandas.NET), forma-se um análogo da pilha Python para .NET.



Exemplo: Rede Neural Simples com TensorFlow.NET

using Tensorflow;using static Tensorflow.Binding;using NumSharp;

// Criar um modelo Sequential simplesvar model = keras.Sequential();model.add(keras.layers.Dense(128, activation: "relu", input_shape: new Shape(784)));model.add(keras.layers.Dense(10, activation: "softmax"));

// Compilação do modelomodel.compile(optimizer: "adam", loss: "categorical_crossentropy", metrics: new[] { "accuracy" });

// Carregar dados MNIST (via NumSharp)var (x_train, y_train), (x_test, y_test) = keras.datasets.mnist.load_data();x

Blogs

Book Recommendations