{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"},"kaggle":{"accelerator":"none","dataSources":[{"sourceId":112509,"databundleVersionId":14254895,"sourceType":"competition"}],"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"# This Python 3 environment comes with many helpful analytics libraries installed\n# It is defined by the kaggle/python Docker image: https://github.com/kaggle/docker-python\n# For example, here's several helpful packages to load\n\nimport numpy as np # linear algebra\nimport pandas as pd # data processing, CSV file I/O (e.g. pd.read_csv)\n\n# Input data files are available in the read-only \"../input/\" directory\n# For example, running this (by clicking run or pressing Shift+Enter) will list all files under the input directory\n# Importando bibliotecas necessárias\nimport pandas as pd\nimport numpy as np\nimport matplotlib.pyplot as plt\nimport seaborn as sns\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.metrics import r2_score\nfrom tensorflow.keras.models import Sequential\nfrom tensorflow.keras.layers import Dense, Conv2D, Flatten, MaxPooling2D, Dropout\nfrom tensorflow.keras.models import Model\nfrom tensorflow.keras.preprocessing.image import ImageDataGenerator\nfrom tensorflow.keras.layers import Input, Concatenate\n\n# Configurações para visualização\nplt.style.use('seaborn')\n\n# 1. Carregamento e exploração dos dados\ndata = pd.read_csv('/kaggle/input/csiro-biomass/test.csv')\nprint(data.head())\nprint(data.info())\n\n# Verificando a presença de dados ausentes\nmissing_values = data.isnull().sum()\nprint(missing_values[missing_values > 0])\n\n# 2. Pré-processamento dos dados\ndef preprocess_data(data):\n    data.fillna(0, inplace=True)\n    return data\n\ndata = preprocess_data(data)\n\n# Separando variáveis independentes e dependentes\nX_images = data.iloc[:, :-5].values  # Supondo que a entrada das imagens é separada\ny = data.iloc[:, -5:]  # As variáveis alvo\n# Incluí também algum recurso adicional se presente\nX_additional = data[['/kaggle/input/csiro-biomass/test.csv', '/kaggle/input/csiro-biomass/train.csv']].values  # Substitua 'feature1', 'feature2' conforme necessário\n\n# Dividir os dados em conjunto de treinamento e teste\nX_train_images, X_test_images, y_train, y_test, X_train_additional, X_test_additional = train_test_split(\n    X_images, y, X_additional, test_size=0.2, random_state=42\n)\n\n# 3. Aumento de dados\ndatagen = ImageDataGenerator(\n    rotation_range=40,\n    width_shift_range=0.2,\n    height_shift_range=0.2,\n    shear_range=0.2,\n    zoom_range=0.2,\n    horizontal_flip=True,\n    fill_mode='nearest'\n)\n\n# 4. Construção do modelo - CNN + MLP\n\n# Entrada para imagens\nimage_input = Input(shape=(224, 224, 3))  # Ajuste de acordo com o tamanho da imagem\nx1 = Conv2D(32, (3, 3), activation='relu')(image_input)\nx1 = MaxPooling2D(pool_size=(2, 2))(x1)\nx1 = Conv2D(64, (3, 3), activation='relu')(x1)\nx1 = MaxPooling2D(pool_size=(2, 2))(x1)\nx1 = Dropout(0.5)(x1)  # Regularização Dropout\nx1 = Flatten()(x1)\n\n# Entrada para dados adicionais\nadditional_input = Input(shape=(X_train_additional.shape[1],))  # Ajuste de acordo com o número de características\nx2 = Dense(64, activation='relu')(additional_input)\n\n# Concatenando as saídas da CNN e da MLP\nmerged = Concatenate()([x1, x2])\noutput = Dense(5, activation='linear')(merged)  # 5 saídas para cada tipo de biomassa\n\n# Criando o modelo final\nmodel = Model(inputs=[image_input, additional_input], outputs=output)\n\n# Compilando o modelo\nmodel.compile(optimizer='adam', loss='mean_squared_error', metrics=['mae'])\n\n# 5. Treinamento do modelo\nhistory = model.fit(datagen.flow(X_train_images, y_train, batch_size=32),\n                    validation_data=(X_test_images, y_test),\n                    epochs=50)\n\n# Avaliando o modelo\npredictions = model.predict([X_test_images, X_test_additional])\n\n# 6. Avaliação do modelo\nweights = [0.1, 0.1, 0.1, 0.2, 0.5]  # Pesos conforme especificados\nr_squared = r2_score(y_test, predictions, sample_weight=weights)\nprint(f'Weighted R²: {r_squared}')\n\n# 7. Gerar o arquivo de submissão\nsample_ids = []\nfor image_id in X_test.index:\n    for target_name in y.columns:\n        sample_ids.append(f'{image_id}__{target_name}')\n\npredictions_flat = predictions.flatten()\nsubmission = pd.DataFrame({\n    'sample_id': sample_ids,\n    'target': predictions_flat\n})\n\nsubmission.to_csv('submission.csv', index=False)\nprint(\"Arquivo de submissão gerado com sucesso.\")\n\n# 8. Visualização dos resultados\nplt.figure(figsize=(10, 5))\nplt.plot(history.history['mae'], label='MAE de Treinamento')\nplt.plot(history.history['val_mae'], label='MAE de Validação')\nplt.xlabel('Epochs')\nplt.ylabel('MAE')\nplt.title('Treinamento e Validação do Modelo')\nplt.legend()\nplt.show()\n\n# Gráfico de dispersão\nplt.figure(figsize=(10, 5))\nplt.scatter(y_test, predictions)\nplt.xlabel('Valores Reais')\nplt.ylabel('Previsões')\nplt.title('Valores Reais vs Previsões')\nplt.plot([0, max(y_test)], [0, max(y_test)], color='red', linestyle='--')\nplt.show()\n","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true},"outputs":[],"execution_count":null}]}