Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Este tutorial ilustra como usar ML.NET para construir um modelo de agrupamento para o conjunto de dados da flor de íris.
Neste tutorial, aprenderás como:
- Entenda o problema
- Selecione a tarefa de aprendizagem automática apropriada
- Preparar os dados
- Carregar e transformar os dados
- Escolha um algoritmo de aprendizagem
- Treinar o modelo
- Usar o modelo para previsões
Pré-requisitos
Entenda o problema
Este problema está relacionado com dividir o conjunto de flores da íris em diferentes grupos com base nas características da flor. Essas características são o comprimento e a largura de um sépala e o comprimento e largura de uma pétala. Para este tutorial, assuma que o tipo de cada flor é desconhecido. Queres aprender a estrutura de um conjunto de dados a partir das características e prever como uma instância de dados se encaixa nessa estrutura.
Selecione a tarefa de aprendizagem automática apropriada
Como não sabes a que grupo pertence cada flor, escolhes a tarefa de aprendizagem automática não supervisionada . Para dividir um conjunto de dados em grupos de forma a que elementos do mesmo grupo sejam mais semelhantes entre si do que aos de outros grupos, use uma tarefa de aprendizagem automática por clustering .
Criar uma aplicação de consola
Crie uma aplicação de consola C# chamada "IrisFlowerClustering". Clique no botão Seguinte.
Escolhe o .NET 8 como framework a usar. Clique no botão Criar .
Crie um diretório chamado Dados no seu projeto para armazenar o conjunto de dados e os ficheiros de modelo:
No Explorador de Soluções, clique com o botão direito no projeto e selecione Adicionar>Nova Pasta. Escreve "Data" e seleciona Enter.
Instale o pacote NuGet Microsoft.ML:
Observação
Este exemplo utiliza a versão estável mais recente dos pacotes NuGet mencionados, salvo indicação em contrário.
No Gerenciador de Soluções, clique com o botão direito do mouse no projeto e selecione Gerenciar Pacotes NuGet. Escolhe "nuget.org" como fonte do Pacote, seleciona o separador Explorar , pesquisa por Microsoft.ML e seleciona Instalar. Selecione o botão OK na janela de Pré-visualização de Alterações e depois selecione o botão Aceitar na janela de Aceitação de Licença se concordar com os termos da licença dos pacotes listados.
Preparar os dados
Descarregue o conjunto de dados iris.data e guarde-o na pasta Data que criou na etapa anterior. Para mais informações sobre o conjunto de dados da íris, consulte a página do conjunto de dados da flor da íris na Wikipédia e a página do conjunto de dados da íris , que é a fonte do conjunto de dados.
No Explorador de Soluções, clique com o botão direito no ficheiro iris.data e selecione Propriedades. Em Avançado, altere o valor de Copiar para Diretório de Saída para Cópia, se for mais recente.
O ficheiro iris.data contém cinco colunas que representam:
- Comprimento da sépala em centímetros
- Largura dos sépalos em centímetros
- Comprimento das pétalas em centímetros
- Largura das pétalas em centímetros
- tipo de flor de íris
Para efeitos do exemplo do agrupamento, este tutorial ignora a última coluna.
Criar classes de dados
Crie classes para os dados de entrada e as previsões:
No Explorador de Soluções, clique com o botão direito no projeto e depois selecione Adicionar>Novo Item.
Na caixa de diálogo Adicionar Novo Item , selecione Classe e altere o campo Nome para IrisData.cs. Em seguida, selecione Adicionar.
Adicione a seguinte
usingdiretiva ao novo ficheiro:using Microsoft.ML.Data;
Remova a definição de classe existente e adicione o seguinte código, que define as classes IrisData e ClusterPrediction, ao ficheiro IrisData.cs :
public class IrisData
{
[LoadColumn(0)]
public float SepalLength;
[LoadColumn(1)]
public float SepalWidth;
[LoadColumn(2)]
public float PetalLength;
[LoadColumn(3)]
public float PetalWidth;
}
public class ClusterPrediction
{
[ColumnName("PredictedLabel")]
public uint PredictedClusterId;
[ColumnName("Score")]
public float[]? Distances;
}
IrisData é a classe de dados de entrada e tem definições para cada característica do conjunto de dados. Use o atributo LoadColumn para especificar os índices das colunas de origem no ficheiro do conjunto de dados.
A ClusterPrediction classe representa a saída do modelo de clustering aplicado a uma IrisData instância. Use o atributo ColumnName para associar os PredictedClusterId campos e Distances às colunas PredictedLabel e Score , respetivamente. No caso da tarefa de agrupamento, essas colunas têm o seguinte significado:
- A coluna PredictedLabel contém o ID do cluster previsto.
- A coluna de pontuação contém um array com distâncias euclidianas ao quadrado aos centróides do cluster. O comprimento do array é igual ao número de clusters.
Observação
Use o float tipo para representar valores de ponto flutuante nas classes de dados de entrada e previsão.
Definir os caminhos dos dados e do modelo
Volte ao ficheiro Program.cs e adicione dois campos para manter os caminhos para o ficheiro do conjunto de dados e para o ficheiro para guardar o modelo:
-
_dataPathcontém o caminho para o ficheiro com o conjunto de dados usado para treinar o modelo. -
_modelPathcontém o caminho para o ficheiro onde o modelo treinado está armazenado.
Adicione o seguinte código sob as using diretivas para especificar esses caminhos:
string _dataPath = Path.Combine(Environment.CurrentDirectory, "Data", "iris.data");
string _modelPath = Path.Combine(Environment.CurrentDirectory, "Data", "IrisClusteringModel.zip");
Criar contexto de ML
Adicione as seguintes diretivas adicionais using no topo do ficheiro Program.cs :
using Microsoft.ML;
using IrisFlowerClustering;
Substitua a Console.WriteLine("Hello World!"); linha pelo seguinte código:
var mlContext = new MLContext(seed: 0);
A Microsoft.ML.MLContext classe representa o ambiente de aprendizagem automática e fornece mecanismos para registo e pontos de entrada para carregamento de dados, treino de modelos, previsão e outras tarefas. Isto é comparável conceptualmente à utilização DbContext no Entity Framework.
Configurar carregamento de dados
Adicione o seguinte código abaixo MLContext para configurar a forma de carregar dados:
IDataView dataView = mlContext.Data.LoadFromTextFile<IrisData>(_dataPath, hasHeader: false, separatorChar: ',');
O método genéricoMLContext.Data.LoadFromTextFile de extensão infere o esquema do conjunto de dados a partir do tipo fornecido IrisData e devolveIDataView, que pode ser usado como entrada para transformadores.
Crie um pipeline de aprendizagem
Para este tutorial, o pipeline de aprendizagem da tarefa de clustering é composto por dois passos seguintes:
- concatenar colunas carregadas numa única coluna Features , que é usada por um treinador de clustering;
- Use um KMeansTrainer treinador para treinar o modelo usando o algoritmo de clustering K-means++.
Adicione o seguinte após carregar os dados:
string featuresColumnName = "Features";
var pipeline = mlContext.Transforms
.Concatenate(featuresColumnName, "SepalLength", "SepalWidth", "PetalLength", "PetalWidth")
.Append(mlContext.Clustering.Trainers.KMeans(featuresColumnName, numberOfClusters: 3));
O código especifica que o conjunto de dados deve ser dividido em três clusters.
Treinar o modelo
As etapas adicionadas nas secções anteriores prepararam o pipeline para o treino, no entanto, nenhuma delas foi executada. Adicione a seguinte linha no final do ficheiro para realizar o carregamento de dados e o treino do modelo:
var model = pipeline.Fit(dataView);
Guardar o modelo
Neste momento, tens um modelo que pode ser integrado em qualquer uma das tuas aplicações .NET existentes ou novas. Para guardar o seu modelo num ficheiro .zip, adicione o seguinte código abaixo que chama o Fit método:
using (var fileStream = new FileStream(_modelPath, FileMode.Create, FileAccess.Write, FileShare.Write))
{
mlContext.Model.Save(model, dataView.Schema, fileStream);
}
Usar o modelo para previsões
Para fazer previsões, use a PredictionEngine<TSrc,TDst> classe que recebe instâncias do tipo de entrada através do pipeline do transformador e produz instâncias do tipo de saída. Adicione a seguinte linha para criar uma instância dessa classe:
var predictor = mlContext.Model.CreatePredictionEngine<IrisData, ClusterPrediction>(model);
O PredictionEngine é uma API de conveniência, que permite realizar uma previsão sobre uma única instância de dados.
PredictionEngine não é seguro para rosca. É aceitável usar em ambientes monofio ou ambientes de protótipo. Para melhorar o desempenho e a segurança das threads em ambientes de produção, use o PredictionEnginePool serviço, que cria um ObjectPool conjunto de PredictionEngine objetos para usar em toda a sua aplicação. Consulte este guia sobre como usar PredictionEnginePool numa API Web Core ASP.NET.
Observação
PredictionEnginePool A extensão do serviço está atualmente em pré-visualização.
Crie a TestIrisData classe para alojar instâncias de dados de teste:
No Explorador de Soluções, clique com o botão direito no projeto e depois selecione Adicionar>Novo Item.
Na caixa de diálogo Adicionar Novo Item , selecione Classe e altere o campo Nome para TestIrisData.cs. Em seguida, selecione Adicionar.
Modifique a classe para ficar estática, como no seguinte exemplo:
static class TestIrisData
Este tutorial apresenta uma instância de dados de íris dentro desta classe. Podes adicionar outros cenários para experimentar o modelo. Adicione o seguinte código à TestIrisData classe:
internal static readonly IrisData Setosa = new IrisData
{
SepalLength = 5.1f,
SepalWidth = 3.5f,
PetalLength = 1.4f,
PetalWidth = 0.2f
};
Para descobrir a que cluster pertence o item especificado, volte ao ficheiro Program.cs e adicione o seguinte código na parte inferior do ficheiro:
var prediction = predictor.Predict(TestIrisData.Setosa);
Console.WriteLine($"Cluster: {prediction.PredictedClusterId}");
Console.WriteLine($"Distances: {string.Join(" ", prediction.Distances ?? Array.Empty<float>())}");
Execute o programa para ver qual cluster contém a instância de dados especificada e as distâncias ao quadrado dessa instância até aos centróides do cluster. Os seus resultados devem ser semelhantes aos seguintes:
Cluster: 2
Distances: 11.69127 0.02159119 25.59896
Parabéns! Construíste com sucesso um modelo de aprendizagem de máquina para agrupamento de íris e usaste-o para fazer previsões. Podes encontrar o código-fonte deste tutorial no repositório dotnet/samples do GitHub.
Próximos passos
Neste tutorial, você aprendeu como:
- Entenda o problema
- Selecione a tarefa de aprendizagem automática apropriada
- Preparar os dados
- Carregar e transformar os dados
- Escolha um algoritmo de aprendizagem
- Treinar o modelo
- Usar o modelo para previsões
Consulta o repositório dotnet/machinelearning do GitHub para continuares a aprender e encontrar mais exemplos.