<jupyter_start><jupyter_text>Balanceamento de classesFeito em um notebook separado para carregar somente o mínimo de pacotes necessários para economia de memória<jupyter_code>import numpy as np
from imblearn.over_sampling import SMOTE
X_train = np.loadtxt('data_files/X_train.csv', delimiter=',')
X_train.nbytes
np.count_nonzero(X_train)
# Verificando esparsidade da matriz X_train

np.count_nonzero(X_train) / ((X_train.shape[0] * X_train.shape[1]))
#X_train = X_train.astype('float16')
#X_train.nbytes
#X_train.shape
y_train = np.loadtxt('data_files/y_train.csv', delimiter=',')
y_train.shape
#y_train = y_train.astype('float16')
sm = SMOTE()
X_train_balanced, y_train_balanced = sm.fit_resample(X_train, y_train)
X_train_balanced.shape
y_train_balanced.shape
from collections import Counter<jupyter_output><empty_output><jupyter_text>Conferindo a contagem das classes após a execução do SMOTE<jupyter_code>Counter(y_train)
Counter(y_train_balanced)<jupyter_output><empty_output><jupyter_text>Salvando os resultados para a próxima etapa<jupyter_code>#np.savetxt('data_files/X_train_balanced.csv', X_train_balanced, delimiter=',')
#np.savetxt('data_files/y_train_balanced.csv', y_train_balanced, delimiter=',')
# Reduzindo a precisão dos números para redução do espaço ocupado na memória
#np.savetxt('data_files/X_train_balanced_v5.csv', X_train_balanced, delimiter=',', fmt='%1.4e')
#np.savetxt('data_files/y_train_balanced_v5.csv', y_train_balanced, delimiter=',', fmt='%1.4e')
X_train_balanced.nbytes
# Verificando esparsidade da matriz X_train

np.count_nonzero(X_train_balanced) / ((X_train_balanced.shape[0] * X_train_balanced.shape[1]))<jupyter_output><empty_output><jupyter_text>Matriz X_train_balanced ocupa 6,5 GB na memória e 3,5 GB em disco. Apresentou problemas de carregamento na máquina local para processamento posterior. Porém, a matriz apresenta apenas 4% de elementos não-nulos. Estratégia é gravar e carregar a matriz como matriz esparsa e depois convertê-la para array numpy.  Tratamento como matriz esparsa<jupyter_code>from scipy import sparse
from sys import getsizeof
X_train_blc_sparse = sparse.coo_matrix(X_train_balanced)
X_train_blc_sparse.shape
getsizeof(X_train_balanced)
getsizeof(X_train_blc_sparse)
sparse.save_npz('data_files/X_train_blc_sparse.npz', X_train_blc_sparse)<jupyter_output><empty_output><jupyter_text>O tamanho do arquivo em disco foi reduzido para 91.9 MB<jupyter_code># Salvando o dataset de teste no mesmo formato para aplicação da redução de dimensionalidade
X_test = np.loadtxt('data_files/X_test.csv', delimiter=',')
X_test_sparse = sparse.coo_matrix(X_test)
sparse.save_npz('data_files/X_test_sparse.npz', X_test_sparse)
# Salvando o y_train_balanced, que será necessário na etapa de treinamento dos modelos de ML
np.savez('data_files/y_train_balanced.npz', y_train_balanced)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.09542118140510311, 'fraction_numerical': 0.007689619014330654, 'mean_word_length': 8.414473684210526, 'pattern_counts': {'":': 0, '<': 21, '<?xml version=': 0, '>': 21, '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': '5', 'dir': 'jupyter-structured-clean-dedup', 'id': '431657', 'license': 'MIT', 'n_tokens_mistral': 1116, 'n_tokens_neox': 1074, 'n_words': 222, 'path': '04-Balanceamento_de_classes.ipynb', 'repo_name': 'rafaelschena/redefining_cancer_treatment', 'size': '2861'}