Integrando MongoDB com TensorFlow e C#
Avalie esse Tutorial
Você é um novato ou guru do C# e está interessado em saber como o Tensorflow funciona com o MongoDB como banco de dados? Este tutorial é para você.
Esse processo envolve a busca de dados do MongoDB, a realização do pré-processamento de dados e a criação de um modelo de aprendizado de máquina usando ML.NET e TensorFlow. Este guia é ideal para desenvolvedores interessados em aproveitar o poder do aprendizado de máquina em um ambiente .NET.
O MongoDB é um banco de dadosNoSQL e ajuda você a trabalhar com grandes conjuntos de dados compartilhados. O MongoDB é um banco de dados orientado a documentos que armazena dados em documentos semelhantes a JSON. Ele permite escalabilidade e flexibilidade incomparáveis, além de todas as consultas e indexação necessárias.
O TensorFlow é uma plataforma end-to-end de código aberto para aprendizado de máquina desenvolvida pela equipe do GoogleBrain. Ele oferece um sistema abrangente para gerenciar todos os componentes de uma configuração de aprendizado de máquina. No entanto, este tutorial se concentra no uso de uma API específica do TensorFlow para desenvolver e treinar modelos de aprendizado de máquina. O TensorFlow opera construindo gráficos computacionais — redes de nós representando operações matemáticas, com bordas entre nós representando as arrays de dados multidimensionais (tensores) que fluem por essas operações.
Aqui estão alguns exemplos úteis de aplicativos do TensorFlow.
- Recurso de reconhecimentode imagem : o TensorFlow é utilizado em aplicativos de reconhecimento de imagem para detectar objetos, face e cenários em imagens e vídeos. Essa funcionalidade é essencial para uma variedade de aplicativos, incluindo sistemas de segurança, onde aprimora a monitoramento ao reconhecer atividades e expressões humanos, e saúde, onde ajuda no diagnóstico de condições por meio da análise de imagens médicas. Saiba mais sobre o TensorFlow para reconhecimento de imagem.
- Processamento de linguagem natural (NLP): a capacidade do ensorFlow de gerenciar grandes conjuntos de dados e algoritmos intrincados o torna ideal para tarefas de NLP. Ela oferece suporte a aplicativos como tradução de idiomas, análise de relacionamentos e chatbots, permitindo que as máquinas entendam, interpretem e gerem linguagem humana de uma forma contextualmente significativa. Explore os aplicativos TensorFlow no NLP.
- Sistemas de recomendações: Inúmeras empresas de e-commerce e streaming utilizam o TensorFlow para criar sistemas de recomendações que analisam o comportamento passado dos usuários para sugerir produtos ou mídia que eles possam considerar interessantes. Essa personalização melhora a experiência do usuário e pode aumentar significativamente as taxas de conversão para empresas. Saiba mais sobre como criar sistemas de recomendações com o TensorFlow.
- Documentos autônomos: o TensorFlow é utilizado na indúsria automotriz para desenvolver e melhorar sistemas para veículos autônomos. Ao processar dados de vários sensores e réplicas, os modelos baseados no TensorFlow oferecem suporte à tomada de decisões sobre a direção do veículo e a evitação de colisões. Veja como o TensorFlow é aplicado na direção autônoma.
- Saúde: o TensorFlow é utilizado em várias tarefas, como diagnóstico de condições e descoberta de novos métodos. Ele examina padrões de grandes conjuntos de dados de registros médicas para prever a progresso e os resultados da saúde, facilitando o diagnóstico inicial e planos de tratamento personalizados. Descubra os aplicativos TensorFlow na área de saúde.
Essas instâncias ilustram a versatilidade do TensorFlow em diferentes domínios, mostrando seu papel na geração de novidades ao transformar a forma como os dados são interpretados e utilizados na criação de aplicativos inteligentes. Cada link de instância fornecido oferece uma visão mais profunda de como o TensorFlow é usado em aplicativos do mundo real, fornecendo provas de sua ampla utilidade e impacto.
Antes de entrarmos em detalhes, verifique se você tem o seguinte instalado:
- MongoDB
- Código do Visual Studio ou outro editor de código
Para este projeto, você precisa instalar os seguintes pacotes NuGet:
- MongoDB.Driver: este pacote inclui tudo o que você precisa para interagir com o MongoDB, incluindo operações BSON e CRUD. Instale com
dotnet add package MongoDB.Driver
. - Microsoft.ML: este pacote é essencial para criar e treinar modelos de machine learning no .NET. Instale com
dotnet add package Microsoft.ML
. - Microsoft.ML.TensorFlow: este pacote permite a integração com modelos TensorFlow dentro do ML.NET. Instale com
dotnet add package Microsoft.ML.TensorFlow
.
Certifique-se de que o MongoDB esteja em execução na sua máquina local. Você pode baixar e instalar o MongoDB a partir do site.
Por fim, configure seu ambiente de desenvolvimento inicializando um novo projeto C# (Console App). Siga o guia do Visual Studio Code se você estiver codificando seu projeto de aplicativo de console C# pela primeira vez.
Antes de se conectar ao MongoDB, defina a estrutura dos seus dados criando classes que representam seus modelos. Essa abordagem garante que, ao interagir com o MongoDB, você esteja trabalhando com objetos fortemente digitados em vez de objetos genéricos do
BsonDocument
. Isso melhora a clareza do código, a manutenção e a segurança do tipo.1 using MongoDB.Bson; 2 using System.Collections.Generic; 3 using Microsoft.ML.Data; 4 5 public class SampleData 6 { 7 public ObjectId Id { get; set; } // This corresponds to the MongoDB _id field 8 public List<double> X { get; set; } = new List<double>(); 9 public List<double> Y { get; set; } = new List<double>(); 10 } 11 12 public class DataPoint 13 { 14 public float X { get; set; } 15 public float Y { get; set; } 16 } 17 18 public class Prediction 19 { 20 [ ]21 public float PredictedY { get; set; } 22 }
Com as classes de modelo definidas na etapa anterior, agora você pode estabelecer uma conexão com o MongoDB usando esses modelos.Em vez de usar um
BsonDocument
genérico, especifique o tipo de documentos na coleção (SampleData
), tornando seu código mais intuitivo e seguro para o tipo.Coloque o seguinte código no seu arquivo
Program.cs
:1 // MongoDB connection string 2 var client = new MongoClient("mongodb://localhost:27017"); 3 var database = client.GetDatabase("linear-data"); 4 var collection = database.GetCollection<SampleData>("sampleData");
Certifique-se de incluir as declarações
using
necessárias na parte superior do Program.cs
:1 using MongoDB.Bson; 2 using MongoDB.Driver; 3 using System.Collections.Generic;
Esta configuração permite que você interaja com sua coleção MongoDB utilizando modelos fortemente digitados, melhorando a legibilidade do código e a manutenção.
- Dados de amostra: Primeiro, defina os dados de amostra a serem inseridos no MongoDB.
- Inserir dados: em seguida, insira o documento definido na coleção do MongoDB.
1 // Define the data to insert 2 var sampleData = new SampleData 3 { 4 X = new List<double> { 3.3, 4.4, 5.5, 6.71, 6.93, 4.168, 9.779, 6.182, 7.59, 2.167, 7.042, 10.791, 5.313, 7.997, 5.654, 9.27, 3.1 }, 5 Y = new List<double> { 1.7, 2.76, 2.09, 3.19, 1.694, 1.573, 3.366, 2.596, 2.53, 1.221, 2.827, 3.465, 1.65, 2.904, 2.42, 2.94, 1.3 } 6 }; 7 8 // Insert the data into MongoDB 9 collection.InsertOne(sampleData);
As etapas a seguir descrevem como recuperar e preparar dados do seu banco de dados MongoDB para usar como conjunto de dados para treinar seu modelo TensorFlow.
1 // Fetch the data from MongoDB as SampleData 2 var fetchedSampleData = collection.Find(new BsonDocument()).FirstOrDefault(); 3 4 // Assuming you have only one document, use the fetchedSampleData directly 5 var xArray = fetchedSampleData.X.Select(value => (float)value).ToArray(); 6 var yArray = fetchedSampleData.Y.Select(value => (float)value).ToArray();
Recuperar dados: Comece recuperando os dados do MongoDB. Este código obtém o primeiro documento da coleção e pressupõe que sua configuração MongoDB contém apenas um documento que contém todo o conjunto de dados que você precisa.
Converter array BSON: depois de recuperar o documento, você precisará extrair os dados dos arrays BSON e convertê-los em arrays flutuantes. O
Select
método é utilizado aqui para converter cada elemento das X
Y
listas double
e de para float
. Essa conversão é crucial para a compatibilidade com o TensorFlow, que geralmente requer dados na forma de arrays flutuantes.Essas etapas garantem que você não esteja apenas recuperando dados genéricos, mas direcionando especificamente os dados estruturados armazenados em sua coleção MongoDB. Essa configuração foi projetada para ser intuitiva para desenvolvedores novatos e experientes, fornecendo um caminho claro da recuperação de dados ao treinamento do modelo TensorFlow em um ambiente C#.
1 // Create a new ML context 2 var mlContext = new MLContext(); 3 4 // Create the ML.NET data structures 5 var data = xArray.Zip(yArray, (x, y) => new DataPoint { X = x, Y = y }).ToList(); 6 var dataView = mlContext.Data.LoadFromEnumerable(data);
- Contexto de ML: Crie um novo contexto de ML.NET.
- Estruturas de dados: carregar os dados nas estruturas de dados do ML.NET
1 // Define the trainer 2 var pipeline = mlContext.Transforms.Concatenate("Features", new[] { "X" }) 3 .Append(mlContext.Transforms.NormalizeMinMax("Features")) 4 .Append(mlContext.Regression.Trainers.Sdca(labelColumnName: "Y", featureColumnName: "Features")); 5 6 // Train the model 7 var model = pipeline.Fit(dataView);
- Definição de pipeline: defina um pipeline de aprendizado de máquina usando ML.NET.
- Treinamento do modelo: Treine o modelo sobre os dados.
1 // Use the model to make predictions 2 var predictions = model.Transform(dataView); 3 var metrics = mlContext.Regression.Evaluate(predictions, labelColumnName: "Y"); 4 5 Console.WriteLine($"R^2: {metrics.RSquared}"); 6 Console.WriteLine($"RMSE: {metrics.RootMeanSquaredError}");
- Transformar dados: transforme os dados usando o modelo modelado.
- Avaliar modelo: avalie o desempenho do modelo usando métricas R2 e RMSE.
1 // Display the predictions 2 var predictionFunction = mlContext.Model.CreatePredictionEngine<DataPoint, Prediction>(model); 3 foreach (var point in data) 4 { 5 var prediction = predictionFunction.Predict(point); 6 Console.WriteLine($"X: {point.X}, Y: {point.Y}, Predicted: {prediction.PredictedY}"); 7 }
- Mecanismo de predição: crie um mecanismo de predição.
- Fazer projeções: Use o mecanismo para fazer projeções e exibir os resultados.
- Certifique-se de que o MongoDB esteja em execução: inicie o MongoDB em sua máquina local.
- Execute o código: Execute o programa usando
dotnet run
.
1 dotnet run
A saída esperada do código C# fornecido, que semeia dados no MongoDB e depois usa o TensorFlow para realizar a regressão linear, inclui duas partes principais: uma mensagem de confirmação de que os dados foram semeados com sucesso e as métricas de avaliação do modelo de regressão linear, seguidas pelo valores previstos para cada ponto de dados.
Aqui está um detalhamento detalhado do que você deve esperar:
Confirmação de sementeira de dados A primeira mensagem de saída confirma que os dados foram semeados no MongoDB com sucesso.
1 Data seeded successfully!
Métricas de avaliação do modelo O resultado inclui métricas de avaliação para o modelo de regressão linear. Essas métricas ajudam a entender o desempenho do modelo.
R-squad (R^2) Esse valor mede a proporção de variação na variável dependente que é previsível a partir da(s) variável(is) independente(s). Nesse caso, um valor de R^2 negativo de
-85.09826582520343
indica que o modelo não está se ajustando bem aos dados.1 R^2: -131160.77737920854
Raiz do erro médio quadrático (RMSE) Essa métrica mede a magnitude média dos erros de predição. Um RMSE mais baixo indica um melhor ajuste do modelo. Aqui, o valor RMSE é
6.567497795652124
.1 RMSE: 256.3340977791911
Previsões Para cada ponto de dados, a saída mostra os valores reais de X e Y, juntamente com o valor de Y previsto a partir do modelo de regressão linear.
1 X: 3.3, Y: 1.7, Predicted: 84.26584 2 X: 4.4, Y: 2.76, Predicted: -8.049469 3 X: 5.5, Y: 2.09, Predicted: -100.36478 4 X: 6.71, Y: 3.19, Predicted: -201.91168 5 X: 6.93, Y: 1.694, Predicted: -220.3747 6 X: 4.168, Y: 1.573, Predicted: 11.420654 7 X: 9.779, Y: 3.366, Predicted: -459.47144 8 X: 6.182, Y: 2.596, Predicted: -157.60028 9 X: 7.59, Y: 2.53, Predicted: -275.76392 10 X: 2.167, Y: 1.221, Predicted: 179.35062 11 X: 7.042, Y: 2.827, Predicted: -229.77405 12 X: 10.791, Y: 3.465, Predicted: -544.4015 13 X: 5.313, Y: 1.65, Predicted: -84.6712 14 X: 7.997, Y: 2.904, Predicted: -309.9206 15 X: 5.654, Y: 2.42, Predicted: -113.28891 16 X: 9.27, Y: 2.94, Predicted: -416.75458 17 X: 3.1, Y: 1.3, Predicted: 101.050446
Esses valores mostram os valores reais de X e Y do conjunto de dados juntamente com os valores de Y previstos correspondentes. As predições ilustram como o modelo de regressão linear aproxima a relação entre X e Y. Dado o desempenho ruim indicado pelo valor de R^2 , os valores previstos podem não estar próximos dos valores de Y reais.
- Confirmação de sementeira de dados: confirma que os dados foram inseridos com sucesso no MongoDB.
- Métricas de avaliação do modelo: fornece informações sobre o desempenho do modelo, indicando um ajuste ruim com um R^2 negativo e um RMSE relativamente alto.
- Previsões: mostra os valores reais e previstos, destacando a aproximação do modelo dos dados.
1 Data seeded successfully! 2 R^2: -131160.77737920854 3 RMSE: 256.3340977791911 4 X: 3.3, Y: 1.7, Predicted: 84.26584 5 X: 4.4, Y: 2.76, Predicted: -8.049469 6 X: 5.5, Y: 2.09, Predicted: -100.36478 7 X: 6.71, Y: 3.19, Predicted: -201.91168 8 X: 6.93, Y: 1.694, Predicted: -220.3747 9 X: 4.168, Y: 1.573, Predicted: 11.420654 10 X: 9.779, Y: 3.366, Predicted: -459.47144 11 X: 6.182, Y: 2.596, Predicted: -157.60028 12 X: 7.59, Y: 2.53, Predicted: -275.76392 13 X: 2.167, Y: 1.221, Predicted: 179.35062 14 X: 7.042, Y: 2.827, Predicted: -229.77405 15 X: 10.791, Y: 3.465, Predicted: -544.4015 16 X: 5.313, Y: 1.65, Predicted: -84.6712 17 X: 7.997, Y: 2.904, Predicted: -309.9206 18 X: 5.654, Y: 2.42, Predicted: -113.28891 19 X: 9.27, Y: 2.94, Predicted: -416.75458 20 X: 3.1, Y: 1.3, Predicted: 101.050446
Seguindo este guia, você integrou com sucesso o MongoDB com o TensorFlow e o C# usando o ML.NET. Essa integração permite que você aproveite os recursos de armazenamento de dados do MongoDB com a poderosa framework de aprendizado de máquina TensorFlow, tudo em um ambiente .NET.
Este tutorial demonstra a facilidade com que diferentes tecnologias podem ser combinadas para criar soluções robustas de processamento de dados e aprendizado de máquina.
Para aprender mais, consulte a documentação doTensorFlow e doMongoDB e navegue pelosmodelos de machine learning e operações de banco de dados mais complexos. Se você tiver dúvidas ou quiser compartilhar seu trabalho, junta-se a nós na MongoDB Developer Community.
Obrigado por ler... Boa codificação!
Principais comentários nos fóruns
Ainda não há comentários sobre este artigo.