Documentos de Académico
Documentos de Profesional
Documentos de Cultura
ipynb - Colaboratory
2.- Clasificación
Importando bibliotecas
import numpy as np
import matplotlib.pyplot as plt
import torch
import torch.nn as nn
from torch.utils.data import DataLoader
import sklearn.neural_network as snn
from sklearn import datasets
from sklearn import metrics
from sklearn.model_selection import train_test_split
from scipy.stats import zscore
dataset = datasets.fetch_california_housing()
Xtrain, Xtest, Ytrain, Ytest = train_test_split(dataset.data, dataset.target, test_size=0.3, random_state=0)
Xtrain = zscore(Xtrain, axis=0)
Xtest = zscore(Xtest, axis=0)
https://colab.research.google.com/drive/1FZCC_9l8Yl3ajAx8Gv14wSkGL3xFLOm4#scrollTo=pNdCI6EQGizz&printMode=true 1/11
14/2/24, 23:15 Copy of 01_Taller.ipynb - Colaboratory
0.2907898898274257
metrics.mean_squared_error(Ytest, mdl.predict(Xtest))
0.37760063190465504
keyboard_arrow_down Regresión: Analizar los errores cuadráticos medios obtenidos por cada modelo implementado.
¿Existe alguna diferencia en los resultados alcanzados?
El modelo de entrenamiento dependiendo de los valores ingresados nos dan un resultado bastante
acertado en cuanto a los precios de ventas de las viviendas. Al ploteralos al tener mayor dimensión
mejor es el precio.
keyboard_arrow_down Pytorch
https://colab.research.google.com/drive/1FZCC_9l8Yl3ajAx8Gv14wSkGL3xFLOm4#scrollTo=pNdCI6EQGizz&printMode=true 2/11
14/2/24, 23:15 Copy of 01_Taller.ipynb - Colaboratory
Xtrain = torch.FloatTensor(Xtrain)
Ytrain = torch.FloatTensor(Ytrain).reshape(-1, 1)
Xtest = torch.FloatTensor(Xtest)
Ytest = torch.FloatTensor(Ytest).reshape(-1, 1)
trainloader = DataLoader(list(zip(Xtrain, Ytrain)), batch_size=20, shuffle=True)
model = nn.Sequential(
nn.Linear(8, 30),
nn.ReLU(),
nn.Linear(30, 1)
)
loss_fn = nn.MSELoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
lossTest = []
for epoch in range(100):
model.train()
for input, output in trainloader:
y_hat = model(input)
loss = loss_fn(y_hat, output)
optimizer.zero_grad()
loss.backward()
optimizer.step()
model.eval()
y_hat = model(Xtest)
loss = loss_fn(y_hat, Ytest)
lossTest.append(float(loss))
plt.plot(lossTest);
https://colab.research.google.com/drive/1FZCC_9l8Yl3ajAx8Gv14wSkGL3xFLOm4#scrollTo=pNdCI6EQGizz&printMode=true 3/11
14/2/24, 23:15 Copy of 01_Taller.ipynb - Colaboratory
digits = datasets.load_digits()
for i in range(9):
plt.subplot(330 + 1 + i)
plt.imshow(digits.images[i], cmap='gray')
https://colab.research.google.com/drive/1FZCC_9l8Yl3ajAx8Gv14wSkGL3xFLOm4#scrollTo=pNdCI6EQGizz&printMode=true 4/11
14/2/24, 23:15 Copy of 01_Taller.ipynb - Colaboratory
https://colab.research.google.com/drive/1FZCC_9l8Yl3ajAx8Gv14wSkGL3xFLOm4#scrollTo=pNdCI6EQGizz&printMode=true 5/11
14/2/24, 23:15 Copy of 01_Taller.ipynb - Colaboratory
/usr/local/lib/python3.10/dist-packages/sklearn/neural_network/_multilayer_perceptron.py:686: ConvergenceWarning: Stochastic Optimizer: Maximum iterations (1000) reached and the optimization hasn
warnings.warn(
Y_hat = clf.predict(Xtest)
print(metrics.classification_report(Ytest, Y_hat))
Matriz de confusión
https://colab.research.google.com/drive/1FZCC_9l8Yl3ajAx8Gv14wSkGL3xFLOm4#scrollTo=pNdCI6EQGizz&printMode=true 6/11
14/2/24, 23:15 Copy of 01_Taller.ipynb - Colaboratory
keyboard_arrow_down Clasificación: analizar las matrices de confusión presentadas. ¿Existe alguna diferencia en los
resultados alcanzados?
Así tenemos que al ingresar los números de aprendizaje un valor mas alto vemos que el porcentaje
de acierto es el 95% y en 10 intentos del número 0 solo tiene 1 equivocación.
keyboard_arrow_down Pytorch
Adaptación de los datos
Xtrain = torch.FloatTensor(Xtrain)
Ytrain = torch.LongTensor(Ytrain)
Xtest = torch.FloatTensor(Xtest)
Ytest = torch.LongTensor(Ytest)
trainloader = DataLoader(list(zip(Xtrain, Ytrain)), batch_size=100, shuffle=True)
https://colab.research.google.com/drive/1FZCC_9l8Yl3ajAx8Gv14wSkGL3xFLOm4#scrollTo=pNdCI6EQGizz&printMode=true 7/11
14/2/24, 23:15 Copy of 01_Taller.ipynb - Colaboratory
model = nn.Sequential(
nn.Linear(Xtrain.shape[1], 50),
nn.ReLU(),
nn.Linear(50, 30),
nn.ReLU(),
nn.Linear(30, 10)
)
loss_fn = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=0.001)
lossTest = []
for epoch in range(800):
model.train()
for input, output in trainloader:
y_hat = model(input)
loss = loss_fn(y_hat, output)
optimizer.zero_grad()
loss.backward()
optimizer.step()
model.eval()
y_hat = model(Xtest)
loss = loss_fn(y_hat, Ytest)
lossTest.append(float(loss))
plt.plot(lossTest);
Model evaluation
https://colab.research.google.com/drive/1FZCC_9l8Yl3ajAx8Gv14wSkGL3xFLOm4#scrollTo=pNdCI6EQGizz&printMode=true 8/11
14/2/24, 23:15 Copy of 01_Taller.ipynb - Colaboratory
Y_hat = model(Xtest).detach().numpy().argmax(axis=1)
print(metrics.classification_report(Ytest, Y_hat))
cm = metrics.confusion_matrix(Ytest, Y_hat, labels=clf.classes_)
disp = metrics.ConfusionMatrixDisplay(confusion_matrix=cm, display_labels=clf.classes_)
p = disp.plot()
https://colab.research.google.com/drive/1FZCC_9l8Yl3ajAx8Gv14wSkGL3xFLOm4#scrollTo=pNdCI6EQGizz&printMode=true 9/11
14/2/24, 23:15 Copy of 01_Taller.ipynb - Colaboratory
x = np.linspace(0, 3*np.pi, 500)
y = np.sin(x) + np.random.normal(0, 0.2, len(x))
p = plt.plot(x, y)
x = x.reshape(-1,1)
#TODO
# Instanciar el modelo
# Entrenar (fit)
# Evaluar (predict)
https://colab.research.google.com/drive/1FZCC_9l8Yl3ajAx8Gv14wSkGL3xFLOm4#scrollTo=pNdCI6EQGizz&printMode=true 10/11
14/2/24, 23:15 Copy of 01_Taller.ipynb - Colaboratory
https://colab.research.google.com/drive/1FZCC_9l8Yl3ajAx8Gv14wSkGL3xFLOm4#scrollTo=pNdCI6EQGizz&printMode=true 11/11