Adentrar o mundo do Python avançado é como abrir uma porta para um reino de possibilidades infinitas na busca por excelência em Aprendizado de Máquina (ML - Machine Learning).
Nesse emocionante território, o conhecimento básico é apenas a chave que abre a entrada, e o que você encontra lá dentro é uma sinfonia de poderosos conceitos, técnicas e ferramentas que elevam o ML a uma arte de vanguarda.
Aqui, não nos contentamos com fórmulas prontas. Avançar é questionar, desafiar e remodelar. É entender que, embora a regressão e a classificação sejam os primeiros acordes, os verdadeiros solos estão nos modelos profundos e complexos que moldam o futuro. Com bibliotecas como TensorFlow e PyTorch, nós esculpimos redes neurais e camadas profundas capazes de entender os dados mais intricados e fazer previsões precisas que eram inimagináveis há apenas alguns anos.
Mas não se engane: Python avançado é como um quebra-cabeças, e o ML é a peça mais brilhante e complexa desse quebra-cabeças. Aqui, não nos limitamos a um único tipo de algoritmo. Em vez disso, dançamos com árvores de decisão e florestas aleatórias, exploramos o mundo misterioso das máquinas de vetor de suporte e deciframos os segredos ocultos nas redes Bayesianas.
É claro, nessa jornada, a transformação dos dados é uma arte em si mesma. Usamos as mãos habilidosas da normalização e padronização para criar harmonia nos nossos conjuntos de dados. Com a elegância do PolynomialFeatures, polimos nossas características até que brilhem com insights ocultos, enquanto as técnicas de redução de dimensionalidade, como o PCA, transformam o excesso de informações em uma sinfonia de insights claros e concisos.
Quando exploramos as profundezas, a validação cruzada não é apenas um conceito, mas uma prática sagrada. Dividimos nossos dados, treinamos e testamos, garantindo que nosso modelo não apenas cante bem em um palco, mas que também mantenha a harmonia em todo o concerto.
E enquanto nos deleitamos com os resultados, a ética nos lembra de que a tecnologia avançada traz responsabilidade. Abraçamos a ética de ponta a ponta, questionando os vieses, considerando os impactos e nos esforçando para tornar nossa busca pelo conhecimento uma contribuição positiva para a sociedade.
Python avançado com ML é uma jornada, e o trajeto é iluminado pelo brilho da inovação. À medida que desvendamos o enigma das redes neurais convolucionais, sentimentos profundos de realização e curiosidade nos impulsionam adiante.
Portanto, avance sem medo, pois aqui, a vanguarda tecnológica é sua aliada. Seja a magia dos algoritmos de otimização ou a maravilha das redes generativas adversárias, o futuro se desdobra diante de nós em um ritmo acelerado. Então, pegue o código, abrace o conhecimento e desafie os limites do que é possível em Python avançado com ML.
O ML em Python é alimentada por um ecossistema robusto de bibliotecas e ferramentas que oferecem uma ampla gama de algoritmos, técnicas e recursos para treinar, avaliar e implantar modelos.
Vamos explorar os detalhes técnicos desse ecossistema:
Lembre-se, o ML é tanto uma arte quanto uma ciência. Explorar e experimentar são partes essenciais do processo. Com o Python avançado como seu aliado, você tem as ferramentas para desvendar os padrões ocultos nos dados e transformá-los em conhecimento e insights valiosos.
O Scikit-Learn é uma das bibliotecas mais populares para aprendizado de máquina em Python, oferece uma ampla gama de algoritmos e ferramentas para realizar tarefas de aprendizado de máquina, desde pré-processamento de dados até avaliação de modelos.
Vamos detalhar algumas das principais funcionalidades do Scikit-Learn:
O Scikit-Learn é uma ferramenta poderosa para explorar e experimentar com algoritmos de aprendizado de máquina. Sua interface consistente e ampla gama de funcionalidades tornam-no uma escolha popular para iniciantes e especialistas em aprendizado de máquina.
Aqui está um exemplo de código utilizando o Scikit-Learn para treinar um modelo de regressão linear simples com preparação de dados:
# Importar bibliotecas
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
# Criar dados simulados
np.random.seed(42)
dados_simulados = np.random.rand(100, 1) * 10 # Recurso (variável independente)
alvos_simulados = 2 * dados_simulados + 1 + np.random.randn(100, 1) # Rótulo (variável dependente com ruído)
# Dividir os dados em treinamento e teste
dados_treino, dados_teste, alvos_treino, alvos_teste = train_test_split(
dados_simulados, alvos_simulados, test_size=0.2, random_state=42)
# Pré-processamento dos dados: Padronização (escalonamento)
scaler = StandardScaler()
dados_treino_dimensionado = scaler.fit_transform(dados_treino)
dados_teste_dimensionado = scaler.transform(dados_teste)
# Treinar o modelo de regressão linear
reglin = LinearRegression()
reglin.fit(dados_treino_dimensionado, alvos_treino)
# Fazer previsões
alvos_previstos = reglin.predict(dados_teste_dimensionado)
# Calcular o erro médio quadrático
mse = mean_squared_error(alvos_teste, alvos_previstos)
print("Coeficiente:", reglin.coef_[0][0])
print("Interceptação:", reglin.intercept_[0])
print("Erro Médio Quadrático:", mse)
Neste exemplo, estamos treinando um modelo de regressão linear para prever um rótulo (variável dependente) com base em uma única característica (variável independente). O código inclui os seguintes passos:
Este exemplo demonstra como preparar dados, treinar um modelo de regressão linear e avaliar suas previsões usando o Scikit-Learn.
Aqui está um exemplo de código utilizando o Scikit-Learn para selecionar um modelo de regressão linear:
# Importar bibliotecas
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
# Criar dados simulados
np.random.seed(42)
dados_simulados = np.random.rand(100, 1) * 10 # Recurso (variável independente)
alvos_simulados = 2 * dados_simulados + 1 + np.random.randn(100, 1) # Rótulo (variável dependente com ruído)
# Dividir os dados em treinamento e teste
dados_treino, dados_teste, alvos_treino, alvos_teste = train_test_split(
dados_simulados, alvos_simulados, test_size=0.2, random_state=42)
# Pré-processamento dos dados: Padronização (escalonamento)
scaler = StandardScaler()
dados_treino_dimensionado = scaler.fit_transform(dados_treino)
dados_teste_dimensionado = scaler.transform(dados_teste)
# Treinar o modelo de regressão linear
reglin = LinearRegression()
reglin.fit(dados_treino_dimensionado, alvos_treino)
# Selecionar o melhor modelo
from sklearn.model_selection import cross_val_score
# Utilizar cross_val_score para avaliar o modelo
escores = cross_val_score(reglin, dados_treino_dimensionado, alvos_treino, scoring="neg_mean_squared_error", cv=10)
escores_rmse = np.sqrt(-escores)
# Exibir os resultados
print("Escores:", escores_rmse)
print("Média:", escores_rmse.mean())
print("Desvio Padrão:", escores_rmse.std())
Aqui está um exemplo de código utilizando o Scikit-Learn para realizar seleção de modelos usando validação cruzada:
# Importar bibliotecas
import numpy as np
from sklearn.datasets import load_diabetes
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.linear_model import LinearRegression, Ridge, Lasso
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_squared_error
# Carregar o conjunto de dados de exemplo (Diabetes dataset)
data = load_diabetes()
dados_diabetes, alvos_diabetes = data.data, data.target
# Dividir os dados em treinamento e teste
dados_treino, dados_teste, alvos_treino, alvos_teste = train_test_split(
dados_diabetes, alvos_diabetes, test_size=0.2, random_state=42)
# Criar uma lista de modelos para avaliar
modelos = [
("Regressão Linear", LinearRegression()),
("Regressão Ridge", Ridge()),
("Regressão Lasso", Lasso()),
("Regressão Florestas Aleatórias", RandomForestRegressor())
]
# Avaliar os modelos usando validação cruzada
for nome_modelo, reglin in modelos:
escores = cross_val_score(reglin, dados_treino, alvos_treino, cv=5, scoring="neg_mean_squared_error")
escores_rmse = np.sqrt(-escores)
media_rmse = np.mean(escores_rmse)
print(f"Modelo: {nome_modelo}")
print(f"Média RMSE: {media_rmse}\n")
# Escolher o melhor modelo com base no menor RMSE
melhor_modelo = min(modelos, key=lambda x: np.mean(np.sqrt(-cross_val_score(x[1], dados_treino, alvos_treino, cv=5, scoring="neg_mean_squared_error"))))
print(f"Melhor Modelo: {melhor_modelo[0]}")
Neste exemplo, estamos utilizando o conjunto de dados de exemplo "Diabets" do Scikit-Learn para ilustrar a seleção de modelos usando validação cruzada.
O código inclui os seguintes passos:
Este exemplo demonstra como usar o Scikit-Learn para realizar seleção de modelos com validação cruzada e escolher o melhor modelo com base na métrica de desempenho.
Aqui está um exemplo de código usando o Scikit-Learn para treinar e avaliar modelos de classificação com o conjunto de dados "Iris":
# Importar bibliotecas
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LogisticRegression
from sklearn.tree import DecisionTreeClassifier
from sklearn.metrics import accuracy_score, classification_report
from sklearn.datasets import load_iris
# Carregar o conjunto de dados de exemplo (dataset "Iris")
data = load_iris()
dados_iris, alvos_iris = data.data, data.target
# Dividir os dados em treinamento e teste
dados_treino, dados_teste, alvos_treino, alvos_teste = train_test_split(
dados_iris, alvos_iris, test_size=0.2, random_state=42)
# Treinar um modelo de Regressão Logística
reglog = LogisticRegression(max_iter=1000)
reglog.fit(dados_treino, alvos_treino)
# Fazer previsões no conjunto de teste
previsoes = reglog.predict(dados_teste)
# Avaliar o desempenho do modelo de Regressão Logística
acuracia_reglog = accuracy_score(alvos_teste, previsoes)
relatorio_classificacao_reglog = classification_report(alvos_teste, previsoes)
print("*** Modelo de Regressão Logística")
print(f"Acurâcia: {acuracia_reglog}")
print("*** Relatório de classificação")
print(relatorio_classificacao_reglog)
print()
# Treinar um modelo de Árvore de Decisão
dtc = DecisionTreeClassifier()
dtc.fit(dados_treino, alvos_treino)
# Fazer previsões no conjunto de teste
previsoes_arvore = dtc.predict(dados_teste)
# Avaliar o desempenho do modelo de Árvore de Decisão
acuracia_arvore = accuracy_score(alvos_teste, previsoes_arvore)
relatorio_classificacao_arvore = classification_report(alvos_teste, previsoes_arvore)
print("Modelo de Árvore de Decisão:")
print(f"Acurâcia: {acuracia_arvore}")
print("Relatório de classificação:")
print(relatorio_classificacao_arvore)
Neste exemplo, estamos usando o conjunto de dados "Iris dataset" do Scikit-Learn para ilustrar o treinamento e avaliação de modelos de classificação. O código inclui os seguintes passos:
Este exemplo ilustra como usar o Scikit-Learn para treinar e avaliar modelos de classificação em um conjunto de dados.
Aqui está um exemplo de código usando o Scikit-Learn para realizar a seleção de hiperparâmetros usando Grid Search em um modelo de regressão de máquina de vetores de suporte (SVM):
# Importar bibliotecas
import numpy as np
from sklearn.model_selection import train_test_split, GridSearchCV
from sklearn.svm import SVC
from sklearn.datasets import load_iris
# Carregar o conjunto de dados de exemplo (Iris dataset)
data = load_iris()
dados_iris, alvos_iris = data.data, data.target
# Dividir os dados em treinamento e teste
dados_treino, dados_teste, alvos_treino, alvos_teste = train_test_split(
dados_iris, alvos_iris, test_size=0.2, random_state=42)
# Definir os hiperparâmetros a serem testados na grade de pesquisa
param_grid = {
'C': [0.1, 1, 10],
'kernel': ['linear', 'rbf', 'poly'],
'degree': [2, 3, 4]
}
# Criar o modelo SVM
modelo_svm = SVC()
# Criar o objeto da grade de pesquisa
grade_pesquisa = GridSearchCV(estimator=modelo_svm, param_grid=param_grid, cv=5)
# Realizar o grade de pesquisa no conjunto de treinamento
grade_pesquisa.fit(dados_treino, alvos_treino)
# Imprimir os melhores hiperparâmetros encontrados
print("Melhores Hiperparâmetros:", grade_pesquisa.best_params_)
# Avaliar o desempenho do modelo com os melhores hiperparâmetros no conjunto de teste
melhor_modelo = grade_pesquisa.best_estimator_
acuracia_teste = melhor_modelo.score(dados_teste, alvos_teste)
print("Acurâcia Teste:", acuracia_teste)
Neste exemplo, estamos usando o conjunto de dados "Iris" do Scikit-Learn para ilustrar a seleção de hiperparâmetros usando grade de pesquisa em um modelo SVM. O código inclui os seguintes passos:
Este exemplo demonstra como usar o Scikit-Learn para realizar a seleção de hiperparâmetros usando Grid Search em um modelo de aprendizado de máquina.
Aqui está um exemplo de código usando o Scikit-Learn para criar um pipeline de modelagem que inclui pré-processamento de dados e treinamento de um modelo de regressão linear:
# Importar bibliotecas
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import StandardScaler
from sklearn.linear_model import LinearRegression
from sklearn.pipeline import Pipeline
from sklearn.metrics import mean_squared_error
from sklearn.datasets import load_diabetes
# Carregar o conjunto de dados de exemplo (Diabetes dataset)
data = load_diabetes()
dados_diabetes, alvos_diabetes = data.data, data.target
# Dividir os dados em treinamento e teste
dados_treino, dados_teste, alvos_treino, alvos_teste = train_test_split(dados_diabetes, alvos_diabetes, test_size=0.2, random_state=42)
# Criar um pipeline de modelagem
pipeline_modelo = Pipeline([
('scaler', StandardScaler()), # Pré-processamento: Padronização dos dados
('regressor', LinearRegression()) # Modelo: Regressão Linear
])
# Treinar o modelo usando o pipeline
pipeline_modelo.fit(dados_treino, alvos_treino)
# Fazer previsões no conjunto de teste
alvos_previstos = pipeline_modelo.predict(dados_teste)
# Calcular o erro médio quadrático (MSE) das previsões
mse = mean_squared_error(alvos_teste, alvos_previstos)
print("Erro Médio Quadrático:", mse)
Neste exemplo, estamos usando o conjunto de dados "Diabetes dataset" do Scikit-Learn para criar um pipeline de modelagem que inclui pré-processamento (padronização) dos dados usando StandardScaler e treinamento de um modelo de regressão linear. O código inclui os seguintes passos:
Este exemplo ilustra como criar um pipeline de modelagem no Scikit-Learn, permitindo que você encadeie etapas de pré-processamento e treinamento de modelos de maneira eficiente e organizada.
Aqui está um exemplo de código usando o Scikit-Learn para realizar manipulação de dados, incluindo codificação de variáveis categóricas e imputação de valores faltantes:
# Importar bibliotecas
import numpy as np
import pandas as pd
from sklearn.preprocessing import OneHotEncoder, StandardScaler
from sklearn.impute import SimpleImputer
from sklearn.compose import ColumnTransformer
from sklearn.pipeline import Pipeline
# Criar um DataFrame de exemplo
data = {'idade': [25, 30, np.nan, 35, 28],
'gênero': ['M', 'F', 'F', 'M', 'M'],
'salário': [50000, 60000, 45000, np.nan, 55000]}
df = pd.DataFrame(data)
# Definir colunas numéricas e categóricas
caracteristicas_numericas = ['idade', 'salário']
caracteristicas_categoricas = ['gênero']
# Criar transformadores para pré-processamento
numeric_transformer = Pipeline(steps=[
('imputer', SimpleImputer(strategy='mean')),
('scaler', StandardScaler())
])
categorical_transformer = Pipeline(steps=[
('imputer', SimpleImputer(strategy='most_frequent')),
('encoder', OneHotEncoder())
])
# Combinar os transformadores usando ColumnTransformer
preprocessor = ColumnTransformer(
transformers=[
('num', numeric_transformer, caracteristicas_numericas),
('cat', categorical_transformer, caracteristicas_categoricas)
])
# Aplicar o pré-processamento aos dados
X = preprocessor.fit_transform(df)
# Exibir os dados pré-processados
print(X)
Neste exemplo, estamos usando um DataFrame de exemplo para ilustrar a manipulação de dados com o scikit-learn. O código inclui os seguintes passos:
Este exemplo ilustra como criar um pipeline de transformaçã de modelagem no Scikit-Learn, permitindo que você encadeie etapas de pré-processamento e treinamento de modelos de maneira eficiente e organizada, demonstrando como usar o scikit-learn para pré-processar dados, incluindo imputação de valores faltantes e codificação de variáveis categóricas, utilizando o pipeline.
Aqui está um exemplo de código usando o Scikit-Learn para treinar um modelo de regressão linear e, em seguida, visualizar os resultados:
import numpy as np
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error
# Gerar dados de exemplo
np.random.seed(0)
dados_aleatorios = np.random.rand(100, 1) * 10
alvos_aleatorios = 2 * dados_aleatorios + 1 + np.random.randn(100, 1)
# Dividir os dados em conjunto de treinamento e teste
dados_treino, dados_teste, alvos_treino, alvos_teste = train_test_split(
dados_aleatorios, alvos_aleatorios, test_size=0.2, random_state=0)
# Treinar o modelo de regressão linear
reglin = LinearRegression()
reglin.fit(dados_treino, alvos_treino)
# Fazer previsões no conjunto de teste
alvos_previstos = reglin.predict(dados_teste)
# Calcular o erro médio quadrado
mse = mean_squared_error(alvos_teste, alvos_previstos)
# Ajustar tamanhos de fonte
plt.rc('font', size=12) # Tamanho da fonte das etiquetas dos eixos e título
plt.rc('axes', titlesize=14) # Tamanho da fonte do título do gráfico
# Visualizar os resultados
plt.scatter(dados_teste, alvos_teste, color='blue', label='Dados de teste')
plt.plot(dados_teste, alvos_previstos, color='red', linewidth=2, label='Regressão Linear')
plt.xlabel('Dados', fontsize=12)
plt.ylabel('Alvos', fontsize=12)
plt.title(f'Regressão Linear - MSE: {mse:.2f}')
plt.legend()
plt.show()
Neste exemplo, estamos gerando dados de exemplo, dividindo-os em conjuntos de treinamento e teste, treinando um modelo de regressão linear, fazendo previsões e, finalmente, visualizando os resultados usando a biblioteca matplotlib.
O código inclui os seguintes passos:
Este exemplo demonstra como usar o Scikit-Learn para treinar um modelo de regressão linear e visualizar os resultados para avaliar o desempenho do modelo.
O Keras é uma API de alto nível para construção e treinamento de redes neurais em diversas bibliotecas de aprendizado de máquina, incluindo o TensorFlow. Ele foi projetado para ser simples e intuitivo, permitindo que os desenvolvedores criem e experimentem rapidamente modelos de aprendizado profundo. Aqui estão os principais detalhes sobre o Keras:
Ele também possui uma documentação detalhada que abrange desde conceitos básicos até tópicos avançados.
O Keras é uma escolha popular para desenvolvedores que desejam criar e treinar modelos de aprendizado profundo de maneira rápida e eficiente.
Sua abordagem amigável, modular e flexível permite que tanto iniciantes quanto especialistas em aprendizado de máquina experimentem e criem modelos complexos, tornando-o uma ferramenta valiosa para a construção de soluções baseadas em redes neurais.
O Keras torna a construção e treinamento de redes neurais mais simples e acessível, permitindo que você crie modelos poderosos com apenas algumas linhas de código.
O Keras é conhecido por sua simplicidade e usabilidade, especialmente ao construir redes neurais.
Aqui está um exemplo básico de como criar uma rede neural simples de classificação de imagens usando o Keras:
import numpy as np
from keras.models import Sequential
from keras.layers import Dense
from keras.optimizers import SGD
# Dados de exemplo: 4 amostras com 2 características cada
X = np.array([[0, 0], [0, 1], [1, 0], [1, 1]])
y = np.array([0, 1, 1, 0])
# Criação do modelo
modelo = Sequential()
modelo.add(Dense(units=2, activation='sigmoid', input_dim=2))
modelo.add(Dense(units=1, activation='sigmoid'))
# Compilação do modelo
optimizer = SGD(learning_rate=0.1)
modelo.compile(loss='binary_crossentropy', optimizer=optimizer, metrics=['accuracy'])
# Treinamento do modelo
modelo.fit(X, y, epochs=1000, verbose=0)
# Avaliação do modelo
loss, acuracia = modelo.evaluate(X, y)
# Predições
previsoes = modelo.predict(X)
Imprimimos a perda, a acurâcia e as previsões.
print(f"Perda: {loss:.4f}, Accuracy: {acuracia:.4f}")
print(f"previsões:\n {previsoes}")
Neste exemplo, estamos criando uma rede neural com duas camadas densas (totalmente conectadas) usando o Keras. O modelo é compilado com uma função de perda de entropia cruzada binária e otimizado usando o otimizador SGD (gradiente descendente estocástico). Depois de treinado, o modelo é avaliado e usado para fazer previsões.
O Keras é conhecido por sua modularidade, o que facilita a criação de modelos complexos combinando diferentes tipos de camadas. Aqui está um exemplo que demonstra a modularidade do Keras ao criar uma rede neural com várias camadas de diferentes tipos:
import numpy as np
from keras.models import Sequential
from keras.layers import Input, Dense, Dropout, Activation
from keras.optimizers import Adam
# Dados de exemplo: 4 amostras com 3 características cada
X = np.array([[0, 0, 0], [0, 1, 1], [1, 0, 1], [1, 1, 0]])
y = np.array([0, 1, 1, 0])
# Criação do modelo
modelo = Sequential()
# Adicionando camada de entrada
modelo.add(Input(shape=(3,)))
# Adicionando camadas densas com ativações diferentes
modelo.add(Dense(units=4))
modelo.add(Activation('relu'))
modelo.add(Dense(units=2))
modelo.add(Activation('tanh'))
# Adicionando camada de dropout para regularização
modelo.add(Dropout(0.2))
# Camada de saída com ativação sigmoid para classificação binária
modelo.add(Dense(units=1))
modelo.add(Activation('sigmoid'))
# Compilação do modelo
optimizer = Adam(learning_rate=0.01)
modelo.compile(loss='binary_crossentropy', optimizer=optimizer, metrics=['accuracy'])
# Treinamento do modelo
modelo.fit(X, y, epochs=1000, verbose=0)
# Avaliação do modelo
perda, acuracia = modelo.evaluate(X, y)
# Predições
previsoes = modelo.predict(X)
Imprimimos a perda, a acurâcia e as previsões.
print(f"Perda: {perda:.4f}, Accuracy: {acuracia:.4f}")
print(f"Previsões: \n {previsoes}")
Neste exemplo, estamos criando um modelo mais complexo usando várias camadas diferentes, como Dense (totalmente conectada), Activation (ativação) e Dropout (regularização). Isso ilustra como o Keras permite a criação de modelos modulares, onde você pode facilmente combinar diferentes tipos de camadas para construir uma rede neural personalizada. Isso é especialmente útil para criar arquiteturas de modelos mais avançados e sofisticados.
O Keras tem suporte a múltiplos backends, como TensorFlow, Theano e CNTK.
O TensorFlow é o backend padrão e o Keras lida automaticamente com esses detalhes de implementação.
Aqui está um exemplo de código que mostra com backend usando o TensorFlow:
import numpy as np
from keras.models import Sequential
from keras.layers import Dense
# Crie seu modelo aqui usando as camadas do Keras
modelo = Sequential()
modelo.add(Dense(units=64, activation='relu', input_dim=100))
modelo.add(Dense(units=1, activation='sigmoid'))
# Compile o modelo e treine-o
modelo.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
# Dados de exemplo
X = np.random.rand(100, 100)
y = np.random.randint(2, size=(100,))
modelo.fit(X, y, epochs=10, batch_size=32)
# Avalie o modelo
perda, acuracia = modelo.evaluate(X, y)
Imprimimos a perda e a acurâcia.
print(f"Perda: {perda:.4f}")
print(f"Acurâcia: {acuracia:.4f}")
Entretanto, o Theano não é mais mantido ou suportado ativamente, e muitas das bibliotecas populares de aprendizado de máquina, incluindo o Keras, estão migrando para outros backends como o TensorFlow. Portanto, não é recomendado usar o Theano como backend para o Keras.
O Microsoft Cognitive Toolkit (CNTK) foi outro backend suportado pelo Keras no passado, mas o suporte ao CNTK foi descontinuado nas versões mais recentes do Keras. Portanto, também não é recomendado usar o CNTK como backend para o Keras.
Se você deseja usar o Keras com um backend atualmente suportado, o TensorFlow é a opção recomendada. Para usar o TensorFlow como backend, você não precisa de nenhuma configuração especial, já que o TensorFlow é o backend padrão no Keras.
Aqui está um exemplo com cinco modelos diferentes, cada um representando um tipo de arquitetura de rede no Keras.
Primeiro, importamos as bibliotecas necessárias:
from keras.models import Sequential
from keras.layers import Dense
from keras.layers import Reshape
from keras.layers import Flatten
from keras.layers import Conv2D
from keras.layers import Conv2DTranspose
from keras.layers import LeakyReLU
from keras.layers import Dropout
from keras.layers import Embedding
from keras.layers import LSTM
from keras.layers import MaxPooling2D
Modelo 1: Rede Neural Simples
model_simples = Sequential()
model_simples.add(Dense(units=128, activation='relu', input_dim=784))
model_simples.add(Dense(units=64, activation='relu'))
model_simples.add(Dense(units=10, activation='softmax'))
model_simples.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
print(model_simples.summary())
Modelo 2: Rede Convolucional
modelo_conv = Sequential()
modelo_conv.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=(28, 28, 1)))
modelo_conv.add(MaxPooling2D(pool_size=(2, 2)))
modelo_conv.add(Flatten())
modelo_conv.add(Dense(128, activation='relu'))
modelo_conv.add(Dense(10, activation='softmax'))
modelo_conv.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
print(modelo_conv.summary())
Modelo 3: Rede Recorrente (LSTM)
modelo_lsmt = Sequential()
modelo_lsmt.add(Embedding(input_dim=10000, output_dim=128))
modelo_lsmt.add(LSTM(units=64))
modelo_lsmt.add(Dense(units=10, activation='softmax'))
modelo_lsmt.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
print(modelo_lsmt.summary())
Modelo 4: Rede com Camadas Combinadas
modelo_combinado = Sequential()
modelo_combinado.add(Conv2D(32, kernel_size=(3, 3), activation='relu', input_shape=(28, 28, 1)))
modelo_combinado.add(MaxPooling2D(pool_size=(2, 2)))
modelo_combinado.add(Flatten())
modelo_combinado.add(Dense(128, activation='relu'))
#modelo_combinado.add(LSTM(units=64))
modelo_combinado.add(Dense(10, activation='softmax'))
modelo_combinado.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
print(modelo_combinado.summary())
Modelo 5: Rede Generativa Adversarial (GAN - Generative Adversarial Network)
def definir_gan(g_model, d_model):
d_model.trainable = False
modelo = Sequential()
modelo.add(g_model)
modelo.add(d_model)
modelo.compile(loss='binary_crossentropy', optimizer='adam')
return modelo
def definir_discriminador(in_shape=(28,28,1)):
modelo = Sequential()
modelo.add(Conv2D(64, (3,3), strides=(2, 2), padding='same', input_shape=in_shape))
modelo.add(LeakyReLU(alpha=0.2))
modelo.add(Dropout(0.4))
modelo.add(Conv2D(64, (3,3), strides=(2, 2), padding='same'))
modelo.add(LeakyReLU(alpha=0.2))
modelo.add(Dropout(0.4))
modelo.add(Flatten())
modelo.add(Dense(1, activation='sigmoid'))
modelo.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])
return modelo
def definir_gerador(latent_dim):
modelo = Sequential()
n_nodes = 128 * 7 * 7
modelo.add(Dense(n_nodes, input_dim=latent_dim))
modelo.add(LeakyReLU(alpha=0.2))
modelo.add(Reshape((7, 7, 128)))
modelo.add(Conv2DTranspose(128, (4,4), strides=(2,2), padding='same'))
modelo.add(LeakyReLU(alpha=0.2))
modelo.add(Conv2DTranspose(128, (4,4), strides=(2,2), padding='same'))
modelo.add(LeakyReLU(alpha=0.2))
modelo.add(Conv2D(1, (7,7), activation='sigmoid', padding='same'))
modelo.compile(loss='binary_crossentropy', optimizer='adam')
return modelo
latent_dim = 100
discriminator = definir_discriminador()
generator = definir_gerador(latent_dim)
modelo_gan = definir_gan(generator, discriminator)
print(modelo_gan.summary())
Neste exemplo, temos cinco modelos diferentes: uma rede neural simples, uma rede convolucional, uma rede recorrente (LSTM), uma rede com camadas combinadas e uma rede generativa adversarial (GAN).
Cada modelo demonstra a flexibilidade do Keras em criar arquiteturas diversificadas para diferentes tipos de tarefas de aprendizado de máquina.
O TensorFlow é uma das bibliotecas mais populares e abrangentes para aprendizado de máquina e aprendizado profundo (deep learning). Desenvolvido pela equipe do Google Brain, o TensorFlow oferece uma estrutura flexível e escalável para construir e treinar modelos de aprendizado de máquina. Aqui estão os principais detalhes sobre o TensorFlow:
O TensorFlow é uma escolha popular para projetos de aprendizado de máquina e aprendizado profundo, especialmente quando se deseja flexibilidade, personalização e capacidade de dimensionamento para tarefas complexas. Sua combinação de alto desempenho, flexibilidade e ampla comunidade de usuários o torna uma ferramenta poderosa para criar, treinar e implantar modelos de aprendizado de máquina em diversas aplicações.
O PyTorch é uma biblioteca de aprendizado de máquina de código aberto que se tornou uma das principais escolhas para a pesquisa e implementação de modelos de aprendizado profundo. Ele se destaca por sua flexibilidade, dinamicidade e comunidade ativa. Vamos detalhar os principais aspectos do PyTorch:
O PyTorch é especialmente valorizado por pesquisadores e cientistas de dados devido à sua natureza dinâmica e amigável ao prototipagem. Sua abordagem mais próxima do código permite que você mergulhe profundamente na construção e modificação de modelos, facilitando a experimentação e a inovação no campo de aprendizado de máquina e aprendizado profundo.
O XGBoost (Extreme Gradient Boosting) é um algoritmo de aprendizado de máquina que pertence à categoria de algoritmos de boosting. Ele é amplamente utilizado para tarefas de classificação e regressão devido à sua eficácia em lidar com dados complexos e não lineares. Vamos detalhar os principais aspectos do XGBoost:
O XGBoost tem sido uma escolha popular em competições de ciência de dados e é amplamente utilizado em projetos do mundo real. Sua eficácia em modelar relações complexas, bem como suas técnicas de regularização e recursos de otimização, o tornam uma ferramenta poderosa para resolver uma variedade de problemas de aprendizado de máquina.
O LightGBM (Light Gradient Boosting Machine) é outro algoritmo de aprendizado de máquina que pertence à família de métodos de boosting. Ele foi projetado para ser eficiente em termos de uso de recursos e rápido em termos de treinamento, tornando-o uma escolha popular para lidar com grandes conjuntos de dados. Vamos detalhar os principais aspectos do LightGBM:
O LightGBM é uma excelente opção para problemas que envolvem grandes volumes de dados e alta dimensionalidade, onde sua eficiência e capacidade de lidar com recursos categóricos podem resultar em um desempenho superior.
O pandas é uma das bibliotecas Python mais populares e amplamente utilizadas para análise e manipulação de dados. Ele oferece estruturas de dados flexíveis e eficientes para lidar com dados tabulares, como tabelas e planilhas, tornando-o essencial para tarefas de pré-processamento, análise exploratória e transformação de dados. Vamos detalhar os principais aspectos do pandas:
O pandas é uma ferramenta essencial para cientistas de dados, analistas e engenheiros de aprendizado de máquina, pois fornece uma base sólida para o pré-processamento e exploração de dados antes de aplicar algoritmos de aprendizado de máquina. Sua sintaxe intuitiva e poderosa facilita o trabalho com dados tabulares de diversas fontes.
O NumPy (Numerical Python) é uma biblioteca fundamental em Python para computação numérica e científica. Ele fornece suporte para arrays multidimensionais, funções matemáticas de alto desempenho e ferramentas para trabalhar com dados numéricos. Aqui estão os principais aspectos do NumPy:
NumPy é uma peça essencial do ecossistema de ciência de dados em Python. Sua eficiência e ampla gama de funcionalidades o tornam uma escolha popular para qualquer tarefa que envolva manipulação e análise de dados numéricos.
O Matplotlib é uma das bibliotecas mais populares em Python para visualização de dados e criação de gráficos de alta qualidade. Ele oferece uma ampla variedade de funções para criar gráficos estáticos, interativos e animados. Aqui estão os principais aspectos do Matplotlib:
O Matplotlib é uma ferramenta indispensável para cientistas de dados, pesquisadores e engenheiros que precisam comunicar eficazmente seus insights por meio de visualizações. Sua flexibilidade, vasta gama de funcionalidades e suporte a diferentes estilos tornam-no uma escolha popular para a criação de gráficos em Python.
O Seaborn é uma biblioteca de visualização de dados em Python que é construída em cima do Matplotlib. Ele fornece uma interface de alto nível para criar visualizações estatísticas atraentes e informativas. O Seaborn é especialmente útil quando se trata de criar gráficos complexos e estatísticos de maneira simples. Aqui estão os principais aspectos do Seaborn:
O Seaborn é especialmente adequado para explorar relacionamentos entre variáveis em análises estatísticas e para criar gráficos estatísticos de maneira visualmente atraente e intuitiva. Sua interface de alto nível torna a criação de gráficos complexos mais simples, permitindo que os cientistas de dados e analistas foquem mais na interpretação dos resultados.