{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.12.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"none","dataSources":[{"sourceType":"competition","sourceId":3004,"databundleVersionId":861823}],"dockerImageVersionId":31286,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import pandas as pd\nimport numpy as np\nimport tensorflow as tf\nfrom tensorflow.keras import layers, models\nfrom sklearn.model_selection import train_test_split\nimport os\n\ninput_path = \"/kaggle/input/digit-recognizer/\"\n\nprint(\"Carregando dados...\")\ntrain = pd.read_csv(os.path.join(input_path, 'train.csv'))\ntest = pd.read_csv(os.path.join(input_path, 'test.csv'))\n\nX = train.drop('label', axis=1).values / 255.0  # Normalização\ny = train['label'].values\n\n# Divisão Treino/Validação\nX_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.1, random_state=0)\n\n# MLP (Multilayer Perceptron)\nmodel = models.Sequential([\n    layers.Input(shape=(784,)),           \n    layers.Dense(512, activation='relu'), \n    layers.Dense(256, activation='relu'), \n    layers.Dropout(0.2),                  # Combate o overfitting, evita vícios de treino\n    layers.Dense(10, activation='softmax') \n])\n\nmodel.compile(optimizer='adam', \n              loss='sparse_categorical_crossentropy', \n              metrics=['accuracy'])\n\nprint(\"Iniciando treinamento...\")\nmodel.fit(X_train, y_train, epochs=5, batch_size=64, validation_data=(X_val, y_val))\n\n# Predição\nprint(\"Gerando predições...\")\ntest_data = test.values / 255.0\n\npredictions = model.predict(test_data)\nfinal_labels = np.argmax(predictions, axis=1)\n\n# submissão\nsubmission = pd.DataFrame({\n    \"ImageId\": np.arange(1, len(final_labels) + 1),\n    \"Label\": final_labels\n})\n\n\n#MATRIZ DE CONFUSÃO\n\n\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nfrom sklearn.metrics import confusion_matrix\n\n# 1. Obter as previsões para o conjunto de VALIDAÇÃO\nprint(\"Gerando Matriz de Confusão...\")\ny_val_pred = model.predict(X_val)\ny_val_pred_labels = np.argmax(y_val_pred, axis=1)\n\n# 2. Criar a matriz\ncm = confusion_matrix(y_val, y_val_pred_labels)\n\n# 3. Plotar usando Seaborn\nplt.figure(figsize=(10, 8))\nsns.heatmap(cm, annot=True, fmt='d', cmap='Blues', \n            xticklabels=range(10), yticklabels=range(10))\nplt.xlabel('Previsão do Modelo')\nplt.ylabel('Valor Real (Gabarito)')\nplt.title('Matriz de Confusão - Rede Neural MLP')\nplt.show()","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2026-02-27T21:57:02.420295Z","iopub.execute_input":"2026-02-27T21:57:02.420810Z","iopub.status.idle":"2026-02-27T21:57:30.653630Z","shell.execute_reply.started":"2026-02-27T21:57:02.420779Z","shell.execute_reply":"2026-02-27T21:57:30.652551Z"}},"outputs":[],"execution_count":null}]}