Domine ML.NET: Treine Modelos de Classificação em C#

Machine Learning não é mais exclusividade de Python! Com o ML.NET🌌 Clustering com ML.NET: Agrupe Dados sem Supervisão!🌌 Clustering com ML.NET: Agrupe Dados sem Supervisão!Descubra como aplicar clustering com ML.NET para segmentar dados sem rótulos, com exemplos práticos em C# e estratégias para otimizar resultados., você pode criar modelos de classificação diretamente no ecossistema .NET, usando suas habilidades🌐 LinkedIn para Devs .NET: Perfil que Atrai Recrutadores!🌐 LinkedIn para Devs .NET: Perfil que Atrai Recrutadores!Aprenda a otimizar seu perfil LinkedIn com dicas essenciais para devs .NET. Conquiste oportunidades e destaque suas habilidades! em C#. Neste artigo, vamos treinar um modelo para prever se um e-mail é spam ou não – um problema🤝 GitHub Básico: Versionamento para Iniciantes!🤝 GitHub Básico: Versionamento para Iniciantes!Descubra como o GitHub facilita colaboração, versionamento e organização de código com este tutorial prático e essencial para desenvolvedores iniciantes. clássico de classificação binária. Você vai aprender:

Pronto para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! transformar dados em decisões inteligentes? 🚀

Índice🔗

O que é Classificação?🔗

Classificação é um tipo🧠 Variáveis em C#: Onde os Dados Ganham Vida (e Nome!)🧠 Variáveis em C#: Onde os Dados Ganham Vida (e Nome!)Descubra como as variáveis em C# funcionam, com exemplos do mundo real, boas práticas de nomeação e dicas para otimizar seu código. de aprendizado supervisionado onde o modelo🎭 MVVM: Separe Regras de Negócio da Interface Graficamente!🎭 MVVM: Separe Regras de Negócio da Interface Graficamente!Descubra como o padrão MVVM separa a interface e a lógica de negócio, facilitando testes e manutenção, com exemplos e dicas práticas para seu projeto. aprende a prever categorias (ex: "spam" ou "não spam") com base em dados históricos.

Exemplo Prático📝 Logging com Serilog: Registre Tudo como um Detetive de Bugs!📝 Logging com Serilog: Registre Tudo como um Detetive de Bugs!Aprenda a usar Serilog em .NET para registrar logs estruturados, identificar erros e enriquecer informações, transformando seu código num enigma solucionável.:

Imagine um filtro🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!🎲 Desafio: Analise Dados de Vendas com LINQ e Coleções!Aprenda a usar coleções e LINQ em C# para analisar vendas, filtrar dados e extrair insights estratégicos que otimizem decisões e impulsionem seu negócio. de e-mails que analisa:

O modelo🎭 MVVM: Separe Regras de Negócio da Interface Graficamente!🎭 MVVM: Separe Regras de Negócio da Interface Graficamente!Descubra como o padrão MVVM separa a interface e a lógica de negócio, facilitando testes e manutenção, com exemplos e dicas práticas para seu projeto. atribui uma probabilidade a cada categoria, ajudando na tomada de decisão.

Configurando o Ambiente🔗

Passo 1: Instale os Pacotes Necessários

No NuGet📦 Crie um Pacote NuGet: Compartilhe seu Código!📦 Crie um Pacote NuGet: Compartilhe seu Código!Aprenda a empacotar, configurar e publicar pacotes NuGet em C# passo a passo, com dicas profissionais e práticas recomendadas para seu projeto. Package Manager:

Install-Package Microsoft.ML

Passo 2: Estrutura do Projeto

Crie classes🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara. para representar os dados:

public class EmailData
{
    [LoadColumn(0)] public string Texto { get; set; }
    [LoadColumn(1)] public bool IsSpam { get; set; }
}
public class EmailPrediction : EmailData
{
    [ColumnName("PredictedLabel")] public bool Predicao { get; set; }
    public float Probabilidade { get; set; }
}

Preparando os Dados🔗

Carregue o Dataset

var mlContext = new MLContext();
var data = mlContext.Data.LoadFromTextFile<EmailData>("emails.csv", separatorChar: ',');

Exemplo de emails.csv:

Texto,IsSpam
"Ganhe um iPhone grátis!!!",True
"Reunião de equipe amanhã",False

Divida em Treino/Teste

var split = mlContext.Data.TrainTestSplit(data, testFraction: 0.2);

Pré-processamento

Converta texto📝 Strings em C#: Manipule Textos como um Mestre dos Caracteres!📝 Strings em C#: Manipule Textos como um Mestre dos Caracteres!Aprenda a dominar os segredos das strings em C# com técnicas de manipulação, concatenação, interpolação e boas práticas, impulsionando sua performance. em vetores numéricos:

