{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"name":"python","version":"3.10.14","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"gpu","dataSources":[{"sourceId":81933,"databundleVersionId":9643020,"sourceType":"competition"},{"sourceId":180958,"sourceType":"modelInstanceVersion","isSourceIdPinned":true,"modelInstanceId":116163,"modelId":139407},{"sourceId":180959,"sourceType":"modelInstanceVersion","isSourceIdPinned":true,"modelInstanceId":146357,"modelId":168896}],"dockerImageVersionId":30787,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"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\nimport os\n# for dirname, _, filenames in os.walk('/kaggle/input'):\n#     for filename in filenames:\n#         print(os.path.join(dirname, filename))\n\n# You can write up to 20GB to the current directory (/kaggle/working/) that gets preserved as output when you create a version using \"Save & Run All\" \n# You can also write temporary files to /kaggle/temp/, but they won't be saved outside of the current session","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","execution":{"iopub.status.busy":"2024-11-28T00:33:21.576431Z","iopub.execute_input":"2024-11-28T00:33:21.576998Z","iopub.status.idle":"2024-11-28T00:33:21.885359Z","shell.execute_reply.started":"2024-11-28T00:33:21.576969Z","shell.execute_reply":"2024-11-28T00:33:21.884474Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import sys\nsys.path.append(\"/kaggle/input/child-mind-institute-internet-usage/pytorch/default/5\")\nsys.path.append(\"/kaggle/input/kaggle/input/teste_22-525/pytorch/default/7\")","metadata":{"execution":{"iopub.status.busy":"2024-11-28T00:33:23.687377Z","iopub.execute_input":"2024-11-28T00:33:23.688510Z","iopub.status.idle":"2024-11-28T00:33:23.692834Z","shell.execute_reply.started":"2024-11-28T00:33:23.688451Z","shell.execute_reply":"2024-11-28T00:33:23.691814Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"%mkdir /kaggle/working/runs\n%mkdir /kaggle/working/weights","metadata":{"execution":{"iopub.status.busy":"2024-11-28T00:33:25.027117Z","iopub.execute_input":"2024-11-28T00:33:25.028016Z","iopub.status.idle":"2024-11-28T00:33:27.019600Z","shell.execute_reply.started":"2024-11-28T00:33:25.027970Z","shell.execute_reply":"2024-11-28T00:33:27.018444Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import pandas as pd\nfrom sklearn.cluster import KMeans\nfrom sklearn.mixture import GaussianMixture\nfrom sklearn.linear_model import LinearRegression\nfrom matplotlib import pyplot\nfrom numpy import unique\nfrom numpy import where\nimport numpy as np\nfrom hyperopt import fmin, tpe, hp, STATUS_OK, Trials, space_eval\nfrom torch.utils.data import DataLoader, random_split\nfrom sklearn.decomposition import PCA\nfrom sklearn.tree import DecisionTreeRegressor, DecisionTreeClassifier\nimport os\nimport json\nimport torch.nn as nn\nimport torch\nfrom sklearn.metrics import cohen_kappa_score, accuracy_score\nfrom pathlib import Path\nfrom torch.utils.tensorboard import SummaryWriter\nfrom tqdm import tqdm\nimport warnings\n\nfrom config import get_config, get_weights_file_path, get_experiment_file_path, get_experiment_path, log\nfrom model import *\nfrom dataset import ChildMindDataset\nfrom train import run_validation, calculate_precision, run_metrics","metadata":{"execution":{"iopub.status.busy":"2024-11-28T00:33:27.021685Z","iopub.execute_input":"2024-11-28T00:33:27.022386Z","iopub.status.idle":"2024-11-28T00:33:41.908674Z","shell.execute_reply.started":"2024-11-28T00:33:27.022327Z","shell.execute_reply":"2024-11-28T00:33:41.907809Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# GET AND PROCESS DATA","metadata":{}},{"cell_type":"code","source":"config = get_config()\nconfig['data_folder'] = '/kaggle/input/child-mind-institute-problematic-internet-use'\nconfig['model_folder'] = '/kaggle/working/weights'\nconfig['experiment_folder'] = '/kaggle/working/runs'\nconfig['experiment_name'] = 'teste_02'\nconfig['num_epochs'] = 500\nconfig['hidden_size']=1024\nconfig['num_layers']=2\nconfig['dropout']=0.1\n\nexperiment_path = get_experiment_path(config)\nif not os.path.exists(experiment_path):\n    os.makedirs(experiment_path)","metadata":{"execution":{"iopub.status.busy":"2024-11-28T00:33:41.910061Z","iopub.execute_input":"2024-11-28T00:33:41.910682Z","iopub.status.idle":"2024-11-28T00:33:41.916033Z","shell.execute_reply.started":"2024-11-28T00:33:41.910650Z","shell.execute_reply":"2024-11-28T00:33:41.915055Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Carregando os dados","metadata":{}},{"cell_type":"code","source":"train = pd.read_csv(config['data_folder'] + '/train.csv')\ntest = pd.read_csv(config['data_folder'] + '/test.csv')","metadata":{"execution":{"iopub.status.busy":"2024-11-28T00:33:41.917096Z","iopub.execute_input":"2024-11-28T00:33:41.917365Z","iopub.status.idle":"2024-11-28T00:33:42.112878Z","shell.execute_reply.started":"2024-11-28T00:33:41.917319Z","shell.execute_reply":"2024-11-28T00:33:42.111999Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"columns = [\"Basic_Demos-Age\", \"Basic_Demos-Sex\", \"CGAS-CGAS_Score\",\n            \"Physical-BMI\", \"Physical-Height\", \"Physical-Weight\", \"Physical-Waist_Circumference\", \"Physical-HeartRate\", \"Physical-Systolic_BP\",\n             \"Fitness_Endurance-Max_Stage\", \"Fitness_Endurance-Time_Mins\", \"Fitness_Endurance-Time_Sec\", \n             \"FGC-FGC_CU\", \"FGC-FGC_GSND\", \"FGC-FGC_GSD\", \"FGC-FGC_PU\", \"FGC-FGC_SRL\", \"FGC-FGC_SRR\",\"FGC-FGC_TL\", \n             \"BIA-BIA_Activity_Level_num\", \"BIA-BIA_BMC\", \"BIA-BIA_BMI\", \"BIA-BIA_BMR\", \"BIA-BIA_DEE\", \"BIA-BIA_ECW\", \"BIA-BIA_FFM\", \"BIA-BIA_FFMI\", \"BIA-BIA_FMI\", \"BIA-BIA_Fat\", \n             \"BIA-BIA_Frame_num\", \"BIA-BIA_ICW\", \"BIA-BIA_LDM\", \"BIA-BIA_LST\", \"BIA-BIA_SMM\", \"BIA-BIA_TBW\", \n             \"PAQ_A-PAQ_A_Total\", \"PAQ_C-PAQ_C_Total\", \n             \"SDS-SDS_Total_Raw\", \"SDS-SDS_Total_T\", \"PreInt_EduHx-computerinternet_hoursday\"\n           ]","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-28T00:33:42.114508Z","iopub.execute_input":"2024-11-28T00:33:42.114807Z","iopub.status.idle":"2024-11-28T00:33:42.120098Z","shell.execute_reply.started":"2024-11-28T00:33:42.114780Z","shell.execute_reply":"2024-11-28T00:33:42.119208Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Handle Nan in Data","metadata":{}},{"cell_type":"code","source":"def handle_missing(data: pd.DataFrame, axis=['Basic_Demos-Age', 'Basic_Demos-Sex'], repeat=5, train_data=None, ignore_columns=['sii']):\n    new_data = data.copy()\n\n    used_columns = axis.copy()\n    for r in range(repeat):\n        for column in data.columns:\n            valid_column = column not in axis and column not in ignore_columns\n            has_nan = data[column].isna().sum()>0\n            model = None\n            if data[column].dtype == int and valid_column and has_nan:\n                model = DecisionTreeClassifier(max_depth=5)\n\n            elif data[column].dtype == float and valid_column and has_nan:\n                model = DecisionTreeRegressor(max_depth=5)\n            else:\n                continue\n\n            y = new_data[column].dropna()\n            x = new_data[used_columns].iloc[y.index]\n            if train_data is not None:\n                y = train_data[column]\n                x = train_data[used_columns].iloc[y.index]\n\n            model.fit(x, y)\n\n            score = model.score(x, y)\n\n            log(f\"Coluna: {column} - Model: {model.__class__.__name__} - R2: {score} - Repeat: {r}\", \"regression.txt\", config)\n\n            x = new_data[used_columns].loc[data[column].isna()]\n            new_data[column].iloc[x.index] = model.predict(x)\n\n            if column not in used_columns:\n                used_columns.append(column)\n\n    return new_data\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-28T00:33:42.121199Z","iopub.execute_input":"2024-11-28T00:33:42.121534Z","iopub.status.idle":"2024-11-28T00:33:42.135548Z","shell.execute_reply.started":"2024-11-28T00:33:42.121508Z","shell.execute_reply":"2024-11-28T00:33:42.134755Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train = handle_missing(train, ['Basic_Demos-Age', 'Basic_Demos-Sex'], repeat=5, train_data=None, ignore_columns=['sii'])\ntest = handle_missing(test, ['Basic_Demos-Age', 'Basic_Demos-Sex'], repeat=2, train_data=train, ignore_columns=['sii'])","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-28T00:33:42.136489Z","iopub.execute_input":"2024-11-28T00:33:42.136756Z","iopub.status.idle":"2024-11-28T00:33:58.779252Z","shell.execute_reply.started":"2024-11-28T00:33:42.136732Z","shell.execute_reply":"2024-11-28T00:33:58.778261Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Handle Nan in Target","metadata":{}},{"cell_type":"code","source":"train = train[train['sii'].notna()].reset_index(drop=True)\ndistribution = train.groupby(['sii']).count()['id']\ndistribution","metadata":{"execution":{"iopub.status.busy":"2024-11-28T00:33:58.780540Z","iopub.execute_input":"2024-11-28T00:33:58.780880Z","iopub.status.idle":"2024-11-28T00:33:58.796635Z","shell.execute_reply.started":"2024-11-28T00:33:58.780845Z","shell.execute_reply":"2024-11-28T00:33:58.795877Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Determining used columns","metadata":{}},{"cell_type":"code","source":"correlation_columns = columns+[\"sii\"]\ncorrelation = train[correlation_columns].corr()\ncorrelation.to_csv(f'{experiment_path}/correlation.csv')\ncorrelation['sii'].to_csv(f'{experiment_path}/correlation_sii.csv')","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-28T00:33:58.798643Z","iopub.execute_input":"2024-11-28T00:33:58.798894Z","iopub.status.idle":"2024-11-28T00:33:58.830632Z","shell.execute_reply.started":"2024-11-28T00:33:58.798871Z","shell.execute_reply":"2024-11-28T00:33:58.829820Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"correlation['sii']","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-28T00:34:10.959730Z","iopub.execute_input":"2024-11-28T00:34:10.960078Z","iopub.status.idle":"2024-11-28T00:34:10.967484Z","shell.execute_reply.started":"2024-11-28T00:34:10.960049Z","shell.execute_reply":"2024-11-28T00:34:10.966609Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"columns = correlation['sii'].loc[abs(correlation['sii'])>0.3].index.drop('sii')\ncolumns = ['Basic_Demos-Age', 'Physical-Height', 'Physical-Weight', 'FGC-FGC_GSD',\n       'PreInt_EduHx-computerinternet_hoursday']","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-28T00:35:54.391754Z","iopub.execute_input":"2024-11-28T00:35:54.392749Z","iopub.status.idle":"2024-11-28T00:35:54.399110Z","shell.execute_reply.started":"2024-11-28T00:35:54.392699Z","shell.execute_reply":"2024-11-28T00:35:54.398216Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Adding noise to data","metadata":{}},{"cell_type":"code","source":"noised_columns = [\"Physical-BMI\", \"Physical-Height\", \"Physical-Weight\", \"Physical-Waist_Circumference\", \"Physical-HeartRate\", \"Physical-Systolic_BP\",\n             \"Fitness_Endurance-Max_Stage\", \"Fitness_Endurance-Time_Mins\", \"Fitness_Endurance-Time_Sec\", \n             \"FGC-FGC_CU\", \"FGC-FGC_GSND\", \"FGC-FGC_GSD\", \"FGC-FGC_PU\", \"FGC-FGC_SRL\", \"FGC-FGC_SRR\",\"FGC-FGC_TL\", \n             \"BIA-BIA_Activity_Level_num\", \"BIA-BIA_BMC\", \"BIA-BIA_BMI\", \"BIA-BIA_BMR\", \"BIA-BIA_DEE\", \"BIA-BIA_ECW\", \"BIA-BIA_FFM\", \"BIA-BIA_FFMI\", \"BIA-BIA_FMI\", \"BIA-BIA_Fat\", \n             \"BIA-BIA_Frame_num\", \"BIA-BIA_ICW\", \"BIA-BIA_LDM\", \"BIA-BIA_LST\", \"BIA-BIA_SMM\", \"BIA-BIA_TBW\", \n             \"PAQ_A-PAQ_A_Total\", \"PAQ_C-PAQ_C_Total\", \n             \"SDS-SDS_Total_Raw\", \"SDS-SDS_Total_T\", \"PreInt_EduHx-computerinternet_hoursday\"\n           ]","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-28T00:35:56.623919Z","iopub.execute_input":"2024-11-28T00:35:56.624265Z","iopub.status.idle":"2024-11-28T00:35:56.629120Z","shell.execute_reply.started":"2024-11-28T00:35:56.624235Z","shell.execute_reply":"2024-11-28T00:35:56.628196Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def noise(data, columns):\n    noise = np.random.normal(scale=data[columns].std()/5, size=(len(data), len(columns)))\n    data[columns] += noise\n    return data\n#  DUPLICATE DATA TO BALANCE THE DATASET\ndef duplicate(data, noised=True):\n    distribution = data.groupby(['sii']).count()['id']\n    for i, v in zip(distribution.index,distribution[0]/distribution):\n        if v > 1:\n            added = data[data['sii']==i]\n            if noised:\n                added = noise(added, noised_columns)\n            for j in range(int(v)):\n                data = pd.concat([data, added], axis=0, ignore_index=True)\n    return data","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-28T00:35:58.159162Z","iopub.execute_input":"2024-11-28T00:35:58.159542Z","iopub.status.idle":"2024-11-28T00:35:58.165572Z","shell.execute_reply.started":"2024-11-28T00:35:58.159512Z","shell.execute_reply":"2024-11-28T00:35:58.164576Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"### Splitting and noising","metadata":{}},{"cell_type":"code","source":"train_ds_size = int(0.9 * len(train))\nval_ds_size = len(train) - train_ds_size\ntrain, val = random_split(train, [train_ds_size, val_ds_size])\n\ntrain = duplicate(train.dataset.iloc[sorted(train.indices)], noised=False)\nval = duplicate(val.dataset.iloc[sorted(val.indices)], noised=False)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-28T00:35:59.415894Z","iopub.execute_input":"2024-11-28T00:35:59.416715Z","iopub.status.idle":"2024-11-28T00:35:59.566439Z","shell.execute_reply.started":"2024-11-28T00:35:59.416677Z","shell.execute_reply":"2024-11-28T00:35:59.565711Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Generate final datasets","metadata":{}},{"cell_type":"code","source":"transform=None\nif config['transform']:\n    n_components = 10\n    transform = PCA(n_components=n_components)\n    transform.fit(train[columns].values)\n\ntrain_ds = ChildMindDataset(train, columns, transform)\nval_ds = ChildMindDataset(val, columns, transform)\ntest_ds = ChildMindDataset(test, columns, transform)\n\ntrain_dataloader = DataLoader(train_ds, batch_size=config['batch_size'], shuffle=True)\nval_dataloader = DataLoader(val_ds, batch_size=1, shuffle=True)\ntest_dataloader = DataLoader(test_ds, batch_size=1, shuffle=False)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-28T00:36:00.556265Z","iopub.execute_input":"2024-11-28T00:36:00.556627Z","iopub.status.idle":"2024-11-28T00:36:00.562322Z","shell.execute_reply.started":"2024-11-28T00:36:00.556597Z","shell.execute_reply":"2024-11-28T00:36:00.561293Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# MAKING PREDICTION","metadata":{}},{"cell_type":"code","source":"if config['transform']: \n     features = n_components\nelse:\n    features = len(columns)\n# model = NeuralNetWorking3(features=features, hidden_size=config['hidden_size'], num_layers=config['num_layers'], num_classes=4, dropout=config['dropout'])\nmodel = NeuralNetWorking6(features=features, hidden_size=[128, 256], num_layers=config['num_layers'], num_classes=4, dropout=config['dropout'])\nfor p in model.parameters():\n        if p.dim() > 1:\n            nn.init.xavier_uniform_(p)","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-28T00:36:01.818743Z","iopub.execute_input":"2024-11-28T00:36:01.819631Z","iopub.status.idle":"2024-11-28T00:36:01.849279Z","shell.execute_reply.started":"2024-11-28T00:36:01.819595Z","shell.execute_reply":"2024-11-28T00:36:01.848485Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# print(f\"Precisção esperada {best_accuracy} do epoch {best_epoch}\" )\nfilename = \"/kaggle/input/teste_22-525/pytorch/default/7/NeuralNetWorking6_size(128 256)_layers1_d0.15_transformNone_batch8_lr0.0001_epoch561.pt\"\ndevice = torch.device('cuda' if torch.cuda.is_available() else 'cpu')\nstate = torch.load(filename, map_location=device)\nmodel.load_state_dict(state['model_state'])","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-28T00:36:04.073956Z","iopub.execute_input":"2024-11-28T00:36:04.074318Z","iopub.status.idle":"2024-11-28T00:36:04.299267Z","shell.execute_reply.started":"2024-11-28T00:36:04.074286Z","shell.execute_reply":"2024-11-28T00:36:04.298503Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"ids = []\npredicted = []\nmodel.to(device)\nmodel.eval()\nprint(\"Prediction Started\")\nwith torch.no_grad():\n    for batch in test_dataloader:\n        ids.append(batch['id'][0])\n        inputs = batch['input'].to(device)\n        output = model(inputs)\n        output = output.argmax(dim=1)\n        predicted.append(output.tolist()[0])\nprint(\"Prediction Finished\")\nsubmission = pd.DataFrame.from_dict({'id': ids, 'sii': predicted})\n\n\nsubmission.to_csv('submission.csv', index=False)\nprint(\"Prediction Submited\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-11-28T00:36:05.612319Z","iopub.execute_input":"2024-11-28T00:36:05.612741Z","iopub.status.idle":"2024-11-28T00:36:05.906772Z","shell.execute_reply.started":"2024-11-28T00:36:05.612712Z","shell.execute_reply":"2024-11-28T00:36:05.905835Z"}},"outputs":[],"execution_count":null}]}