Na semana passada, neste blog, apresentei AdaOpt
para R, aplicado a iris
classificação do conjunto de dados. E na semana anterior, apresentei AdaOpt
para Python. AdaOpt
é uma novela probabilístico classificador, baseado em uma combinação de otimização multivariável e vizinhos mais próximos algoritmo. Mais detalhes sobre o algoritmo podem ser encontrados neste documento (curto). Esta semana, vamos treinar AdaOpt
no popular conjunto de dados de dígitos manuscritos MNIST sem pré-processamento, também conhecido como convolução e pool.
Instalar mlsauce
É AdaOpt
na linha de comando (para R, veja abaixo):
!pip install git+https://github.com/thierrymoudiki/mlsauce.git --upgrade
Importe o pacotes que serão necessários para a demonstração:
from time import time
from tqdm import tqdm
import mlsauce as ms
import numpy as np
from sklearn.metrics import classification_report
from sklearn.model_selection import train_test_split
from sklearn.datasets import fetch_openml
Obter MNIST dados de dígitos manuscritos (observe que aqui, AdaOpt
é treinado em 5000 dígitos e avaliado em 10000):
Z, t = fetch_openml('mnist_784', version=1, return_X_y=True)
print(Z.shape)
print(t.shape)
t_ = np.asarray(t, dtype=int)
np.random.seed(2395)
train_samples = 5000
X_train, X_test, y_train, y_test = train_test_split(
Z, t_, train_size=train_samples, test_size=10000)
Criação de um AdaOpt
objeto:
obj = ms.AdaOpt(**{'eta': 0.13913503573317965, 'gamma': 0.1764634904063013,
'k': np.int(1.2154947405849463),
'learning_rate': 0.6161538857826013,
'n_iterations': np.int(245.55517115592275),
'reg_alpha': 0.29915416038957043,
'reg_lambda': 0.163411853029936,
'row_sample': 0.9477046112286693,
'tolerance': 0.05877163298305207})
Ajustando a AdaOpt
objeto ao conjunto de treinamento:
start = time()
obj.fit(X_train, y_train)
print(time()-start)
Obtenha o precisão do AdaOpt
no conjunto de teste:
start = time()
print(obj.score(X_test, y_test))
print(time()-start)
Relatório de classificação incluindo métricas de erro adicionais:
preds = obj.predict(X_test)
print(classification_report(preds, y_test))
precision recall f1-score support
0 0.99 0.94 0.96 1018
1 0.99 0.95 0.97 1205
2 0.93 0.97 0.95 955
3 0.92 0.91 0.91 1064
4 0.91 0.95 0.93 882
5 0.89 0.95 0.92 838
6 0.97 0.96 0.96 974
7 0.95 0.95 0.95 1054
8 0.88 0.93 0.91 953
9 0.93 0.88 0.91 1057
accuracy 0.94 10000
macro avg 0.94 0.94 0.94 10000
weighted avg 0.94 0.94 0.94 10000
Matriz de confusão, rótulo verdadeiro versus rótulo previsto:
import matplotlib.pyplot as plt
import seaborn as sns; sns.set()
from sklearn.metrics import confusion_matrix
mat = confusion_matrix(y_test, preds)
sns.heatmap(mat.T, square=True, annot=True, fmt='d', cbar=False)
plt.xlabel('true label')
plt.ylabel('predicted label');
Em R, a sintaxe é bem parecida ao que acabamos de demonstrar para o Python. Depois de ter instalado mlsauce
, teríamos:
- Para a criação de um
AdaOpt
objeto:
library(mlsauce)
# create AdaOpt object with default parameters
obj
- Para instalar o
AdaOpt
objeto ao conjunto de treinamento:
# fit AdaOpt to training set
obj$fit(X_train, y_train)
- Para obter a precisão de
AdaOpt
no conjunto de teste:
# obtain accuracy on test set
print(obj$score(X_test, y_test))
Nota: Atualmente, estou procurando um show. Você pode me contratar no Malt ou me enviar um e-mail: thierry dot moudiki às pm me dot. Eu posso fazer estatísticas descritivas, preparação de dados, engenharia de recursos, calibração de modelos, treinamento e validação e interpretação de saídas de modelos. Sou fluente em Python, R, SQL, Microsoft Excel, Visual Basic (entre outros) e francês. Meu resumo? Aqui!
Relacionado
Se você chegou até aqui, por que não inscreva-se para atualizações do site? Escolha o seu sabor: e-mail, twitter, RSS ou facebook …