{"metadata":{"kaggle":{"accelerator":"none","dataSources":[{"sourceId":41880,"databundleVersionId":5677426,"sourceType":"competition"}],"isInternetEnabled":false,"language":"python","sourceType":"notebook","isGpuEnabled":false},"kernelspec":{"display_name":"Python 3","language":"python","name":"python3"},"language_info":{"codemirror_mode":{"name":"ipython","version":3},"file_extension":".py","mimetype":"text/x-python","name":"python","nbconvert_exporter":"python","pygments_lexer":"ipython3","version":"3.10.13"},"papermill":{"default_parameters":{},"duration":1037.273189,"end_time":"2024-02-20T11:23:50.223047","environment_variables":{},"exception":null,"input_path":"__notebook__.ipynb","output_path":"__notebook__.ipynb","parameters":{},"start_time":"2024-02-20T11:06:32.949858","version":"2.5.0"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"\nimport os\nimport numpy as np \nimport pandas as pd\nimport matplotlib.pyplot as plt\nimport glob\nfrom math import sqrt\n\nfrom sklearn.metrics import accuracy_score, precision_score, recall_score, f1_score, roc_auc_score\nfrom sklearn.metrics import confusion_matrix, ConfusionMatrixDisplay\nfrom sklearn.model_selection import train_test_split, GridSearchCV, cross_val_score\nfrom sklearn.naive_bayes import GaussianNB\nfrom sklearn.svm import SVC\n\n\nimport lightgbm as lgb\nfrom lightgbm import LGBMClassifier\nfrom sklearn.metrics import roc_auc_score as ras \nfrom imblearn.over_sampling import SMOTE\nfrom sklearn.preprocessing import LabelEncoder\nimport itertools\nfrom itertools import *","metadata":{"_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","execution":{"iopub.execute_input":"2024-02-20T11:06:36.413702Z","iopub.status.busy":"2024-02-20T11:06:36.412226Z","iopub.status.idle":"2024-02-20T11:06:41.146266Z","shell.execute_reply":"2024-02-20T11:06:41.144643Z"},"papermill":{"duration":4.762839,"end_time":"2024-02-20T11:06:41.149722","exception":false,"start_time":"2024-02-20T11:06:36.386883","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"DATA_ROOT_DEFOG = '/kaggle/input/tlvmc-parkinsons-freezing-gait-prediction/train/defog/'\ndefog = pd.DataFrame()\nfor root, dirs, files in os.walk(DATA_ROOT_DEFOG):\n    for name in files:       \n        f = os.path.join(root, name)\n        df_list= pd.read_csv(f)\n        words = name.split('.')[0]\n        df_list['file']= name.split('.')[0]\n        defog = pd.concat([defog, df_list], axis=0)\n        \nkeys = np.arange(len(defog))\ndefog = defog.set_index(keys, drop=True, append=False, inplace=False, verify_integrity=True)\ndefog","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:06:41.210236Z","iopub.status.busy":"2024-02-20T11:06:41.207632Z","iopub.status.idle":"2024-02-20T11:07:46.974471Z","shell.execute_reply":"2024-02-20T11:07:46.973243Z"},"papermill":{"duration":65.825021,"end_time":"2024-02-20T11:07:46.999267","exception":false,"start_time":"2024-02-20T11:06:41.174246","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"defog = defog.drop(['Valid','Task'], axis = 1)\ndefog","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:07:47.046480Z","iopub.status.busy":"2024-02-20T11:07:47.045669Z","iopub.status.idle":"2024-02-20T11:07:47.563061Z","shell.execute_reply":"2024-02-20T11:07:47.561834Z"},"papermill":{"duration":0.54416,"end_time":"2024-02-20T11:07:47.565850","exception":false,"start_time":"2024-02-20T11:07:47.021690","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"defog['IsFOG'] = defog[['StartHesitation', 'Walking','Turn']].any(axis='columns')\nprint('\\n', defog[['Time','StartHesitation', 'Walking','Turn', 'IsFOG']][1047890:1071070])","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:07:47.615881Z","iopub.status.busy":"2024-02-20T11:07:47.615095Z","iopub.status.idle":"2024-02-20T11:07:47.990154Z","shell.execute_reply":"2024-02-20T11:07:47.989072Z"},"papermill":{"duration":0.403202,"end_time":"2024-02-20T11:07:47.993016","exception":false,"start_time":"2024-02-20T11:07:47.589814","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# making sure there are no missing values:\nprint(len(defog['IsFOG'][defog['IsFOG']==0])+len(defog['IsFOG'][defog['IsFOG']==1]))\n\n# defining the beginings of each file/subj (defog has 91 files):\nsubj_start = (defog['Time'][defog['Time']==0])\nsubj_start_ind = np.array(subj_start.index)\nprint(len(subj_start_ind))\n# defining the ends of each file/subj (doesn't include the last one):\nsubj_end_ind = subj_start_ind[1:] - 1\nprint(len(subj_end_ind))\n\nprint('FOG event at head of subject number: ', np.where(defog['IsFOG'][subj_start_ind]==1))\n\nprint('FOG event at tail of subject number: ',np.where(defog['IsFOG'][subj_end_ind]==1))","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:07:48.045390Z","iopub.status.busy":"2024-02-20T11:07:48.044605Z","iopub.status.idle":"2024-02-20T11:07:49.464543Z","shell.execute_reply":"2024-02-20T11:07:49.463076Z"},"papermill":{"duration":1.449361,"end_time":"2024-02-20T11:07:49.467747","exception":false,"start_time":"2024-02-20T11:07:48.018386","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"identify fogs","metadata":{"papermill":{"duration":0.024275,"end_time":"2024-02-20T11:07:49.519189","exception":false,"start_time":"2024-02-20T11:07:49.494914","status":"completed"},"tags":[]}},{"cell_type":"code","source":"x = defog[['AccV','AccML','AccAP']]\ny = defog['IsFOG']","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:07:49.569635Z","iopub.status.busy":"2024-02-20T11:07:49.568943Z","iopub.status.idle":"2024-02-20T11:07:49.684572Z","shell.execute_reply":"2024-02-20T11:07:49.683042Z"},"papermill":{"duration":0.143392,"end_time":"2024-02-20T11:07:49.687776","exception":false,"start_time":"2024-02-20T11:07:49.544384","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y = defog['IsFOG']","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:07:49.738149Z","iopub.status.busy":"2024-02-20T11:07:49.737513Z","iopub.status.idle":"2024-02-20T11:07:49.742586Z","shell.execute_reply":"2024-02-20T11:07:49.741646Z"},"papermill":{"duration":0.033705,"end_time":"2024-02-20T11:07:49.745493","exception":false,"start_time":"2024-02-20T11:07:49.711788","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train, X_test, Y_train, Y_test_defog = train_test_split(x, y, test_size = 0.1, random_state = 1 )","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:07:49.795139Z","iopub.status.busy":"2024-02-20T11:07:49.794510Z","iopub.status.idle":"2024-02-20T11:07:52.161044Z","shell.execute_reply":"2024-02-20T11:07:52.159674Z"},"papermill":{"duration":2.39519,"end_time":"2024-02-20T11:07:52.164137","exception":false,"start_time":"2024-02-20T11:07:49.768947","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Create LightGBM Datasets for training and validation \nx_train, x_val, y_train, y_val = train_test_split(X_train, Y_train, test_size = 0.1, random_state = 2 )\n\ntrain_data = lgb.Dataset(x_train, label=y_train) \ntest_data = lgb.Dataset(x_val, label=y_val, reference=train_data)  \n\n# Define hyperparameters and objective for LightGBM \nfog_params={\n    'objective': 'binary', #binary target feature\n    'metric': 'auc', \n    'boosting_type': 'gbdt',  #GradientBoostingDecisionTree\n    'learning_rate': 0.03,  \n    'verbose': 1,\n    'max_depth': 6,\n    'num_leaves': 50\n}","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:07:52.218090Z","iopub.status.busy":"2024-02-20T11:07:52.217035Z","iopub.status.idle":"2024-02-20T11:07:54.255499Z","shell.execute_reply":"2024-02-20T11:07:54.253927Z"},"papermill":{"duration":2.068357,"end_time":"2024-02-20T11:07:54.259088","exception":false,"start_time":"2024-02-20T11:07:52.190731","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Training a LightGBM Model \nnum_round = 200\n\n\n# Train a LightGBM model using defined parameters, training data, and specified number of rounds \nfog_model = lgb.train(fog_params, train_data, \n                  num_round, valid_sets=[test_data]) ","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:07:54.308714Z","iopub.status.busy":"2024-02-20T11:07:54.307864Z","iopub.status.idle":"2024-02-20T11:10:00.364800Z","shell.execute_reply":"2024-02-20T11:10:00.363607Z"},"papermill":{"duration":126.086105,"end_time":"2024-02-20T11:10:00.368179","exception":false,"start_time":"2024-02-20T11:07:54.282074","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y_train_pred_defog = fog_model.predict(x_train)\ny_val_pred_defog = fog_model.predict(x_val)\ny_test_pred_defog = fog_model.predict(X_test)","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:10:00.421085Z","iopub.status.busy":"2024-02-20T11:10:00.420105Z","iopub.status.idle":"2024-02-20T11:10:48.206872Z","shell.execute_reply":"2024-02-20T11:10:48.205219Z"},"papermill":{"duration":47.816099,"end_time":"2024-02-20T11:10:48.209948","exception":false,"start_time":"2024-02-20T11:10:00.393849","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Calculate and print the ROC-AUC scores\nprint(\"Training ROC-AUC: \", ras(y_train, y_train_pred_defog))\nprint(\"Validation ROC-AUC: \", ras(y_val, y_val_pred_defog)) \nprint(\"Test ROC-AUC: \", ras(Y_test_defog, y_test_pred_defog)) ","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:10:48.260121Z","iopub.status.busy":"2024-02-20T11:10:48.259623Z","iopub.status.idle":"2024-02-20T11:10:54.570274Z","shell.execute_reply":"2024-02-20T11:10:54.568762Z"},"papermill":{"duration":6.33944,"end_time":"2024-02-20T11:10:54.573258","exception":false,"start_time":"2024-02-20T11:10:48.233818","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"secondary model ","metadata":{"papermill":{"duration":0.031337,"end_time":"2024-02-20T11:10:54.630058","exception":false,"start_time":"2024-02-20T11:10:54.598721","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# Adding additional features for each axis:\n# - rolling mean\n# - rolling standard deviation\n# - rolling maximum\n# - rolling minimum\n\nwindow_size = 200  # 2 seconds window for 100Hz sampling rate\n\n# Calculating rolling window features for each acceleration axis\nfor axis in ['AccV', 'AccML', 'AccAP']:\n    defog[f'{axis}_rolling_mean'] = defog[axis].rolling(window=window_size, min_periods=1).mean()\n    defog[f'{axis}_rolling_std'] = defog[axis].rolling(window=window_size, min_periods=1).std()\n    defog[f'{axis}_rolling_max'] = defog[axis].rolling(window=window_size, min_periods=1).max()\n    defog[f'{axis}_rolling_min'] = defog[axis].rolling(window=window_size, min_periods=1).min()\n\n# Drop rows that have NaN values which might be introduced by rolling window calculations\ndefog.dropna(inplace=True)\n\n","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:10:54.687858Z","iopub.status.busy":"2024-02-20T11:10:54.687338Z","iopub.status.idle":"2024-02-20T11:11:06.094627Z","shell.execute_reply":"2024-02-20T11:11:06.093323Z"},"papermill":{"duration":11.437802,"end_time":"2024-02-20T11:11:06.097928","exception":false,"start_time":"2024-02-20T11:10:54.660126","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"defog2 = defog[defog['IsFOG'] == True]\ndefog2","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:11:06.149670Z","iopub.status.busy":"2024-02-20T11:11:06.149266Z","iopub.status.idle":"2024-02-20T11:11:06.639057Z","shell.execute_reply":"2024-02-20T11:11:06.637727Z"},"papermill":{"duration":0.519301,"end_time":"2024-02-20T11:11:06.642705","exception":false,"start_time":"2024-02-20T11:11:06.123404","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Updating feature selection with rolling window features\nfeature_columns = ['AccV', 'AccML', 'AccAP', \n                   'AccV_rolling_mean', 'AccV_rolling_std', 'AccV_rolling_max', 'AccV_rolling_min',\n                   'AccML_rolling_mean', 'AccML_rolling_std', 'AccML_rolling_max', 'AccML_rolling_min',\n                   'AccAP_rolling_mean', 'AccAP_rolling_std', 'AccAP_rolling_max', 'AccAP_rolling_min']\n\nX = defog2[feature_columns]\n","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:11:06.792448Z","iopub.status.busy":"2024-02-20T11:11:06.792050Z","iopub.status.idle":"2024-02-20T11:11:06.851562Z","shell.execute_reply":"2024-02-20T11:11:06.850308Z"},"papermill":{"duration":0.187307,"end_time":"2024-02-20T11:11:06.854865","exception":false,"start_time":"2024-02-20T11:11:06.667558","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# targets\ny_StartHesitation = defog2['StartHesitation']\ny_Turn = defog2['Turn']\ny_Walking = defog2['Walking']","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:11:06.907886Z","iopub.status.busy":"2024-02-20T11:11:06.907510Z","iopub.status.idle":"2024-02-20T11:11:06.913653Z","shell.execute_reply":"2024-02-20T11:11:06.912216Z"},"papermill":{"duration":0.03636,"end_time":"2024-02-20T11:11:06.916607","exception":false,"start_time":"2024-02-20T11:11:06.880247","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def apply_smote(X, y):\n    smote = SMOTE(random_state=42)\n    X_smote, y_smote = smote.fit_resample(X, y)\n    return X_smote, y_smote","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:11:06.968276Z","iopub.status.busy":"2024-02-20T11:11:06.967910Z","iopub.status.idle":"2024-02-20T11:11:06.973663Z","shell.execute_reply":"2024-02-20T11:11:06.972386Z"},"papermill":{"duration":0.03436,"end_time":"2024-02-20T11:11:06.976100","exception":false,"start_time":"2024-02-20T11:11:06.941740","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Splitting the data into training and testing sets for each target variable\nX_train, X_test_defog, y_train_StartHesitation, y_test_StartHesitation = train_test_split(X, y_StartHesitation, test_size=0.2, random_state=42)\n_, _, y_train_Turn, y_test_Turn = train_test_split(X, y_Turn, test_size=0.2, random_state=42)\n_, _, y_train_Walking, y_test_Walking = train_test_split(X, y_Walking, test_size=0.2, random_state=42)","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:11:07.029093Z","iopub.status.busy":"2024-02-20T11:11:07.028688Z","iopub.status.idle":"2024-02-20T11:11:07.732182Z","shell.execute_reply":"2024-02-20T11:11:07.730949Z"},"papermill":{"duration":0.73427,"end_time":"2024-02-20T11:11:07.735158","exception":false,"start_time":"2024-02-20T11:11:07.000888","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# SMOTE to the training data for each target variable\nX_train_smote_StartHesitation, y_train_smote_StartHesitation = apply_smote(X_train, y_train_StartHesitation)\nX_train_smote_Turn, y_train_smote_Turn = apply_smote(X_train, y_train_Turn)\nX_train_smote_Walking, y_train_smote_Walking = apply_smote(X_train, y_train_Walking)\n","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:11:07.787712Z","iopub.status.busy":"2024-02-20T11:11:07.787309Z","iopub.status.idle":"2024-02-20T11:11:30.305244Z","shell.execute_reply":"2024-02-20T11:11:30.303970Z"},"papermill":{"duration":22.548199,"end_time":"2024-02-20T11:11:30.308376","exception":false,"start_time":"2024-02-20T11:11:07.760177","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Initialize and train the LightGBM model for each target variable\nlgbm_StartHesitation = LGBMClassifier(objective='binary', random_state=42)\nlgbm_StartHesitation.fit(X_train_smote_StartHesitation, y_train_smote_StartHesitation)","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:11:30.362058Z","iopub.status.busy":"2024-02-20T11:11:30.361652Z","iopub.status.idle":"2024-02-20T11:11:58.826480Z","shell.execute_reply":"2024-02-20T11:11:58.824824Z"},"papermill":{"duration":28.496577,"end_time":"2024-02-20T11:11:58.830312","exception":false,"start_time":"2024-02-20T11:11:30.333735","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"lgbm_Turn = LGBMClassifier(objective='binary', random_state=42)\nlgbm_Turn.fit(X_train_smote_Turn, y_train_smote_Turn)","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:11:58.885474Z","iopub.status.busy":"2024-02-20T11:11:58.884848Z","iopub.status.idle":"2024-02-20T11:12:23.575914Z","shell.execute_reply":"2024-02-20T11:12:23.574326Z"},"papermill":{"duration":24.723094,"end_time":"2024-02-20T11:12:23.579046","exception":false,"start_time":"2024-02-20T11:11:58.855952","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"lgbm_Walking = LGBMClassifier(objective='binary', random_state=42)\nlgbm_Walking.fit(X_train_smote_Walking, y_train_smote_Walking)","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:12:23.634386Z","iopub.status.busy":"2024-02-20T11:12:23.633665Z","iopub.status.idle":"2024-02-20T11:12:48.488467Z","shell.execute_reply":"2024-02-20T11:12:48.487172Z"},"papermill":{"duration":24.885112,"end_time":"2024-02-20T11:12:48.491110","exception":false,"start_time":"2024-02-20T11:12:23.605998","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Get probabilities for the positive class of each target\ny_pred_proba_StartHesitation_defog = lgbm_StartHesitation.predict_proba(X_test_defog)[:, 1]  \ny_pred_proba_Turn_defog = lgbm_Turn.predict_proba(X_test_defog)[:, 1]  \ny_pred_proba_Walking_defog = lgbm_Walking.predict_proba(X_test_defog)[:, 1]  ","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:12:48.548054Z","iopub.status.busy":"2024-02-20T11:12:48.547396Z","iopub.status.idle":"2024-02-20T11:12:51.019529Z","shell.execute_reply":"2024-02-20T11:12:51.018527Z"},"papermill":{"duration":2.503337,"end_time":"2024-02-20T11:12:51.023158","exception":false,"start_time":"2024-02-20T11:12:48.519821","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Evaluate using ROC AUC for each target variable\nroc_auc_StartHesitation = roc_auc_score(y_test_StartHesitation, y_pred_proba_StartHesitation_defog)\nroc_auc_Turn = roc_auc_score(y_test_Turn, y_pred_proba_Turn_defog)\nroc_auc_Walking = roc_auc_score(y_test_Walking, y_pred_proba_Walking_defog)","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:12:51.080071Z","iopub.status.busy":"2024-02-20T11:12:51.079426Z","iopub.status.idle":"2024-02-20T11:12:51.226018Z","shell.execute_reply":"2024-02-20T11:12:51.224953Z"},"papermill":{"duration":0.178437,"end_time":"2024-02-20T11:12:51.228875","exception":false,"start_time":"2024-02-20T11:12:51.050438","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"print(roc_auc_StartHesitation)\nprint(roc_auc_Turn)\nprint(roc_auc_Walking)","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:12:51.306417Z","iopub.status.busy":"2024-02-20T11:12:51.305548Z","iopub.status.idle":"2024-02-20T11:12:51.311793Z","shell.execute_reply":"2024-02-20T11:12:51.310785Z"},"papermill":{"duration":0.04749,"end_time":"2024-02-20T11:12:51.315174","exception":false,"start_time":"2024-02-20T11:12:51.267684","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"TDCS MODEL ","metadata":{"papermill":{"duration":0.028927,"end_time":"2024-02-20T11:12:51.373079","exception":false,"start_time":"2024-02-20T11:12:51.344152","status":"completed"},"tags":[]}},{"cell_type":"code","source":"# separate lgbm, will merge later \n\nDATA_ROOT_TDCSFOG = '/kaggle/input/tlvmc-parkinsons-freezing-gait-prediction/train/tdcsfog/'\ntdcsfog = pd.DataFrame()\nfor root, dirs, files in os.walk(DATA_ROOT_TDCSFOG):\n    for name in files:       \n        f = os.path.join(root, name)\n        df_list= pd.read_csv(f)\n        words = name.split('.')[0]\n        df_list['file']= name.split('.')[0]\n        tdcsfog = pd.concat([tdcsfog, df_list], axis=0)\n        \nkeys = np.arange(len(tdcsfog))\ntdcsfog = tdcsfog.set_index(keys, drop=True, append=False, inplace=False, verify_integrity=True)\ntdcsfog","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:12:51.431352Z","iopub.status.busy":"2024-02-20T11:12:51.430579Z","iopub.status.idle":"2024-02-20T11:15:18.235823Z","shell.execute_reply":"2024-02-20T11:15:18.233907Z"},"papermill":{"duration":146.860587,"end_time":"2024-02-20T11:15:18.260986","exception":false,"start_time":"2024-02-20T11:12:51.400399","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"tdcsfog['IsFOG'] = tdcsfog[['StartHesitation', 'Walking','Turn']].any(axis='columns')\nprint('\\n', tdcsfog[['Time','StartHesitation', 'Walking','Turn', 'IsFOG']][1047890:1071070])\n# making sure there are no missing values:\nprint(len(tdcsfog['IsFOG'][tdcsfog['IsFOG']==0])+len(tdcsfog['IsFOG'][tdcsfog['IsFOG']==1]))\n\n# defining the beginings of each file/subj (defog has 91 files):\nsubj_start = (tdcsfog['Time'][tdcsfog['Time']==0])\nsubj_start_ind = np.array(subj_start.index)\nprint(len(subj_start_ind))\n# defining the ends of each file/subj (doesn't include the last one):\nsubj_end_ind = subj_start_ind[1:] - 1\nprint(len(subj_end_ind))\n\nprint('FOG event at head of subject number: ', np.where(tdcsfog['IsFOG'][subj_start_ind]==1))\n\nprint('FOG event at tail of subject number: ',np.where(tdcsfog['IsFOG'][subj_end_ind]==1))","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:15:18.317142Z","iopub.status.busy":"2024-02-20T11:15:18.316717Z","iopub.status.idle":"2024-02-20T11:15:19.179388Z","shell.execute_reply":"2024-02-20T11:15:19.177647Z"},"papermill":{"duration":0.894195,"end_time":"2024-02-20T11:15:19.182461","exception":false,"start_time":"2024-02-20T11:15:18.288266","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"x = tdcsfog[['AccV','AccML','AccAP']]\ny = tdcsfog['IsFOG']","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:15:19.241699Z","iopub.status.busy":"2024-02-20T11:15:19.241273Z","iopub.status.idle":"2024-02-20T11:15:19.308063Z","shell.execute_reply":"2024-02-20T11:15:19.306644Z"},"papermill":{"duration":0.101409,"end_time":"2024-02-20T11:15:19.311141","exception":false,"start_time":"2024-02-20T11:15:19.209732","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"X_train, X_test, Y_train, Y_test_tdcs = train_test_split(x, y, test_size = 0.1, random_state = 1 )","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:15:19.367802Z","iopub.status.busy":"2024-02-20T11:15:19.367382Z","iopub.status.idle":"2024-02-20T11:15:20.542168Z","shell.execute_reply":"2024-02-20T11:15:20.540810Z"},"papermill":{"duration":1.206923,"end_time":"2024-02-20T11:15:20.545434","exception":false,"start_time":"2024-02-20T11:15:19.338511","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Create LightGBM Datasets for training and validation \nx_train, x_val, y_train, y_val = train_test_split(X_train, Y_train, test_size = 0.1, random_state = 2 )\n\ntrain_data = lgb.Dataset(x_train, label=y_train) \ntest_data = lgb.Dataset(x_val, label=y_val, reference=train_data)  \n\n# Define hyperparameters and objective for LightGBM \nfog_params={\n    'objective': 'binary', #binary target feature\n    'metric': 'auc', \n    'boosting_type': 'gbdt',  #GradientBoostingDecisionTree\n    'learning_rate': 0.03,  \n    'verbose': 1,\n    'max_depth': 6,\n    'num_leaves': 50\n}\n","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:15:20.605945Z","iopub.status.busy":"2024-02-20T11:15:20.605564Z","iopub.status.idle":"2024-02-20T11:15:21.689839Z","shell.execute_reply":"2024-02-20T11:15:21.688223Z"},"papermill":{"duration":1.120418,"end_time":"2024-02-20T11:15:21.693336","exception":false,"start_time":"2024-02-20T11:15:20.572918","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Training a LightGBM Model \nnum_round = 200\n\n\n# Train a LightGBM model using defined parameters, training data, and specified number of rounds \ntdcsfog_model = lgb.train(fog_params, train_data, \n                  num_round, valid_sets=[test_data]) ","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:15:21.757387Z","iopub.status.busy":"2024-02-20T11:15:21.756970Z","iopub.status.idle":"2024-02-20T11:16:28.197974Z","shell.execute_reply":"2024-02-20T11:16:28.196246Z"},"papermill":{"duration":66.475317,"end_time":"2024-02-20T11:16:28.201546","exception":false,"start_time":"2024-02-20T11:15:21.726229","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"y_train_pred_tdcs = tdcsfog_model.predict(x_train)\ny_val_pred_tdcs = tdcsfog_model.predict(x_val)\ny_test_pred_tdcs = tdcsfog_model.predict(X_test)","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:16:28.261948Z","iopub.status.busy":"2024-02-20T11:16:28.261474Z","iopub.status.idle":"2024-02-20T11:16:57.063023Z","shell.execute_reply":"2024-02-20T11:16:57.061852Z"},"papermill":{"duration":28.834861,"end_time":"2024-02-20T11:16:57.066052","exception":false,"start_time":"2024-02-20T11:16:28.231191","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\nprint(\"Training ROC-AUC: \", ras(y_train, y_train_pred_tdcs))\nprint(\"Validation ROC-AUC: \", ras(y_val, y_val_pred_tdcs)) \nprint(\"Test ROC-AUC: \", ras(Y_test_tdcs,y_test_pred_tdcs)) ","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:16:57.127330Z","iopub.status.busy":"2024-02-20T11:16:57.126409Z","iopub.status.idle":"2024-02-20T11:17:00.539270Z","shell.execute_reply":"2024-02-20T11:17:00.538245Z"},"papermill":{"duration":3.445464,"end_time":"2024-02-20T11:17:00.541934","exception":false,"start_time":"2024-02-20T11:16:57.096470","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"second model tdcs","metadata":{"papermill":{"duration":0.027971,"end_time":"2024-02-20T11:17:00.598426","exception":false,"start_time":"2024-02-20T11:17:00.570455","status":"completed"},"tags":[]}},{"cell_type":"code","source":"window_size = 200  # 2 seconds window for 100Hz sampling rate\n\n# Calculating rolling window features for each acceleration axis\nfor axis in ['AccV', 'AccML', 'AccAP']:\n    tdcsfog[f'{axis}_rolling_mean'] = tdcsfog[axis].rolling(window=window_size, min_periods=1).mean()\n    tdcsfog[f'{axis}_rolling_std'] = tdcsfog[axis].rolling(window=window_size, min_periods=1).std()\n    tdcsfog[f'{axis}_rolling_max'] = tdcsfog[axis].rolling(window=window_size, min_periods=1).max()\n    tdcsfog[f'{axis}_rolling_min'] = tdcsfog[axis].rolling(window=window_size, min_periods=1).min()\n\n# Drop rows that have NaN values which might be introduced by rolling window calculations\ntdcsfog.dropna(inplace=True)\n","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:17:00.657552Z","iopub.status.busy":"2024-02-20T11:17:00.656628Z","iopub.status.idle":"2024-02-20T11:17:06.610879Z","shell.execute_reply":"2024-02-20T11:17:06.609769Z"},"papermill":{"duration":5.986485,"end_time":"2024-02-20T11:17:06.613811","exception":false,"start_time":"2024-02-20T11:17:00.627326","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"tdcsfog2 = tdcsfog[tdcsfog['IsFOG'] == True]","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:17:06.673111Z","iopub.status.busy":"2024-02-20T11:17:06.672422Z","iopub.status.idle":"2024-02-20T11:17:06.976788Z","shell.execute_reply":"2024-02-20T11:17:06.975736Z"},"papermill":{"duration":0.338021,"end_time":"2024-02-20T11:17:06.979703","exception":false,"start_time":"2024-02-20T11:17:06.641682","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Updating feature selection with rolling window features\nfeature_columns = ['AccV', 'AccML', 'AccAP', \n                   'AccV_rolling_mean', 'AccV_rolling_std', 'AccV_rolling_max', 'AccV_rolling_min',\n                   'AccML_rolling_mean', 'AccML_rolling_std', 'AccML_rolling_max', 'AccML_rolling_min',\n                   'AccAP_rolling_mean', 'AccAP_rolling_std', 'AccAP_rolling_max', 'AccAP_rolling_min']\n\nX = tdcsfog2[feature_columns]\n\n# targets\ny_StartHesitation = tdcsfog2['StartHesitation']\ny_Turn = tdcsfog2['Turn']\ny_Walking = tdcsfog2['Walking']","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:17:07.044061Z","iopub.status.busy":"2024-02-20T11:17:07.043341Z","iopub.status.idle":"2024-02-20T11:17:07.202908Z","shell.execute_reply":"2024-02-20T11:17:07.201758Z"},"papermill":{"duration":0.19293,"end_time":"2024-02-20T11:17:07.205986","exception":false,"start_time":"2024-02-20T11:17:07.013056","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def apply_smote(X, y):\n    smote = SMOTE(random_state=42)\n    X_smote, y_smote = smote.fit_resample(X, y)\n    return X_smote, y_smote","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:17:07.267497Z","iopub.status.busy":"2024-02-20T11:17:07.266786Z","iopub.status.idle":"2024-02-20T11:17:07.271811Z","shell.execute_reply":"2024-02-20T11:17:07.270846Z"},"papermill":{"duration":0.037723,"end_time":"2024-02-20T11:17:07.274378","exception":false,"start_time":"2024-02-20T11:17:07.236655","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Splitting the data into training and testing sets for each target variable\nX_train, X_test_tdcs, y_train_StartHesitation, y_test_StartHesitation = train_test_split(X, y_StartHesitation, test_size=0.2, random_state=42)\n_, _, y_train_Turn, y_test_Turn = train_test_split(X, y_Turn, test_size=0.2, random_state=42)\n_, _, y_train_Walking, y_test_Walking = train_test_split(X, y_Walking, test_size=0.2, random_state=42)","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:17:07.333518Z","iopub.status.busy":"2024-02-20T11:17:07.332525Z","iopub.status.idle":"2024-02-20T11:17:09.858585Z","shell.execute_reply":"2024-02-20T11:17:09.857599Z"},"papermill":{"duration":2.558972,"end_time":"2024-02-20T11:17:09.861626","exception":false,"start_time":"2024-02-20T11:17:07.302654","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# SMOTE to the training data for each target variable\nX_train_smote_StartHesitation, y_train_smote_StartHesitation = apply_smote(X_train, y_train_StartHesitation)\nX_train_smote_Turn, y_train_smote_Turn = apply_smote(X_train, y_train_Turn)\nX_train_smote_Walking, y_train_smote_Walking = apply_smote(X_train, y_train_Walking)","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:17:09.920191Z","iopub.status.busy":"2024-02-20T11:17:09.919521Z","iopub.status.idle":"2024-02-20T11:21:09.263996Z","shell.execute_reply":"2024-02-20T11:21:09.262158Z"},"papermill":{"duration":239.37741,"end_time":"2024-02-20T11:21:09.267538","exception":false,"start_time":"2024-02-20T11:17:09.890128","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"lgbm_Turn = LGBMClassifier(objective='binary', random_state=42)\nlgbm_Turn.fit(X_train_smote_Turn, y_train_smote_Turn)","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:21:09.331332Z","iopub.status.busy":"2024-02-20T11:21:09.330862Z","iopub.status.idle":"2024-02-20T11:22:13.626434Z","shell.execute_reply":"2024-02-20T11:22:13.624802Z"},"papermill":{"duration":64.355171,"end_time":"2024-02-20T11:22:13.654350","exception":false,"start_time":"2024-02-20T11:21:09.299179","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"lgbm_Walking = LGBMClassifier(objective='binary', random_state=42)\nlgbm_Walking.fit(X_train_smote_Walking, y_train_smote_Walking)","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:22:13.714877Z","iopub.status.busy":"2024-02-20T11:22:13.714449Z","iopub.status.idle":"2024-02-20T11:23:30.413068Z","shell.execute_reply":"2024-02-20T11:23:30.411686Z"},"papermill":{"duration":76.762805,"end_time":"2024-02-20T11:23:30.445661","exception":false,"start_time":"2024-02-20T11:22:13.682856","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Get probabilities for the positive class of each target\ny_pred_proba_StartHesitation_tdcs = lgbm_StartHesitation.predict_proba(X_test_tdcs)[:, 1]  \ny_pred_proba_Turn_tdcs = lgbm_Turn.predict_proba(X_test_tdcs)[:, 1]  \ny_pred_proba_Walking_tdcs = lgbm_Walking.predict_proba(X_test_tdcs)[:, 1]  ","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:23:30.507103Z","iopub.status.busy":"2024-02-20T11:23:30.506710Z","iopub.status.idle":"2024-02-20T11:23:37.380593Z","shell.execute_reply":"2024-02-20T11:23:37.379137Z"},"papermill":{"duration":6.908717,"end_time":"2024-02-20T11:23:37.383753","exception":false,"start_time":"2024-02-20T11:23:30.475036","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"'''# Evaluate using ROC AUC for each target variable\nroc_auc_StartHesitation = roc_auc_score(y_test_StartHesitation, y_pred_proba_StartHesitation_defog)\nroc_auc_Turn = roc_auc_score(y_test_Turn, y_pred_proba_Turn_defog)\nroc_auc_Walking = roc_auc_score(y_test_Walking, y_pred_proba_Walking_defog)'''","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:23:37.444451Z","iopub.status.busy":"2024-02-20T11:23:37.444031Z","iopub.status.idle":"2024-02-20T11:23:37.452155Z","shell.execute_reply":"2024-02-20T11:23:37.450848Z"},"papermill":{"duration":0.041855,"end_time":"2024-02-20T11:23:37.454992","exception":false,"start_time":"2024-02-20T11:23:37.413137","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Calculate and print the ROC-AUC scores\nprint(\"Training ROC-AUC: \", ras(y_train, y_train_pred_tdcs))\nprint(\"Validation ROC-AUC: \", ras(y_val, y_val_pred_tdcs)) \nprint(\"Test ROC-AUC: \", ras(Y_test_tdcs,y_test_pred_tdcs)) ","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:23:37.518682Z","iopub.status.busy":"2024-02-20T11:23:37.518303Z","iopub.status.idle":"2024-02-20T11:23:40.869702Z","shell.execute_reply":"2024-02-20T11:23:40.868314Z"},"papermill":{"duration":3.387653,"end_time":"2024-02-20T11:23:40.872508","exception":false,"start_time":"2024-02-20T11:23:37.484855","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"submission ","metadata":{"papermill":{"duration":0.03225,"end_time":"2024-02-20T11:23:41.145085","exception":false,"start_time":"2024-02-20T11:23:41.112835","status":"completed"},"tags":[]}},{"cell_type":"code","source":"TEST_ROOT_DEFOG = '/kaggle/input/tlvmc-parkinsons-freezing-gait-prediction/test/defog/'\ntest_defog = pd.DataFrame()\nfor root, dirs, files in os.walk(TEST_ROOT_DEFOG):\n    for name in files:       \n        f = os.path.join(root, name)\n        df_list= pd.read_csv(f)\n        words = name.split('.')[0]\n        df_list['file']= name.split('.')[0]\n        test_defog = pd.concat([test_defog, df_list], axis=0)\n        \nkeys = np.arange(len(test_defog))\ntest_defog = test_defog.set_index(keys, drop=True, append=False, inplace=False, verify_integrity=True)\ntest_defog","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:23:41.213246Z","iopub.status.busy":"2024-02-20T11:23:41.212711Z","iopub.status.idle":"2024-02-20T11:23:41.705971Z","shell.execute_reply":"2024-02-20T11:23:41.704626Z"},"papermill":{"duration":0.530433,"end_time":"2024-02-20T11:23:41.708913","exception":false,"start_time":"2024-02-20T11:23:41.178480","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_defog['Id'] = test_defog['file'] + '_' + test_defog['Time'].astype('str')\ntest_defog = test_defog.drop(['file'], axis = 1)\ntest_defog","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:23:41.770699Z","iopub.status.busy":"2024-02-20T11:23:41.770157Z","iopub.status.idle":"2024-02-20T11:23:42.055143Z","shell.execute_reply":"2024-02-20T11:23:42.053850Z"},"papermill":{"duration":0.31926,"end_time":"2024-02-20T11:23:42.057616","exception":false,"start_time":"2024-02-20T11:23:41.738356","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_defog_df = test_defog.drop(['Time','Id'], axis = 1)\ntest_defog_df","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:23:42.121032Z","iopub.status.busy":"2024-02-20T11:23:42.120606Z","iopub.status.idle":"2024-02-20T11:23:42.136208Z","shell.execute_reply":"2024-02-20T11:23:42.135091Z"},"papermill":{"duration":0.050857,"end_time":"2024-02-20T11:23:42.138948","exception":false,"start_time":"2024-02-20T11:23:42.088091","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#add pred column \ndefog_pred_fog = fog_model.predict(test_defog_df)\ntest_defog['FogProb'] = defog_pred_fog\ntest_defog","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:23:42.204036Z","iopub.status.busy":"2024-02-20T11:23:42.203612Z","iopub.status.idle":"2024-02-20T11:23:42.989663Z","shell.execute_reply":"2024-02-20T11:23:42.988396Z"},"papermill":{"duration":0.82169,"end_time":"2024-02-20T11:23:42.992204","exception":false,"start_time":"2024-02-20T11:23:42.170514","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\n\nwindow_size = 200  # 2 seconds window for 100Hz sampling rate\n\n# Calculating rolling window features for each acceleration axis\nfor axis in ['AccV', 'AccML', 'AccAP']:\n    test_defog[f'{axis}_rolling_mean'] = test_defog[axis].rolling(window=window_size, min_periods=1).mean()\n    test_defog[f'{axis}_rolling_std'] = test_defog[axis].rolling(window=window_size, min_periods=1).std()\n    test_defog[f'{axis}_rolling_max'] = test_defog[axis].rolling(window=window_size, min_periods=1).max()\n    test_defog[f'{axis}_rolling_min'] = test_defog[axis].rolling(window=window_size, min_periods=1).min()","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:23:43.061368Z","iopub.status.busy":"2024-02-20T11:23:43.060333Z","iopub.status.idle":"2024-02-20T11:23:43.191507Z","shell.execute_reply":"2024-02-20T11:23:43.189854Z"},"papermill":{"duration":0.168165,"end_time":"2024-02-20T11:23:43.194390","exception":false,"start_time":"2024-02-20T11:23:43.026225","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Updating feature selection with rolling window features\nfeature_columns = ['AccV', 'AccML', 'AccAP', \n                   'AccV_rolling_mean', 'AccV_rolling_std', 'AccV_rolling_max', 'AccV_rolling_min',\n                   'AccML_rolling_mean', 'AccML_rolling_std', 'AccML_rolling_max', 'AccML_rolling_min',\n                   'AccAP_rolling_mean', 'AccAP_rolling_std', 'AccAP_rolling_max', 'AccAP_rolling_min']\n\nX = test_defog[feature_columns]","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:23:43.260581Z","iopub.status.busy":"2024-02-20T11:23:43.260157Z","iopub.status.idle":"2024-02-20T11:23:43.281928Z","shell.execute_reply":"2024-02-20T11:23:43.280664Z"},"papermill":{"duration":0.057906,"end_time":"2024-02-20T11:23:43.284822","exception":false,"start_time":"2024-02-20T11:23:43.226916","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_defog_SH_pred =lgbm_StartHesitation.predict(X)\ntest_defog_T_pred = lgbm_Turn.predict(X)\ntest_defog_W_pred = lgbm_Walking.predict(X)\n\n","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:23:43.412573Z","iopub.status.busy":"2024-02-20T11:23:43.411880Z","iopub.status.idle":"2024-02-20T11:23:45.899880Z","shell.execute_reply":"2024-02-20T11:23:45.898749Z"},"papermill":{"duration":2.522199,"end_time":"2024-02-20T11:23:45.902590","exception":false,"start_time":"2024-02-20T11:23:43.380391","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_defog['StartHesitation'] = np.sqrt(test_defog_SH_pred * defog_pred_fog)\ntest_defog['Turn'] = np.sqrt(test_defog_T_pred * defog_pred_fog)\ntest_defog['Walking'] = np.sqrt(test_defog_W_pred * defog_pred_fog)","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:23:45.968573Z","iopub.status.busy":"2024-02-20T11:23:45.967891Z","iopub.status.idle":"2024-02-20T11:23:45.980106Z","shell.execute_reply":"2024-02-20T11:23:45.979222Z"},"papermill":{"duration":0.047138,"end_time":"2024-02-20T11:23:45.983337","exception":false,"start_time":"2024-02-20T11:23:45.936199","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"subm = test_defog[['Id','StartHesitation','Turn','Walking']]","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:23:46.052967Z","iopub.status.busy":"2024-02-20T11:23:46.052329Z","iopub.status.idle":"2024-02-20T11:23:46.066017Z","shell.execute_reply":"2024-02-20T11:23:46.065009Z"},"papermill":{"duration":0.050061,"end_time":"2024-02-20T11:23:46.068891","exception":false,"start_time":"2024-02-20T11:23:46.018830","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"TEST_ROOT_TDCS= '/kaggle/input/tlvmc-parkinsons-freezing-gait-prediction/test/tdcsfog/'\ntest_tdcs = pd.DataFrame()\nfor root, dirs, files in os.walk(TEST_ROOT_TDCS):\n    for name in files:       \n        f = os.path.join(root, name)\n        df_list= pd.read_csv(f)\n        words = name.split('.')[0]\n        df_list['file']= name.split('.')[0]\n        test_tdcs = pd.concat([test_tdcs, df_list], axis=0)\n        \nkeys = np.arange(len(test_tdcs))\ntest_tdcs = test_tdcs.set_index(keys, drop=True, append=False, inplace=False, verify_integrity=True)\ntest_tdcs","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:23:46.135552Z","iopub.status.busy":"2024-02-20T11:23:46.134844Z","iopub.status.idle":"2024-02-20T11:23:46.177404Z","shell.execute_reply":"2024-02-20T11:23:46.176405Z"},"papermill":{"duration":0.079104,"end_time":"2024-02-20T11:23:46.179994","exception":false,"start_time":"2024-02-20T11:23:46.100890","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_tdcs['Id'] = test_tdcs['file'] + '_' + test_tdcs['Time'].astype('str')\ntest_tdcs = test_tdcs.drop(['file'], axis = 1)\ntest_tdcs","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:23:46.245732Z","iopub.status.busy":"2024-02-20T11:23:46.244861Z","iopub.status.idle":"2024-02-20T11:23:46.267259Z","shell.execute_reply":"2024-02-20T11:23:46.266324Z"},"papermill":{"duration":0.0589,"end_time":"2024-02-20T11:23:46.269596","exception":false,"start_time":"2024-02-20T11:23:46.210696","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_tdcs_df = test_tdcs.drop(['Time','Id'], axis = 1)\ntest_tdcs_df","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:23:46.335708Z","iopub.status.busy":"2024-02-20T11:23:46.334777Z","iopub.status.idle":"2024-02-20T11:23:46.350650Z","shell.execute_reply":"2024-02-20T11:23:46.349182Z"},"papermill":{"duration":0.052278,"end_time":"2024-02-20T11:23:46.353346","exception":false,"start_time":"2024-02-20T11:23:46.301068","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# using separate tdcs\ntdcs_pred_fog = tdcsfog_model.predict(test_tdcs_df)","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:23:46.423819Z","iopub.status.busy":"2024-02-20T11:23:46.422917Z","iopub.status.idle":"2024-02-20T11:23:46.446779Z","shell.execute_reply":"2024-02-20T11:23:46.445626Z"},"papermill":{"duration":0.061693,"end_time":"2024-02-20T11:23:46.449568","exception":false,"start_time":"2024-02-20T11:23:46.387875","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_tdcs['FogProb'] = tdcs_pred_fog\ntest_tdcs","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:23:46.516600Z","iopub.status.busy":"2024-02-20T11:23:46.515718Z","iopub.status.idle":"2024-02-20T11:23:46.533991Z","shell.execute_reply":"2024-02-20T11:23:46.532412Z"},"papermill":{"duration":0.055416,"end_time":"2024-02-20T11:23:46.537063","exception":false,"start_time":"2024-02-20T11:23:46.481647","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"window_size = 200  # 2 seconds window for 100Hz sampling rate\n\n# Calculating rolling window features for each acceleration axis\nfor axis in ['AccV', 'AccML', 'AccAP']:\n    test_tdcs[f'{axis}_rolling_mean'] = test_tdcs[axis].rolling(window=window_size, min_periods=1).mean()\n    test_tdcs[f'{axis}_rolling_std'] = test_tdcs[axis].rolling(window=window_size, min_periods=1).std()\n    test_tdcs[f'{axis}_rolling_max'] = test_tdcs[axis].rolling(window=window_size, min_periods=1).max()\n    test_tdcs[f'{axis}_rolling_min'] = test_tdcs[axis].rolling(window=window_size, min_periods=1).min()\ntest_tdcs","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:23:46.610058Z","iopub.status.busy":"2024-02-20T11:23:46.608971Z","iopub.status.idle":"2024-02-20T11:23:46.651942Z","shell.execute_reply":"2024-02-20T11:23:46.650472Z"},"papermill":{"duration":0.082081,"end_time":"2024-02-20T11:23:46.655194","exception":false,"start_time":"2024-02-20T11:23:46.573113","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# Updating feature selection with rolling window features\nfeature_columns = ['AccV', 'AccML', 'AccAP', \n                   'AccV_rolling_mean', 'AccV_rolling_std', 'AccV_rolling_max', 'AccV_rolling_min',\n                   'AccML_rolling_mean', 'AccML_rolling_std', 'AccML_rolling_max', 'AccML_rolling_min',\n                   'AccAP_rolling_mean', 'AccAP_rolling_std', 'AccAP_rolling_max', 'AccAP_rolling_min']\n\nX = test_tdcs[feature_columns]","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:23:46.725740Z","iopub.status.busy":"2024-02-20T11:23:46.724932Z","iopub.status.idle":"2024-02-20T11:23:46.732990Z","shell.execute_reply":"2024-02-20T11:23:46.731590Z"},"papermill":{"duration":0.047037,"end_time":"2024-02-20T11:23:46.735933","exception":false,"start_time":"2024-02-20T11:23:46.688896","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_tdcs_SH_pred = lgbm_StartHesitation.predict(X)\ntest_tdcs_T_pred = lgbm_Turn.predict(X)\ntest_tdcs_W_pred = lgbm_Walking.predict(X)","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:23:46.807213Z","iopub.status.busy":"2024-02-20T11:23:46.806360Z","iopub.status.idle":"2024-02-20T11:23:46.858080Z","shell.execute_reply":"2024-02-20T11:23:46.857040Z"},"papermill":{"duration":0.090552,"end_time":"2024-02-20T11:23:46.860728","exception":false,"start_time":"2024-02-20T11:23:46.770176","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"test_tdcs['StartHesitation'] = np.sqrt(test_tdcs_SH_pred * tdcs_pred_fog)\ntest_tdcs['Turn'] = np.sqrt(test_tdcs_T_pred * tdcs_pred_fog)\ntest_tdcs['Walking'] = np.sqrt(test_tdcs_W_pred * tdcs_pred_fog)","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:23:46.930209Z","iopub.status.busy":"2024-02-20T11:23:46.929472Z","iopub.status.idle":"2024-02-20T11:23:46.936868Z","shell.execute_reply":"2024-02-20T11:23:46.935930Z"},"papermill":{"duration":0.044816,"end_time":"2024-02-20T11:23:46.939361","exception":false,"start_time":"2024-02-20T11:23:46.894545","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"subm2 = test_tdcs[['Id','StartHesitation','Turn','Walking']]","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:23:47.009585Z","iopub.status.busy":"2024-02-20T11:23:47.008600Z","iopub.status.idle":"2024-02-20T11:23:47.015307Z","shell.execute_reply":"2024-02-20T11:23:47.014353Z"},"papermill":{"duration":0.04648,"end_time":"2024-02-20T11:23:47.017830","exception":false,"start_time":"2024-02-20T11:23:46.971350","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"subm2","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:23:47.086872Z","iopub.status.busy":"2024-02-20T11:23:47.086001Z","iopub.status.idle":"2024-02-20T11:23:47.101847Z","shell.execute_reply":"2024-02-20T11:23:47.100725Z"},"papermill":{"duration":0.053892,"end_time":"2024-02-20T11:23:47.104330","exception":false,"start_time":"2024-02-20T11:23:47.050438","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"subm_final = pd.concat([subm, subm2], ignore_index=True)","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:23:47.177230Z","iopub.status.busy":"2024-02-20T11:23:47.176505Z","iopub.status.idle":"2024-02-20T11:23:47.190224Z","shell.execute_reply":"2024-02-20T11:23:47.189069Z"},"papermill":{"duration":0.054903,"end_time":"2024-02-20T11:23:47.192979","exception":false,"start_time":"2024-02-20T11:23:47.138076","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"subm_final.to_csv(\"submission.csv\",index=False)","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:23:47.263715Z","iopub.status.busy":"2024-02-20T11:23:47.262897Z","iopub.status.idle":"2024-02-20T11:23:48.866600Z","shell.execute_reply":"2024-02-20T11:23:48.864822Z"},"papermill":{"duration":1.642845,"end_time":"2024-02-20T11:23:48.869684","exception":false,"start_time":"2024-02-20T11:23:47.226839","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"subm_final","metadata":{"execution":{"iopub.execute_input":"2024-02-20T11:23:48.940376Z","iopub.status.busy":"2024-02-20T11:23:48.939733Z","iopub.status.idle":"2024-02-20T11:23:48.955949Z","shell.execute_reply":"2024-02-20T11:23:48.954637Z"},"papermill":{"duration":0.055183,"end_time":"2024-02-20T11:23:48.958838","exception":false,"start_time":"2024-02-20T11:23:48.903655","status":"completed"},"tags":[]},"execution_count":null,"outputs":[]}]}