{"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":"none","dataSources":[{"sourceId":81933,"databundleVersionId":9643020,"sourceType":"competition"}],"dockerImageVersionId":30786,"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":false}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import numpy as np\nimport pandas as pd\nimport os\nimport re\nfrom sklearn.base import clone\nfrom sklearn.metrics import cohen_kappa_score\nfrom sklearn.model_selection import StratifiedKFold\nfrom scipy.optimize import minimize\nfrom concurrent.futures import ThreadPoolExecutor\nfrom tqdm import tqdm\nimport polars as pl\nimport polars.selectors as cs\nimport matplotlib.pyplot as plt\nfrom matplotlib.ticker import MaxNLocator, FormatStrFormatter, PercentFormatter\nimport seaborn as sns\n\nfrom sklearn.preprocessing import StandardScaler\nimport matplotlib.pyplot as plt\nfrom keras.models import Model\nfrom keras.layers import Input, Dense\nfrom keras.optimizers import Adam\nimport torch\nimport torch.nn as nn\nimport torch.optim as optim\n\nfrom colorama import Fore, Style\nfrom IPython.display import clear_output\nimport warnings\nfrom lightgbm import LGBMRegressor\nimport lightgbm as lgb\nfrom xgboost import XGBRegressor\nfrom catboost import CatBoostRegressor\nfrom sklearn.ensemble import VotingRegressor, RandomForestRegressor, GradientBoostingRegressor\nfrom sklearn.impute import SimpleImputer, KNNImputer\nfrom sklearn.pipeline import Pipeline\nwarnings.filterwarnings('ignore')\npd.options.display.max_columns = None\n\nfrom sklearn.preprocessing import OrdinalEncoder\nfrom sklearn.ensemble import VotingRegressor\nfrom sklearn.impute import SimpleImputer\nfrom sklearn.impute import KNNImputer\n\nfrom scipy.optimize import minimize\nimport optuna\nfrom sklearn.model_selection import StratifiedKFold\nfrom sklearn.model_selection import StratifiedKFold, cross_val_score\nfrom sklearn.preprocessing import StandardScaler\n\n\nimport torch\nimport torch.nn as nn\nimport torch.optim as optim\nfrom torch.utils.data import DataLoader, TensorDataset\n\n","metadata":{"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","trusted":true,"execution":{"iopub.status.busy":"2024-12-19T07:16:46.752891Z","iopub.execute_input":"2024-12-19T07:16:46.753266Z","iopub.status.idle":"2024-12-19T07:17:10.474210Z","shell.execute_reply.started":"2024-12-19T07:16:46.753219Z","shell.execute_reply":"2024-12-19T07:17:10.473025Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"\n\nimport os\nimport numpy as np\nimport pandas as pd\nimport torch\nfrom torch.utils.data import Dataset, DataLoader\nimport torch.optim as optim\n\nclass ParquetDataset(Dataset):\n    def __init__(self, root_dir, id_list, target_df, mode='train', window_size=50, time_steps=10000):\n        self.root_dir = root_dir\n        self.id_list = id_list\n        self.target_df = target_df.set_index('id') \n        self.mode = mode\n        self.window_size = window_size\n        self.time_steps = time_steps\n        self.scaler = StandardScaler()\n\n    def __len__(self):\n        return len(self.id_list)\n\n    def __getitem__(self, idx):\n        data_id = self.id_list[idx]\n        file_path = os.path.join(self.root_dir, f'id={data_id}', 'part-0.parquet')\n        \n        df = pd.read_parquet(file_path)\n        \n        if df.shape[0] < self.time_steps:\n            print(f\"Skipping file {file_path} due to insufficient time steps: {df.shape[0]}\")\n            return None, None\n\n        target_value = self.target_df.loc[data_id, 'sii'] if self.mode == 'train' else None\n\n        features = df[['X', 'Y', 'Z', 'enmo', 'anglez', 'non-wear_flag', \n                       'light', 'battery_voltage', 'time_of_day']].values\n        \n        # İlk 2,000 zaman adımını al\n        features = features[:self.time_steps]\n        features = self.scaler.fit_transform(features)\n        \n        X, y = self._create_windowed_data(features, target_value)\n        \n        return torch.tensor(X, dtype=torch.float32), torch.tensor(y, dtype=torch.long)  \n\n    def _create_windowed_data(self, features, target_value):\n        X = []\n        for i in range(len(features) - self.window_size):\n            X.append(features[i:i+self.window_size])\n        return X, target_value  \n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-19T07:17:10.475563Z","iopub.execute_input":"2024-12-19T07:17:10.476237Z","iopub.status.idle":"2024-12-19T07:17:10.488202Z","shell.execute_reply.started":"2024-12-19T07:17:10.476199Z","shell.execute_reply":"2024-12-19T07:17:10.486802Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"root_path_train = '/kaggle/input/child-mind-institute-problematic-internet-use/series_train.parquet'\nroot_path_test = '/kaggle/input/child-mind-institute-problematic-internet-use/series_test.parquet'\n\n# List to store IDs\ntrain_parquet_id_list = []\ntest_parquet_id_list = []\n\nfor item in os.listdir(root_path_train):\n    if os.path.isdir(os.path.join(root_path_train, item)) and item.startswith('id='):\n        id_value = item.split('=')[1]\n        train_parquet_id_list.append(id_value)\n\nfor item in os.listdir(root_path_test):\n    if os.path.isdir(os.path.join(root_path_test, item)) and item.startswith('id='):\n        id_value = item.split('=')[1]\n        test_parquet_id_list.append(id_value)\n\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-19T07:17:10.491334Z","iopub.execute_input":"2024-12-19T07:17:10.491926Z","iopub.status.idle":"2024-12-19T07:17:11.472240Z","shell.execute_reply.started":"2024-12-19T07:17:10.491858Z","shell.execute_reply":"2024-12-19T07:17:11.470961Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"target_col  = \"sii\"","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-19T07:17:11.473971Z","iopub.execute_input":"2024-12-19T07:17:11.474322Z","iopub.status.idle":"2024-12-19T07:17:11.479186Z","shell.execute_reply.started":"2024-12-19T07:17:11.474287Z","shell.execute_reply":"2024-12-19T07:17:11.477973Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def collate_fn(batch):\n    batch = [item for item in batch if item[0] is not None and item[1] is not None]\n    if len(batch) == 0:\n        return None, None  \n\n    X, y = zip(*batch)\n    return torch.stack(X), torch.stack(y)  \n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-19T07:17:11.480609Z","iopub.execute_input":"2024-12-19T07:17:11.481028Z","iopub.status.idle":"2024-12-19T07:17:11.499329Z","shell.execute_reply.started":"2024-12-19T07:17:11.480982Z","shell.execute_reply":"2024-12-19T07:17:11.498053Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from sklearn.model_selection import KFold","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-19T07:17:11.500758Z","iopub.execute_input":"2024-12-19T07:17:11.501333Z","iopub.status.idle":"2024-12-19T07:17:11.516649Z","shell.execute_reply.started":"2024-12-19T07:17:11.501280Z","shell.execute_reply":"2024-12-19T07:17:11.514778Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train = pd.read_csv('/kaggle/input/child-mind-institute-problematic-internet-use/train.csv')\ntest = pd.read_csv('/kaggle/input/child-mind-institute-problematic-internet-use/test.csv')\nsample = pd.read_csv('/kaggle/input/child-mind-institute-problematic-internet-use/sample_submission.csv')\n\n\n\n\ntrain_ids = train_parquet_id_list \n\nkf = KFold(n_splits=2, shuffle=True, random_state=42)\nfolds = list(kf.split(train_ids))\n\nfold_1_ids = [train_ids[i] for i in folds[0][0]]\nfold_2_ids = [train_ids[i] for i in folds[1][0]]\n\n\n\ntarget_fold1_df = train[train['id'].isin(fold_1_ids)][['id', 'sii']]\ntarget_fold2_df = train[train['id'].isin(fold_2_ids)][['id', 'sii']]\n\ntrain_dataset_1 = ParquetDataset(root_dir='/kaggle/input/child-mind-institute-problematic-internet-use/series_train.parquet', id_list=fold_1_ids, target_df=target_fold1_df, mode='train')\ntrain_loader_1 = DataLoader(train_dataset_1, batch_size=32, shuffle=True,collate_fn=collate_fn)\n\n\n\ntrain_dataset_2 = ParquetDataset(root_dir='/kaggle/input/child-mind-institute-problematic-internet-use/series_train.parquet', id_list=fold_2_ids, target_df=target_fold2_df, mode='train')\ntrain_loader_2 = DataLoader(train_dataset_2, batch_size=32, shuffle=True,collate_fn=collate_fn)\n\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-19T07:17:11.518028Z","iopub.execute_input":"2024-12-19T07:17:11.518415Z","iopub.status.idle":"2024-12-19T07:17:11.643223Z","shell.execute_reply.started":"2024-12-19T07:17:11.518370Z","shell.execute_reply":"2024-12-19T07:17:11.641839Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"device = torch.device(\"cuda\" if torch.cuda.is_available() else \"cpu\")\nprint(f\"Using device: {device}\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-19T07:17:11.644458Z","iopub.execute_input":"2024-12-19T07:17:11.644860Z","iopub.status.idle":"2024-12-19T07:17:11.651487Z","shell.execute_reply.started":"2024-12-19T07:17:11.644821Z","shell.execute_reply":"2024-12-19T07:17:11.650200Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import torch\nimport torch.nn as nn\n\nclass CNN1D(nn.Module):\n    def __init__(self, input_channels, num_classes):\n        super(CNN1D, self).__init__()\n        self.model = nn.Sequential(\n            nn.Conv1d(input_channels, 32, kernel_size=5),  # Conv1D (32 filters, kernel=5)\n            nn.ReLU(),\n            nn.MaxPool1d(kernel_size=3),  # MaxPooling1D (3)\n            nn.Conv1d(32, 32, kernel_size=5),  # Conv1D (32 filters, kernel=5)\n            nn.ReLU(),\n            nn.MaxPool1d(kernel_size=3),  # MaxPooling1D (3)\n            nn.Conv1d(32, 32, kernel_size=5),  # Conv1D (32 filters, kernel=5)\n            nn.ReLU(),\n            nn.AdaptiveMaxPool1d(1),  # GlobalMaxPooling1D\n            nn.Flatten(),\n            nn.Linear(32, num_classes)  # Dense layer\n        )\n\n    def forward(self, x):\n        return self.model(x)\n\n\ninput_channels = 9\nmodel = CNN1D(input_channels,4).to(device)\ncriterion = nn.CrossEntropyLoss()\noptimizer = optim.Adam(model.parameters(), lr=0.001)\n\n\nnum_epochs = 5\nfor epoch in range(num_epochs):\n    print(f\"Running epoch ====> {epoch + 1}\")\n    model.train()\n    epoch_loss = 0\n    for X, y in train_loader_1:\n        if X is None or y is None:\n            continue\n        X = X.to(device)  \n        y = y.to(device)  \n        X = X.view(X.size(0), 9, -1)\n        optimizer.zero_grad()\n        outputs = model(X)\n        loss = criterion(outputs, y)\n        loss.backward()\n        optimizer.step()\n        epoch_loss += loss.item()  \n    print(f\"Epoch ====> [{epoch+1}/{num_epochs}], Loss: {epoch_loss/len(train_loader_1):.4f}\")\n\nprint(\"Eğitim tamamlandı! Model train_loader_1 ile eğitildi.\")\n\n\nmodel.eval()\npredictions = []\n\nwith torch.no_grad():\n    for batch_idx, (X, y) in enumerate(train_loader_2): \n        if X is None:\n            continue\n        X = X.to(device)\n        X = X.view(X.size(0), 9, -1)\n        outputs = model(X)\n        preds = outputs.cpu().numpy()\n      \n        batch_ids = train_loader_2.dataset.id_list[batch_idx * train_loader_2.batch_size:\n                                                   (batch_idx + 1) * train_loader_2.batch_size]\n\n        for i, pred in enumerate(preds):\n            predictions.append({\"id\": batch_ids[i], \"cnn1d_1_prediction\": pred[0]})\n# Tahminleri CSV'ye kaydet\npredictions_df = pd.DataFrame(predictions)\npredictions_df.to_csv(\"cnn1d_1_predictions_with_validation.csv\", index=False)\nprint(\"Tahminler kaydedildi: cnn1d_1_predictions_with_validation.csv\")\n","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-19T07:17:11.655437Z","iopub.execute_input":"2024-12-19T07:17:11.655928Z","iopub.status.idle":"2024-12-19T09:00:21.168561Z","shell.execute_reply.started":"2024-12-19T07:17:11.655875Z","shell.execute_reply":"2024-12-19T09:00:21.166080Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"input_channels = 9\nmodel = CNN1D(input_channels,4).to(device)\ncriterion = nn.CrossEntropyLoss()\noptimizer = optim.Adam(model.parameters(), lr=0.001)\n\n\nnum_epochs = 5\nfor epoch in range(num_epochs):\n    print(f\"Running epoch ====> {epoch + 1}\")\n    model.train()\n    epoch_loss = 0\n    for X, y in train_loader_2:\n        if X is None or y is None:\n            continue\n        X = X.to(device)  \n        y = y.to(device)  \n        X = X.view(X.size(0), 9, -1)\n        optimizer.zero_grad()\n        outputs = model(X)\n        loss = criterion(outputs, y)\n        loss.backward()\n        optimizer.step()\n        epoch_loss += loss.item()  # Her adımda loss'u topla\n    print(f\"Epoch ====> [{epoch+1}/{num_epochs}], Loss: {epoch_loss/len(train_loader_2):.4f}\")\n\nprint(\"Eğitim tamamlandı! Model train_loader_2 ile eğitildi.\")\n\n\nmodel.eval()  # Modeli tahmin moduna al\npredictions = []  # Tahmin sonuçlarını saklamak için liste\n\nwith torch.no_grad():\n    for batch_idx, (X, y) in enumerate(train_loader_1):  # train_loader_2'nin ID döndürmediğini varsayıyoruz\n        if X is None:\n            continue\n        X = X.to(device)\n        X = X.view(X.size(0), 9, -1)\n        outputs = model(X)\n        preds = outputs.cpu().numpy()\n        \n        # IDs'yi Dataset'in id_list özelliğinden al\n        batch_ids = train_loader_1.dataset.id_list[batch_idx * train_loader_1.batch_size:\n                                                   (batch_idx + 1) * train_loader_1.batch_size]\n\n        for i, pred in enumerate(preds):\n            predictions.append({\"id\": batch_ids[i], \"cnn1d_2_prediction\": pred[0]})\n\n\n# 3. Tahminleri CSV dosyasına kaydet\nimport pandas as pd\n\npredictions_df = pd.DataFrame(predictions)\npredictions_df.to_csv(\"cnn1d_2_predictions.csv\", index=False)\n\nprint(\"Tahminler kaydedildi: cnn1d_2_predictions.csv\")","metadata":{"trusted":true,"execution":{"iopub.status.busy":"2024-12-19T09:00:21.171989Z","iopub.execute_input":"2024-12-19T09:00:21.172665Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"torch.save(model.state_dict(), \"cnn1d_model_weights.pth\")\n","metadata":{"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"print('done')","metadata":{"trusted":true},"outputs":[],"execution_count":null}]}