Por meio de várias características físico-químicas prever uma MOF (Metal-Organic Framework) com o tamanho de poro desejado, usando computação em Python por redes neurais é utilizar técnicas de aprendizado de máquina, especificamente redes neurais, para criar um modelo preditivo capaz de estimar o tamanho de uma MOF com base em suas características físico-químicas.
As MOFs são materiais altamente porosos com estruturas cristalinas formadas por ligações entre íons metálicos ou clusters metálicos e ligantes orgânicos. Seu tamanho, como a área de superfície específica, a porosidade e a distribuição de tamanho de poro, é uma característica crucial que afeta suas propriedades e aplicações.
A abordagem proposta neste projeto é a utilização de redes neurais, que são modelos computacionais inspirados no funcionamento do cérebro humano. Redes neurais são capazes de aprender padrões complexos a partir de conjuntos de dados e podem ser treinadas para realizar previsões e estimativas com base nessas informações.Por meio da computação em Python, será implementado um modelo de redes neurais que receberá características físico-químicas das MOFs como entrada e fornecerá uma predição do VOID FRACTION como saída. Essas características podem incluir propriedades estruturais, características dos ligantes e íons metálicos, entre outros parâmetros relevantes.
O objetivo final é construir um modelo de redes neurais preciso e confiável, capaz de prever o VOID FRACTION de MOFs com base em características físico-químicas específicas. Isso pode contribuir para a seleção e o design racional de MOFs com propriedades desejadas, acelerando o processo de desenvolvimento de novos materiais porosos com aplicações em áreas como armazenamento de gases, separação seletiva de substâncias e catálise.
Importações
-
import torch
: Importa o módulo torch, que é um framework de aprendizado de máquina de código aberto. -
import torch.nn as nn
: Importa o submódulo nn do PyTorch, que fornece ferramentas para construir redes neurais. -
import torch.optim as optim
: Importa o submódulo optim do PyTorch, que contém otimizadores para treinamento de modelos. -
import matplotlib.pyplot as plt
: Importa o módulo pyplot do Matplotlib, que é uma biblioteca de visualização de dados em Python. -
import seaborn as sns
: Importa o módulo seaborn, que é uma biblioteca de visualização de dados baseada no Matplotlib. -
from sklearn.model_selection import train_test_split
: Importa a função train_test_split do submódulo model_selection do scikit-learn, que permite dividir conjuntos de dados em treino e teste. -
from sklearn.preprocessing import MinMaxScaler
: Importa a classe MinMaxScaler do submódulo preprocessing do scikit-learn, que realiza a normalização dos dados. -
from sklearn.metrics import mean_squared_error
: Importa a função mean_squared_error do submódulo metrics do scikit-learn, que calcula o erro quadrático médio entre as previsões e os valores verdadeiros. -
import numpy as np
: Importa o módulo numpy, que é uma biblioteca para manipulação de arrays multidimensionais e cálculos matemáticos. -
import pandas as pd
: Importa o módulo pandas, que é uma biblioteca para manipulação e análise de dados em Python. -
import random
: Importa o módulo random, que fornece funções para geração de números aleatórios. -
from funcoes import selecao_torneio_min as funcao_selecao
: Importa a função selecao_torneio_min do módulo funcoes e a renomeia como funcao_selecao. -
from funcoes import cruzamento_ponto_simples as funcao_cruzamento
: Importa a função cruzamento_ponto_simples do módulo funcoes e a renomeia como funcao_cruzamento.
Tratamento de Dados
-
df = extrair_cif(df, minimo = 5)
: Executa a função extrair_cif, que realiza o tratamento dos dados contidos no DataFrame df, mantendo apenas as amostras com um número mínimo de registros igual a 5. -
df.keys()
: Retorna as chaves (nomes das colunas) do DataFrame df.
Divisão de Treino-Teste
-
TAMANHO_TESTE = 0.1
: Define o tamanho da amostra de teste como 10% do conjunto de dados total. -
SEMENTE_ALEATORIA = 61455
: Define a semente aleatória para garantir a reprodutibilidade dos resultados. -
FEATURES = list(df.iloc[:,2:].keys())
: Cria uma lista com os nomes das colunas (características) a serem usadas como entrada para o modelo. -
TARGET = ['void fraction']
: Define a variável alvo (porosidade do mof) a ser prevista pelo modelo. -
indices = df.index
: Obtém os índices das amostras do DataFrame df. -
indices_treino, indices_teste = train_test_split(indices, test_size=TAMANHO_TESTE, random_state=SEMENTE_ALEATORIA)
: Divide os índices das amostras em conjuntos de treino e teste, com base no tamanho do conjunto de teste e na semente aleatória. -
df_treino = df.loc[indices_treino]
: Seleciona as amostras de treino do DataFrame df com base nos índices de treino. -
df_teste = df.loc[indices_teste]
: Seleciona as amostras de teste do DataFrame df com base nos índices de teste. -
X_treino = df_treino.reindex(FEATURES, axis=1)
: Cria uma matriz de treino X_treino contendo apenas as colunas de características selecionadas. -
y_treino = df_treino.reindex(TARGET, axis=1)
: Cria um vetor de treino y_treino contendo a variável alvo (porosidade do mof). -
X_teste = df_teste.reindex(FEATURES, axis=1)
: Cria uma matriz de teste X_teste contendo apenas as colunas de características selecionadas. -
y_teste = df_teste.reindex(TARGET, axis=1)
: Cria um vetor de teste y_teste contendo a variável alvo (porosidade do mof). -
normalizador_x = MinMaxScaler()
: Inicializa um objeto MinMaxScaler para normalização das características de entrada. -
normalizador_y = MinMaxScaler()
: Inicializa um objeto MinMaxScaler para normalização da variável alvo. -
normalizador_x.fit(X_treino)
: Ajusta o normalizador_x aos dados de treino X_treino. -
normalizador_y.fit(y_treino)
: Ajusta o normalizador_y aos dados de treino y_treino. -
X_treino = normalizador_x.transform(X_treino)
: Aplica a normalização aos dados de treino X_treino. -
y_treino = normalizador_y.transform(y_treino)
: Aplica a normalização aos dados de treino y_treino. -
X_teste = normalizador_x.transform(X_teste)
: Aplica a normalização aos dados de teste X_teste. -
y_teste = normalizador_y.transform(y_teste)
: Aplica a normalização aos dados de teste y_teste. -
X_treino = torch.tensor(X_treino, dtype=torch.float32)
: Converte a matriz de treino X_treino em um tensor do PyTorch com tipo de dado float32. -
y_treino = torch.tensor(y_treino, dtype=torch.float32)
: Converte o vetor de treino y_treino em um tensor do PyTorch com tipo de dado float32. -
X_teste = torch.tensor(X_teste, dtype=torch.float32)
: Converte a matriz de teste X_teste em um tensor do PyTorch com tipo de dado float32. -
y_teste = torch.tensor(y_teste, dtype=torch.float32)
: Converte o vetor de teste y_teste em um tensor do PyTorch com tipo de dado float32.
O objetivo principal do código Auxiliar é extrair informações relevantes dos dados e realizar operações como a geração de novas colunas e manipulação dos dados.
Importações
O código utiliza diversas bibliotecas, como os, requests, pymatgen, numpy, pandas, random e matminer. Essas bibliotecas fornecem funcionalidades para manipulação de arquivos, requisições HTTP, manipulação de estruturas químicas, manipulação de dados numéricos, geração de números aleatórios e extração de características dos materiais.Funções
Em resumo, o código é uma implementação em Python que lida com dados de MOFs, realiza extração de características, geração de novas colunas, manipulação de dados e aplicação de algoritmos genéticos para resolver problemas relacionados a esses materiais.
- Os: Interação com o sistema operacional, incluindo manipulação de arquivos e pastas.
- Requests: Biblioteca para fazer requisições HTTP e obter dados de uma URL específica.
- Pymatgen: Manipulação de estruturas e materiais, como leitura de arquivos CIF, cálculos de propriedades e manipulação de estruturas cristalinas.
- Matminer: Biblioteca para extração de características de materiais a partir de dados experimentais e teóricos.
- PyTorch: Framework de aprendizado de máquina de código aberto.
- seaborn: Biblioteca de visualização de dados baseada no Matplotlib.
- scikit-learn: Biblioteca para aprendizado de máquina e análise de dados.
- NumPy: Biblioteca para manipulação de arrays multidimensionais e cálculos matemáticos.
- Pandas: Biblioteca para manipulação e análise de dados em Python.
- random: Módulo Python para geração de números aleatórios.
Essas bibliotecas foram escolhidas para fornecer funcionalidades essenciais ao projeto, como construção de redes neurais, visualização de dados, pré-processamento de dados, métricas de avaliação e manipulação de arrays.
Caio Eduardo Programmer |
Danielle dos Santos Programmer |
Gabriel Xavier Programmer |
Gustavo Beneti Programmer |
Daniel R. Cassar Professor |