var pipeline = mlContext.Transforms.Text.FeaturizeText("Features", nameof(EmailData.Texto))
    .Append(mlContext.Transforms.NormalizeMinMax("Features"))
    .AppendCacheCheckpoint(mlContext);

Treinando o Modelo🔗

Escolha um algoritmo (ex: SdcaLogisticRegression) e📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. treine:

var trainer = mlContext.BinaryClassification.Trainers.SdcaLogisticRegression();
var trainingPipeline = pipeline.Append(trainer);
var model = trainingPipeline.Fit(split.TrainSet);

Por que o SDCA?

Avaliando o Desempenho🔗

Teste o modelo🎭 MVVM: Separe Regras de Negócio da Interface Graficamente!🎭 MVVM: Separe Regras de Negócio da Interface Graficamente!Descubra como o padrão MVVM separa a interface e a lógica de negócio, facilitando testes e manutenção, com exemplos e dicas práticas para seu projeto. com dados não vistos:

var predictions = model.Transform(split.TestSet);
var metrics = mlContext.BinaryClassification.Evaluate(predictions);
Console.WriteLine($"Acurácia: {metrics.Accuracy:P2}");
Console.WriteLine($"AUC: {metrics.AreaUnderRocCurve:P2}");

Métricas📊 Monitoramento com Prometheus: Métricas em Tempo Real!📊 Monitoramento com Prometheus: Métricas em Tempo Real!Descubra como implementar o Prometheus para monitoramento em sistemas .NET, com métricas em tempo real e dashboards inteligentes. Importantes:

MétricaDescrição
AcuráciaPorcentagem de acertos totais
AUC-ROCCapacidade de distinguir classes
F1-ScoreBalanceamento entre precisão e recall

Usando o Modelo em Produção🔗

Salve o Modelo

mlContext.Model.Save(model, split.TrainSet.Schema, "modelo.zip");

Carregue e Faça Previsões

var loadedModel = mlContext.Model.Load("modelo.zip", out var schema);
var predictionEngine = mlContext.Model.CreatePredictionEngine<EmailData, EmailPrediction>(loadedModel);
var novoEmail = new EmailData { Texto = "Promoção exclusiva para você!" };
var predicao = predictionEngine.Predict(novoEmail);
Console.WriteLine($"É spam? {predicao.Predicao} (Probabilidade: {predicao.Probabilidade:P2})");

Conclusão🔗

Você treinou seu primeiro modelo de classificação com ML.NET🌌 Clustering com ML.NET: Agrupe Dados sem Supervisão!🌌 Clustering com ML.NET: Agrupe Dados sem Supervisão!Descubra como aplicar clustering com ML.NET para segmentar dados sem rótulos, com exemplos práticos em C# e estratégias para otimizar resultados.! Agora, experimente:

O próximo passo? Explore pipelines📊 Pipelines: Pré-processe Dados como um Cientista!📊 Pipelines: Pré-processe Dados como um Cientista!Aprenda a criar pipelines eficientes com ML.NET, automatizando o pré-processamento de dados e garantindo modelos de Machine Learning precisos e reprodutíveis. de processamento complexos para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! lidar com dados mais desafiadores! 🔍

ML.NET 101: Treine seu Primeiro Modelo de Classificação!🔗

Machine Learning (ML) é uma das áreas mais fascinantes da tecnologia hoje, e o ML.NET traz essa magia para o ecossistema .NET. Se você está começando ou quer migrar para o mundo da IA, este guia prático vai te ajudar a treinar seu primeiro modelo de classificação usando ML.NET🌌 Clustering com ML.NET: Agrupe Dados sem Supervisão!🌌 Clustering com ML.NET: Agrupe Dados sem Supervisão!Descubra como aplicar clustering com ML.NET para segmentar dados sem rótulos, com exemplos práticos em C# e estratégias para otimizar resultados.. Vamos desde a preparação dos dados até a avaliação do modelo, tudo com exemplos reais e direto ao ponto.

Sumário🔗

O que é ML.NET?🔗

