<jupyter_start><jupyter_text>Parte 2: Redução de dimensionalidadeConsidere o conjunto de dados MNIST utilizado na Atividade 6. Realize a redução de dimensionalidade dos dados com o algoritmo PCA. Escolha um algoritmo de classificação e aplique ele, comparando os resultados com e sem a redução de dimensionalidade. A quantidade de dimensões utilizadas é de sua escolha. Discuta o resultado.Extra: faça o plot de imagens do dataset após a redução de dimensionalidade.<jupyter_code>from tensorflow.keras.datasets import mnist
import matplotlib.pyplot as plt
import pandas as pd
import seaborn as sns
import numpy as np
from sklearn.model_selection import train_test_split
from time import time
#loading
#loading
(X_train, y_train), (X_test, y_test) = mnist.load_data()
image_size = X_train.shape[1]
input_size = image_size*image_size
X_test = np.reshape(X_test,[-1,input_size])
X_train = np.reshape(X_train,[-1,input_size])
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
#Normalizando os dados de treino e validação
X_train_norm = scaler.fit_transform(X_train) 
X_test_norm = scaler.transform(X_test) 
X_train_norm.shape<jupyter_output><empty_output><jupyter_text>Modelo Escolhido: Support Vector Machine(SVM)Aplicando o modelo antes de fazer a redução de dimensionalidade.<jupyter_code>from sklearn.svm import SVC
model = SVC()
model.fit(X_train_norm, y_train)
y_pred = model.predict(X_test_norm)
from sklearn import metrics
# Acurácia individualmente
metrics.accuracy_score(y_test,y_pred)<jupyter_output><empty_output><jupyter_text>Aplicando a redução de dimensionalidade através do PCAn_components: define a quantidade de componentes principais ou até a porcentagem de variação dos dados que o desenvolvedor quer reter ao fazer a redução de dimensionalidade.explained_variance_ratio_: apresenta a porcentagem da variância total dos dados que é explicada por cada componente.<jupyter_code>from sklearn.decomposition import PCA
# Usando componentes que retenham 96% de variação do dataset original
pca = PCA(0.96)
X_train_pca = pca.fit_transform(X_train_norm)
X_train_pca.shape
pca.explained_variance_ratio_
pca.n_components_
X_test_pca = pca.transform(X_test_norm)
from sklearn.svm import SVC
model = SVC()
model.fit(X_train_pca, y_train)
y_pred_pca = model.predict(X_test_pca)
metrics.accuracy_score(y_test,y_pred_pca)<jupyter_output><empty_output><jupyter_text>Fazendo a redução para 2 componentes<jupyter_code>pca2 = PCA(n_components=2)
X_train_pca2 = pca2.fit_transform(X_train_norm)
X_train_pca2.shape
pca2.explained_variance_ratio_
X_train_pca2
X_test_pca2 = pca2.transform(X_test_norm)
model = SVC()
model.fit(X_train_pca2, y_train)
y_pred_pca2 = model.predict(X_test_pca2)
metrics.accuracy_score(y_test,y_pred_pca2) 
stacking = np.vstack((X_train_pca2.T , y_train)).T
#dataframe = pd.DataFrame(data=stacking , columns=("1st component", "2nd Component" , "Labels"))

#dataframe.head(5)
stacking.shape
sns.FacetGrid(dataframe , hue='Labels', height=8).map(plt.scatter, '1st component' , '2nd Component').add_legend()
plt.show()<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.07871720116618076, 'fraction_numerical': 0.01004211208292841, 'mean_word_length': 7.483516483516484, 'pattern_counts': {'":': 0, '<': 17, '<?xml version=': 0, '>': 17, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '4', 'dir': 'jupyter-structured-clean-dedup', 'id': '451215', 'license': 'MIT', 'n_tokens_mistral': 1149, 'n_tokens_neox': 1127, 'n_words': 275, 'path': 'Atividade 7/Atividade 7 - PCA.ipynb', 'repo_name': 'Ruann-01/Python_IA', 'size': '3087'}