ML.NET é um framework de machine learning de código aberto desenvolvido pela Microsoft para desenvolvedores .NET💰 Salários .NET: Como Negociar seu Valor!💰 Salários .NET: Como Negociar seu Valor!Aprenda estratégias comprovadas para negociar salários e valorizar sua carreira como desenvolvedor .NET com dados reais e dicas práticas.. Ele permite que você crie modelos de ML personalizados sem precisar sair do ambiente que já conhece (C# e .NET). Com ele, você pode resolver problemas como:

Neste artigo, focaremos em classificação, um dos problemas mais comuns em ML.

Preparando o Ambiente🔗

Antes de começar, você precisa instalar o ML.NET🌌 Clustering com ML.NET: Agrupe Dados sem Supervisão!🌌 Clustering com ML.NET: Agrupe Dados sem Supervisão!Descubra como aplicar clustering com ML.NET para segmentar dados sem rótulos, com exemplos práticos em C# e estratégias para otimizar resultados. no seu projeto. Se estiver usando o Visual Studio🛠️ Instalação do Visual Studio: Prepare sua Nave para Decolar!🛠️ Instalação do Visual Studio: Prepare sua Nave para Decolar!Prepare seu ambiente de desenvolvimento com o Visual Studio em uma aventura C#. Este tutorial prático ensina a instalar, configurar e personalizar sua IDE., siga os passos abaixo:

1. Crie um novo projeto🤝 GitHub Básico: Versionamento para Iniciantes!🤝 GitHub Básico: Versionamento para Iniciantes!Descubra como o GitHub facilita colaboração, versionamento e organização de código com este tutorial prático e essencial para desenvolvedores iniciantes. do tipo Console App.

2. Adicione o pacote NuGet📦 Crie um Pacote NuGet: Compartilhe seu Código!📦 Crie um Pacote NuGet: Compartilhe seu Código!Aprenda a empacotar, configurar e publicar pacotes NuGet em C# passo a passo, com dicas profissionais e práticas recomendadas para seu projeto. do ML.NET:

dotnet add package Microsoft.ML

3. Pronto! Agora você tem tudo o que precisa para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! começar.

Entendendo o Problema de Classificação🔗

Vamos resolver um problema🤝 GitHub Básico: Versionamento para Iniciantes!🤝 GitHub Básico: Versionamento para Iniciantes!Descubra como o GitHub facilita colaboração, versionamento e organização de código com este tutorial prático e essencial para desenvolvedores iniciantes. clássico de classificação: prever se uma flor é da espécie Iris Setosa, Iris Versicolor ou Iris Virginica com base em suas características (comprimento e largura das pétalas e📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. sépalas).

Esse é um exemplo clássico conhecido como Dataset Iris, que é amplamente utilizado para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! testes iniciais em ML.

Preparando os Dados🔗

1. Baixe o Dataset Iris:

  • Você pode encontrar o dataset aqui.
  • Ou use este exemplo simplificado em CSV:
SepalLength,SepalWidth,PetalLength,PetalWidth,Label
5.1,3.5,1.4,0.2,Iris-setosa
4.9,3.0,1.4,0.2,Iris-setosa
7.0,3.2,4.7,1.4,Iris-versicolor
6.4,3.2,4.5,1.5,Iris-versicolor
6.3,3.3,6.0,2.5,Iris-virginica
5.8,2.7,5.1,1.9,Iris-virginica

2. Crie uma Classe🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara. para Representar os Dados:

No C#, você precisa definir uma classe🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara. que represente os dados do dataset.

public class IrisData
{
    public float SepalLength { get; set; }
    public float SepalWidth { get; set; }
    public float PetalLength { get; set; }
    public float PetalWidth { get; set; }
    public string Label { get; set; }
}

3. Crie uma Classe🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara. para a Previsão:

Essa classe🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!🏗️ Classes vs. Structs: Quando Usar Cada Uma (e Não Quebrar a Cabeça)!Descubra como escolher entre classes e structs em C#. Aprenda sobre alocação de memória, passagem por valor e referência, e performance nesta explicação clara. será usada para armazenar o resultado da previsão.

public class IrisPrediction
{
    public string PredictedLabel { get; set; }
}

Treinando o Modelo🔗

Agora que os dados estão prontos, vamos treinar o modelo🎭 MVVM: Separe Regras de Negócio da Interface Graficamente!🎭 MVVM: Separe Regras de Negócio da Interface Graficamente!Descubra como o padrão MVVM separa a interface e a lógica de negócio, facilitando testes e manutenção, com exemplos e dicas práticas para seu projeto..

1. Carregue os Dados:

Use o MLContext para🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)🔄 Loops em C#: Repita Tarefas sem Enlouquecer (Com for e while!)Descubra como automatizar repetições em C# utilizando loops for e while com exemplos práticos que evitam erros e otimizam seu código. Aprenda mais! carregar os dados do CSV.

var mlContext = new MLContext();
var data = mlContext.Data.LoadFromTextFile<IrisData>(
    path: "iris-data.csv",
    separatorChar: ',',
    hasHeader: true
);

2. Divida os Dados:

Separe os dados em conjuntos de treino e📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades. teste.

var splitData = mlContext.Data.TrainTestSplit(data, testFraction: 0.2);

3. Defina o Pipeline📊 Pipelines: Pré-processe Dados como um Cientista!📊 Pipelines: Pré-processe Dados como um Cientista!Aprenda a criar pipelines eficientes com ML.NET, automatizando o pré-processamento de dados e garantindo modelos de Machine Learning precisos e reprodutíveis.:

O pipeline📊 Pipelines: Pré-processe Dados como um Cientista!📊 Pipelines: Pré-processe Dados como um Cientista!Aprenda a criar pipelines eficientes com ML.NET, automatizando o pré-processamento de dados e garantindo modelos de Machine Learning precisos e reprodutíveis. é onde você configura o processo de treinamento.

var pipeline = mlContext.Transforms.Conversion.MapValueToKey("Label")
    .Append(mlContext.Transforms.Concatenate("Features",
        "SepalLength", "SepalWidth", "PetalLength", "PetalWidth"))
    .Append(mlContext.MulticlassClassification.Trainers.SdcaMaximumEntropy())
    .Append(mlContext.Transforms.Conversion.MapKeyToValue("PredictedLabel"));

4. Treine o Modelo🎭 MVVM: Separe Regras de Negócio da Interface Graficamente!🎭 MVVM: Separe Regras de Negócio da Interface Graficamente!Descubra como o padrão MVVM separa a interface e a lógica de negócio, facilitando testes e manutenção, com exemplos e dicas práticas para seu projeto.:

Use o pipeline📊 Pipelines: Pré-processe Dados como um Cientista!📊 Pipelines: Pré-processe Dados como um Cientista!Aprenda a criar pipelines eficientes com ML.NET, automatizando o pré-processamento de dados e garantindo modelos de Machine Learning precisos e reprodutíveis. para treinar o modelo com os dados de treino.

var model = pipeline.Fit(splitData.TrainSet);

Avaliando o Modelo🔗

Depois de treinar, é importante avaliar o desempenho⏱️ Testes de Performance: Garanta Velocidade Além da Funcionalidade!⏱️ Testes de Performance: Garanta Velocidade Além da Funcionalidade!Descubra como medir, diagnosticar e otimizar performance em aplicações .NET com dicas práticas e ferramentas essenciais para devs. do modelo com os dados de teste.

var predictions = model.Transform(splitData.TestSet);
var metrics = mlContext.MulticlassClassification.Evaluate(predictions);
Console.WriteLine($"Acurácia: {metrics.MacroAccuracy:P2}");
Console.WriteLine($"Log Loss: {metrics.LogLoss}");

Usando o Modelo para Previsões🔗

Agora que o modelo🎭 MVVM: Separe Regras de Negócio da Interface Graficamente!🎭 MVVM: Separe Regras de Negócio da Interface Graficamente!Descubra como o padrão MVVM separa a interface e a lógica de negócio, facilitando testes e manutenção, com exemplos e dicas práticas para seu projeto. está treinado e avaliado, você pode usá-lo para fazer previsões.

var predictionEngine = mlContext.Model.CreatePredictionEngine<IrisData, IrisPrediction>(model);
var sample = new IrisData
{
    SepalLength = 5.1f,
    SepalWidth = 3.5f,
    PetalLength = 1.4f,
    PetalWidth = 0.2f
};
var prediction = predictionEngine.Predict(sample);
Console.WriteLine($"Predição: {prediction.PredictedLabel}");

Conclusão🔗

E pronto! Você treinou seu primeiro modelo de classificação com ML.NET. Esse é só o começo da sua jornada no mundo do machine learning. A partir daqui, você pode explorar outros algoritmos, ajustar parâmetros🎯 Sobrecarga de Métodos: Um Nome, Múltiplos Superpoderes!🎯 Sobrecarga de Métodos: Um Nome, Múltiplos Superpoderes!Aprenda sobre a técnica de sobrecarga de métodos no C# com exemplos e práticas recomendadas para melhorar a organização e legibilidade do seu código. e até integrar modelos pré-treinados.

Lembre-se: a prática é a chave para dominar ML. Então📊 Behavior-Driven Development: Testes que Todo Mundo Entende!📊 Behavior-Driven Development: Testes que Todo Mundo Entende!Descubra como o BDD transforma testes em linguagens acessíveis. Aprenda a usar SpecFlow em C# para criar testes claros, colaborativos e sem ambiguidades., mãos à obra e bons treinos! 🚀

Autor: Marcelo V. Souza - Engenheiro de Sistemas e Entusiasta em IoT e Desenvolvimento de Software, com foco em inovação tecnológica.

Referências🔗

Compartilhar artigo

Artigos Relacionados