{"metadata":{"kernelspec":{"name":"python3","display_name":"Python 3","language":"python"},"language_info":{"name":"python","version":"3.10.12","mimetype":"text/x-python","codemirror_mode":{"name":"ipython","version":3},"pygments_lexer":"ipython3","nbconvert_exporter":"python","file_extension":".py"},"kaggle":{"accelerator":"gpu","dataSources":[{"sourceId":41765,"databundleVersionId":4531181,"sourceType":"competition"}],"dockerImageVersionId":30823,"isInternetEnabled":true,"language":"python","sourceType":"notebook","isGpuEnabled":true}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"markdown","source":"# Introduction\n## Overview\n classifing 60-second sequences of sensor data, indicating whether a subject was in either of two activity states for the duration of the sequence.\n\n##  Files descriptions\ntrain.csv - the training set, comprising ~26,000 60-second recordings of thirteen biological sensors for almost one thousand experimental participants\n\n* train_labels.csv - the class label for each sequence.\n* test.csv - the test set. For each of the ~12,000 sequences, you should predict a value for that sequence's state.\n* sample_submission.csv - a sample submission file in the correct format.\n\n## Fields\n\n1. sequence - a unique id for each sequence\n1. subject - a unique id for the subject in the experiment\n1. step - time step of the recording, in one second intervals\n1. sensor_00 - sensor_12 - the value for each of the thirteen sensors at that time step\n1. state - the state associated to each sequence. This is the target which you are trying to predict.","metadata":{"papermill":{"duration":0.056743,"end_time":"2022-04-05T14:46:33.726241","exception":false,"start_time":"2022-04-05T14:46:33.669498","status":"completed"},"tags":[]}},{"cell_type":"code","source":"###############################################################################\n#                       Load Library                                          #\n###############################################################################\n\n#Load the librarys\nimport pandas as pd #To work with dataset\nimport numpy as np #Math library\nimport matplotlib.gridspec as gridspec\nimport seaborn as sns #Graph library that use matplot in background\nimport matplotlib.pyplot as plt #to plot some parameters in seaborn\nimport warnings\n# Preparation  \nfrom sklearn.preprocessing import LabelEncoder, OrdinalEncoder\nfrom sklearn.preprocessing import OneHotEncoder\nfrom sklearn.preprocessing import PowerTransformer, StandardScaler,Normalizer,RobustScaler,MaxAbsScaler,MinMaxScaler,QuantileTransformer\nfrom sklearn.preprocessing import FunctionTransformer\nfrom sklearn.preprocessing import PolynomialFeatures\nfrom sklearn.neighbors import KNeighborsClassifier\nfrom sklearn.preprocessing import KBinsDiscretizer\n# Import StandardScaler from scikit-learn\nfrom sklearn.experimental import enable_iterative_imputer\nfrom sklearn.impute import SimpleImputer\nfrom sklearn.impute import KNNImputer,IterativeImputer\nfrom sklearn.feature_extraction.text import CountVectorizer\nfrom sklearn.compose import make_column_transformer,ColumnTransformer\nfrom sklearn.pipeline import make_pipeline, Pipeline,FeatureUnion\nfrom sklearn.manifold import TSNE\n# Import train_test_split()\n# Metrics\nfrom sklearn.metrics import roc_auc_score, average_precision_score,recall_score\nfrom sklearn.metrics import make_scorer,mean_absolute_error\nfrom sklearn.metrics import mean_squared_error,classification_report,f1_score\nfrom sklearn.metrics import roc_curve,confusion_matrix\nfrom datetime import datetime, date\nfrom sklearn.linear_model import ElasticNet, Lasso,  BayesianRidge, LassoLarsIC\nfrom sklearn.linear_model import LinearRegression, RidgeCV\nfrom sklearn.linear_model import LogisticRegression\n\nimport tensorflow as tf \nfrom tensorflow.keras import layers\nfrom tensorflow.keras.callbacks import EarlyStopping\nfrom tensorflow.keras.callbacks import LearningRateScheduler\nfrom tensorflow.keras.metrics import AUC\n#import smogn\nfrom sklearn.experimental import enable_hist_gradient_boosting\nfrom sklearn.base import BaseEstimator, TransformerMixin, RegressorMixin, clone,ClassifierMixin\nfrom sklearn.kernel_ridge import KernelRidge\nfrom sklearn.ensemble import GradientBoostingRegressor,RandomForestRegressor\nfrom sklearn.ensemble import RandomForestClassifier\nfrom sklearn.ensemble import HistGradientBoostingClassifier\n# For training random forest model\nimport lightgbm as lgb\nfrom scipy import sparse\nfrom sklearn.neighbors import KNeighborsRegressor \nfrom sklearn.decomposition import PCA\nfrom sklearn.cluster import KMeans\nfrom yellowbrick.cluster import KElbowVisualizer\n# Model selection\nfrom sklearn.model_selection import StratifiedKFold,GroupKFold, StratifiedGroupKFold  \nfrom sklearn.feature_selection import SelectKBest\nfrom sklearn.feature_selection import f_regression,f_classif,chi2\nfrom sklearn.feature_selection import mutual_info_regression\nfrom sklearn.feature_selection import SelectPercentile\nfrom sklearn.feature_selection import mutual_info_classif,VarianceThreshold\nfrom sklearn.model_selection import train_test_split\nfrom sklearn.model_selection import KFold\nfrom sklearn.model_selection import GridSearchCV\nfrom sklearn.model_selection import cross_val_score\nfrom lightgbm import LGBMClassifier\nimport lightgbm as lgbm\nfrom catboost import CatBoostRegressor, CatBoostClassifier\nfrom sklearn.naive_bayes import GaussianNB\nfrom sklearn import svm\nfrom xgboost import XGBClassifier,XGBRegressor\nfrom sklearn import set_config\nfrom itertools import combinations\n# Cluster :\nfrom sklearn.cluster import MiniBatchKMeans\n#from yellowbrick.cluster import KElbowVisualizer\n#import smong \nimport category_encoders as ce\nimport warnings\n#import optuna \nfrom joblib import Parallel, delayed\nimport joblib \nfrom sklearn import set_config\nfrom typing import List, Optional, Union\nimport itertools\nimport shap\n\n# Imbalanced data \nfrom imblearn.datasets import fetch_datasets\n# to correctly set up the cross-validation\nfrom imblearn.pipeline import make_pipeline\nfrom imblearn.under_sampling import (\n    RandomUnderSampler,\n    CondensedNearestNeighbour,\n    TomekLinks,\n    OneSidedSelection,\n    EditedNearestNeighbours,\n    RepeatedEditedNearestNeighbours,\n    AllKNN,\n    NeighbourhoodCleaningRule,\n    NearMiss,\n    InstanceHardnessThreshold\n)\nfrom imblearn.over_sampling import (\n    RandomOverSampler,\n    SMOTE,\n    ADASYN,\n    BorderlineSMOTE,\n    SVMSMOTE,\n)\nfrom tqdm import tqdm \nimport gc\nimport os\nimport shutil\nimport logging\nset_config(display='diagram')\nwarnings.filterwarnings('ignore')","metadata":{"_cell_guid":"b1076dfc-b9ad-4769-8c92-a6c4dae69d19","_kg_hide-input":true,"_kg_hide-output":true,"_uuid":"8f2839f25d086af736a60e9eeb907d3b93b6e0e5","execution":{"iopub.status.busy":"2024-12-18T22:22:43.001813Z","iopub.execute_input":"2024-12-18T22:22:43.002096Z","iopub.status.idle":"2024-12-18T22:22:43.013797Z","shell.execute_reply.started":"2024-12-18T22:22:43.002076Z","shell.execute_reply":"2024-12-18T22:22:43.01282Z"},"papermill":{"duration":13.282896,"end_time":"2022-04-05T14:46:47.173018","exception":false,"start_time":"2022-04-05T14:46:33.890122","status":"completed"},"tags":[],"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"<a id=\"top\"></a>\n<h3 class=\"list-group-item list-group-item-action active\" data-toggle=\"list\" style='color:white; background:#1777C4; border:0' role=\"tab\" aria-controls=\"home\"><center>Load Data</center></h3>\n\n## Load the training data","metadata":{"papermill":{"duration":0.102841,"end_time":"2022-04-05T14:46:47.376205","exception":false,"start_time":"2022-04-05T14:46:47.273364","status":"completed"},"tags":[]}},{"cell_type":"code","source":"%%time \n###############################################################################\n#                         Load data                                           #\n###############################################################################\nTRAIN_DATA_PATH = '../input/dl-for-tabular-playground-series-apr-2022/train.csv'\nTRAIN_LABELS_PATH = '../input/dl-for-tabular-playground-series-apr-2022/train_labels.csv'\nTEST_DATA_PATH = '../input/dl-for-tabular-playground-series-apr-2022/test.csv'\nINDEX = 'sequence'\nTARGET = 'state'\nSENSORS = ['sensor_{:02d}'.format(x) for x in range(0, 13)]","metadata":{"execution":{"iopub.status.busy":"2024-12-18T22:31:29.787259Z","iopub.execute_input":"2024-12-18T22:31:29.787592Z","iopub.status.idle":"2024-12-18T22:31:29.792544Z","shell.execute_reply.started":"2024-12-18T22:31:29.787568Z","shell.execute_reply":"2024-12-18T22:31:29.791714Z"},"papermill":{"duration":0.106089,"end_time":"2022-04-05T14:46:47.576208","exception":false,"start_time":"2022-04-05T14:46:47.470119","status":"completed"},"tags":[],"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"%%time \n###############################################################################\n#                         Load data                                           #\n###############################################################################\ndef read_data():\n    \"\"\"Reads the data sets\n    \"\"\"\n    train = pd.read_csv(TRAIN_DATA_PATH)\n    test = pd.read_csv(TEST_DATA_PATH)\n    labels = pd.read_csv(TRAIN_LABELS_PATH)    \n    return train, test, labels\ntrain, test, labels = read_data()","metadata":{"execution":{"iopub.status.busy":"2024-12-18T22:31:35.188599Z","iopub.execute_input":"2024-12-18T22:31:35.188916Z","iopub.status.idle":"2024-12-18T22:31:45.124387Z","shell.execute_reply.started":"2024-12-18T22:31:35.188882Z","shell.execute_reply":"2024-12-18T22:31:45.123547Z"},"papermill":{"duration":10.616655,"end_time":"2022-04-05T14:46:58.285528","exception":false,"start_time":"2022-04-05T14:46:47.668873","status":"completed"},"tags":[],"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train.head()","metadata":{"execution":{"iopub.status.busy":"2024-12-18T22:31:52.51406Z","iopub.execute_input":"2024-12-18T22:31:52.514461Z","iopub.status.idle":"2024-12-18T22:31:52.537314Z","shell.execute_reply.started":"2024-12-18T22:31:52.514431Z","shell.execute_reply":"2024-12-18T22:31:52.536444Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"test.head()","metadata":{"execution":{"iopub.status.busy":"2024-12-18T22:32:19.571034Z","iopub.execute_input":"2024-12-18T22:32:19.571348Z","iopub.status.idle":"2024-12-18T22:32:19.585366Z","shell.execute_reply.started":"2024-12-18T22:32:19.571326Z","shell.execute_reply":"2024-12-18T22:32:19.584495Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"labels.head()","metadata":{"execution":{"iopub.status.busy":"2024-12-18T22:32:43.281554Z","iopub.execute_input":"2024-12-18T22:32:43.281869Z","iopub.status.idle":"2024-12-18T22:32:43.289194Z","shell.execute_reply.started":"2024-12-18T22:32:43.281844Z","shell.execute_reply":"2024-12-18T22:32:43.288281Z"},"trusted":true},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# adding labels to train data\ntrain = pd.merge(train, labels,how='left', on=\"sequence\")","metadata":{"execution":{"iopub.execute_input":"2024-12-14T18:20:52.736993Z","iopub.status.busy":"2024-12-14T18:20:52.736632Z","iopub.status.idle":"2024-12-14T18:20:52.954115Z","shell.execute_reply":"2024-12-14T18:20:52.953301Z","shell.execute_reply.started":"2024-12-14T18:20:52.736965Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train.head()","metadata":{"execution":{"iopub.execute_input":"2024-12-14T18:20:53.496506Z","iopub.status.busy":"2024-12-14T18:20:53.496163Z","iopub.status.idle":"2024-12-14T18:20:53.513373Z","shell.execute_reply":"2024-12-14T18:20:53.512481Z","shell.execute_reply.started":"2024-12-14T18:20:53.496476Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"y=train['state'].to_numpy().reshape(-1, 60)","metadata":{"execution":{"iopub.execute_input":"2024-12-14T18:20:54.367785Z","iopub.status.busy":"2024-12-14T18:20:54.366842Z","iopub.status.idle":"2024-12-14T18:20:54.37226Z","shell.execute_reply":"2024-12-14T18:20:54.371201Z","shell.execute_reply.started":"2024-12-14T18:20:54.367753Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Extract groups and prevent data Leakage","metadata":{}},{"cell_type":"code","source":"groups = train[\"sequence\"]","metadata":{"execution":{"iopub.execute_input":"2024-12-14T18:20:55.67378Z","iopub.status.busy":"2024-12-14T18:20:55.673404Z","iopub.status.idle":"2024-12-14T18:20:55.67855Z","shell.execute_reply":"2024-12-14T18:20:55.677397Z","shell.execute_reply.started":"2024-12-14T18:20:55.673751Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"groups.nunique()","metadata":{"execution":{"iopub.execute_input":"2024-12-14T18:20:56.237856Z","iopub.status.busy":"2024-12-14T18:20:56.237114Z","iopub.status.idle":"2024-12-14T18:20:56.254761Z","shell.execute_reply":"2024-12-14T18:20:56.253709Z","shell.execute_reply.started":"2024-12-14T18:20:56.237822Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train.subject.nunique()","metadata":{"execution":{"iopub.execute_input":"2024-12-14T18:20:56.967043Z","iopub.status.busy":"2024-12-14T18:20:56.966176Z","iopub.status.idle":"2024-12-14T18:20:56.984086Z","shell.execute_reply":"2024-12-14T18:20:56.983332Z","shell.execute_reply.started":"2024-12-14T18:20:56.967005Z"},"papermill":{"duration":0.089553,"end_time":"2022-04-05T14:46:58.88681","exception":false,"start_time":"2022-04-05T14:46:58.797257","status":"completed"},"tags":[]},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# check if there are empty fields\ntrain.isnull().any().any()","metadata":{"execution":{"iopub.execute_input":"2024-12-14T18:20:57.845202Z","iopub.status.busy":"2024-12-14T18:20:57.844284Z","iopub.status.idle":"2024-12-14T18:20:57.873218Z","shell.execute_reply":"2024-12-14T18:20:57.872449Z","shell.execute_reply.started":"2024-12-14T18:20:57.845169Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Simple EDA","metadata":{}},{"cell_type":"code","source":"def plot_state_line(train, breath_ids=None, additional_cols=None):\n    if breath_ids is None:\n        breath_ids = train[\"sequence\"].unique()[:4].tolist()\n        \n    fig, axes = plt.subplots(figsize=(25, 18), ncols=4, nrows=3)\n    axes = np.ravel(axes)\n    plot_cols = [\"sensor_00\", \"sensor_01\", \"sensor_03\"]\n    \n    if additional_cols:\n        plot_cols += additional_cols\n        \n    for b, ax in zip(breath_ids, axes):\n        _df = train[train[\"sequence\"]==b].copy()\n        (_df\n         .set_index(\"step\")[plot_cols]\n         .plot(colormap='Paired',\n               ax=ax,\n               title=f\"sequence={b}\", \n               linewidth=2)\n        )\n\n    fig.subplots_adjust(hspace=0.3)\n    return fig\n\ndef plot_state_line_px(input_df, breath_id, additional_cols=[]):\n    import plotly.express as px\n    print('hi')\n    cols = [\"sensor_00\",  \"sensor_01\", \"sensor_02\"] + additional_cols\n    breath_df = input_df[input_df[\"sequence\"]==breath_id]\n    plot_df = pd.DataFrame()\n    for col in cols:\n        _df = breath_df[cols].rename(columns={col:\"y\"})\n        _df[\"step\"] = breath_df[\"step\"].values\n        _df[\"color\"] = col\n        plot_df = pd.concat([plot_df, _df])\n    fig = px.line(plot_df, x=\"step\", y=\"y\", color=\"color\",title=f\"Sequence={breath_id}, Subject={breath_df['subject'].unique()}\")\n    fig.update_traces(mode='markers+lines')\n    return fig","metadata":{"_kg_hide-input":true,"_kg_hide-output":true,"execution":{"iopub.execute_input":"2024-12-14T18:20:59.543355Z","iopub.status.busy":"2024-12-14T18:20:59.543019Z","iopub.status.idle":"2024-12-14T18:20:59.552828Z","shell.execute_reply":"2024-12-14T18:20:59.551923Z","shell.execute_reply.started":"2024-12-14T18:20:59.543326Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"breath_ids = list(train[\"sequence\"].sample(12))\nfig = plot_state_line(train, breath_ids, additional_cols=[])","metadata":{"execution":{"iopub.execute_input":"2024-12-14T18:21:02.216262Z","iopub.status.busy":"2024-12-14T18:21:02.215891Z","iopub.status.idle":"2024-12-14T18:21:04.380624Z","shell.execute_reply":"2024-12-14T18:21:04.379753Z","shell.execute_reply.started":"2024-12-14T18:21:02.21623Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"temp = train.groupby('sequence').subject.min() # dataframe with one row per sequence\ntemp = labels.merge(temp, on='sequence') # add a column with the labels\ntemp = temp.groupby('subject').agg({'state': 'mean', 'sequence': 'count'}).rename(columns={'state': 'probability', 'sequence': 'sequence_count'})\ntemp1 = temp[temp.sequence_count >= 25].probability.rename('Probability of state==1')\nplt.figure(figsize=(14, 6))\nplt.subplot(1, 2, 1)\nplt.hist(temp1, bins=20)\nplt.ylabel('Subject count')\nplt.xlabel('Probability for state==1')\nplt.title('Histogram of state probabilities per subject')\n\nplt.subplot(1, 2, 2)\nplt.scatter(temp.sequence_count, temp.probability)\nplt.xlabel('sequence count')\nplt.ylabel('probability')\nplt.title('Probability depends on sequence count')\nplt.show()\n\nprint()\nprint(f\"The standard deviation of {temp[temp.sequence_count >= 25].probability.std():.2f} is much higher than 0.1.\")\nprint()\nprint('Subjects which are always in state 0:', (temp.probability == 0).sum())","metadata":{"execution":{"iopub.execute_input":"2024-12-14T18:21:07.282363Z","iopub.status.busy":"2024-12-14T18:21:07.282017Z","iopub.status.idle":"2024-12-14T18:21:07.921489Z","shell.execute_reply":"2024-12-14T18:21:07.920635Z","shell.execute_reply.started":"2024-12-14T18:21:07.282335Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def plot_sensor_distributions(train, sensors):\n    \"\"\"Plots the distribution of each sensor's values.\"\"\"\n    fig, axes = plt.subplots(nrows=5, ncols=3, figsize=(20, 15))\n    axes = axes.ravel()\n\n    for idx, sensor in enumerate(sensors):\n        sns.histplot(train[sensor], ax=axes[idx], kde=True, bins=50, color=\"blue\")\n        axes[idx].set_title(f\"Distribution of {sensor}\")\n        axes[idx].set_xlabel(\"Value\")\n        axes[idx].set_ylabel(\"Frequency\")\n\n    plt.tight_layout()\n    plt.show()\n\nplot_sensor_distributions(train, SENSORS)","metadata":{"execution":{"iopub.execute_input":"2024-12-14T18:21:09.319718Z","iopub.status.busy":"2024-12-14T18:21:09.319045Z","iopub.status.idle":"2024-12-14T18:22:24.506576Z","shell.execute_reply":"2024-12-14T18:22:24.505496Z","shell.execute_reply.started":"2024-12-14T18:21:09.319688Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def plot_correlation_heatmap(train, sensors):\n    \"\"\"Plots a heatmap of correlations among sensors.\"\"\"\n    plt.figure(figsize=(12, 10))\n    sensor_data = train[sensors]\n    correlation_matrix = sensor_data.corr()\n\n    sns.heatmap(correlation_matrix, annot=True, cmap=\"coolwarm\", fmt=\".2f\", square=True, cbar=True)\n    plt.title(\"Sensor Correlation Heatmap\")\n    plt.show()\n\nplot_correlation_heatmap(train, SENSORS)","metadata":{"execution":{"iopub.execute_input":"2024-12-14T18:22:28.442605Z","iopub.status.busy":"2024-12-14T18:22:28.441905Z","iopub.status.idle":"2024-12-14T18:22:30.037415Z","shell.execute_reply":"2024-12-14T18:22:30.036409Z","shell.execute_reply.started":"2024-12-14T18:22:28.442573Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def time_series_sensor_analysis(train):\n    # Average Sensor Values Over Time by State\n    plt.figure(figsize=(20, 12))\n    sensor_cols = [f'sensor_{i:02d}' for i in range(13)]\n    \n    for i, sensor in enumerate(sensor_cols, 1):\n        plt.subplot(4, 4, i)\n        for state in [0, 1]:\n            state_data = train[train['state'] == state].groupby('step')[sensor].mean()\n            plt.plot(state_data.index, state_data.values, label=f'State {state}')\n        \n        plt.title(f'{sensor} Average Over Time')\n        plt.xlabel('Time Step')\n        plt.ylabel('Average Value')\n        plt.legend()\n    \n    plt.tight_layout()\n    plt.show()\n\ntime_series_sensor_analysis(train)","metadata":{"execution":{"iopub.execute_input":"2024-12-14T18:22:32.443067Z","iopub.status.busy":"2024-12-14T18:22:32.442116Z","iopub.status.idle":"2024-12-14T18:22:35.994493Z","shell.execute_reply":"2024-12-14T18:22:35.993665Z","shell.execute_reply.started":"2024-12-14T18:22:32.44303Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def plot_state_proportion(train):\n    \"\"\"Plots the proportion of state 0 and state 1 in the dataset.\"\"\"\n    state_counts = train['state'].value_counts(normalize=True)\n    state_counts.plot(kind='bar', color=['blue', 'orange'], figsize=(8, 6))\n\n    plt.title('Proportion of States', fontsize=16)\n    plt.xlabel('State', fontsize=12)\n    plt.ylabel('Proportion', fontsize=12)\n    plt.xticks(rotation=0)\n    plt.show()\n\nplot_state_proportion(train)","metadata":{"execution":{"iopub.execute_input":"2024-12-14T18:22:35.996924Z","iopub.status.busy":"2024-12-14T18:22:35.996256Z","iopub.status.idle":"2024-12-14T18:22:36.203438Z","shell.execute_reply":"2024-12-14T18:22:36.202604Z","shell.execute_reply.started":"2024-12-14T18:22:35.996887Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Config","metadata":{}},{"cell_type":"code","source":"class Config:\n    name_v1 = \"Exp-101-ResBiLSTM-v1\"  \n    lr = 1e-7\n    weight_decay = 2e-5\n    epochs =175\n    scheduler = \"ReduceLROnPlateau\"  # : ReduceLROnPlateau: CosineDecayRestarts#Custum\n    early_stop = True\n    seq_len = 60\n    masking = False\n    steps_per_epochs = None\n    train_batch_size = 64\n    valid_batch_size = 32\n    test_batch_size = 64\n    n_fold = 10\n    trn_fold = list(range(10))\n    seed = 2021\n    target_col = \"state\"\n    debug = False\n\n    # Kaggle Env\n    kaggle_dataset_path = \"../input/exp-101\"\n\nif Config.debug:\n    Config.epochs = 2\n    Config.trn_fold = [0]","metadata":{"execution":{"iopub.execute_input":"2024-12-14T18:22:53.590367Z","iopub.status.busy":"2024-12-14T18:22:53.59004Z","iopub.status.idle":"2024-12-14T18:22:53.596598Z","shell.execute_reply":"2024-12-14T18:22:53.595592Z","shell.execute_reply.started":"2024-12-14T18:22:53.590342Z"}},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Utils","metadata":{"papermill":{"duration":0.056728,"end_time":"2022-04-05T14:46:59.136725","exception":false,"start_time":"2022-04-05T14:46:59.079997","status":"completed"},"tags":[]}},{"cell_type":"code","source":"class colors: # You may need to change color settings\n    RED = '\\033[31m'\n    ENDC = '\\033[m'\n    GREEN = '\\033[32m'\n    YELLOW = '\\033[33m'\n    BLUE = '\\033[34m'\n    \n# def combiner(x:pd.DataFrame)->List:\n#     #https://stackoverflow.com/questions/62071474/combine-two-columns-containing-lists-of-first-and-last-names-into-one-column-tha\n#     return [str(i[0])+str(i[1]) if i[1].isdigit() else str(i[0]) for i in zip(x[\"DISTANCE\"], x[\"DEVICE\"])]\n# #train1[\"DISTANCE\"]=train1.apply(lambda x: combiner(x), axis=1)\n\ndef plot_roc(y,y_pred):\n    from sklearn.metrics import auc\n    fpr, tpr, thresholds = roc_curve(y_true=y, y_score=y_pred)\n    auc = auc(fpr, tpr)\n    plt.figure(1)\n    plt.plot([0, 1], [0, 1], 'k--')\n    plt.plot(fpr, tpr, label='Model(area = {:.3f})'.format(auc))\n    plt.xlabel('False positive rate')\n    plt.ylabel('True positive rate')\n    plt.title('ROC curve')\n    plt.legend(loc='best')\n    plt.show()\ndef plot_acc(f_scores):\n    from matplotlib.ticker import MaxNLocator\n    for fold in range(f_scores['folds'].nunique()):\n        history_f = f_scores[f_scores['folds'] == fold]\n\n        best_epoch = np.argmin(np.array(history_f['val_loss']))\n\n        best_val_loss = history_f['val_loss'][best_epoch]\n        print(f'The best val loss  epoch is :{best_epoch} and the val_loss:{best_val_loss}')\n        fig, ax1 = plt.subplots(1, 2, tight_layout=True, figsize=(15,4))\n\n        fig.suptitle('Fold : '+ str(fold+1) +\n                     \" Validation Loss: {:0.4f}\".format(history_f['val_loss'].min()) +\n                     \" Validation Accuracy: {:0.4f}\".format(history_f[ACC_VAL_METRICS].max()) +\n                     \" LR: {:0.8f}\".format(history_f['lr'].min())\n                     , fontsize=14)\n\n        plt.subplot(1,2,1)\n        plt.plot(history_f.loc[:, ['loss', 'val_loss']], label= ['loss', 'val_loss'])\n\n        from_epoch = 0\n        if best_epoch >= from_epoch:\n            plt.scatter([best_epoch], [best_val_loss], c = 'r', label = f'Best val_loss = {best_val_loss:.5f}')\n        if best_epoch > 0:\n            almost_epoch = np.argmin(np.array(history_f['val_loss'])[:best_epoch])\n            almost_val_loss = history_f['val_loss'][almost_epoch]\n            if almost_epoch >= from_epoch:\n                plt.scatter([almost_epoch], [almost_val_loss], c='orange', label = 'Second best val_loss')\n        plt.gca().xaxis.set_major_locator(MaxNLocator(integer=True))\n        plt.xlabel('Epoch')\n        plt.ylabel('Loss')\n        plt.legend(loc='upper left')   \n\n        ax2 = plt.gca().twinx()\n        ax2.plot(history_f.loc[:, ['lr']], 'y:', label='lr' ) # default color is same as first ax\n        ax2.set_ylabel('Learning rate')\n        ax2.legend(loc = 'upper right')\n        ax2.grid()\n\n        best_epoch = np.argmax(np.array(history_f[ACC_VAL_METRICS]))\n        best_val_acc = history_f[ACC_VAL_METRICS][best_epoch]\n        print(f'The best val acc  epoch is :{best_epoch} and the val_acc:{best_val_acc}')\n        plt.subplot(1,2,2)\n        plt.plot(history_f.loc[:, [ACC_METRICS, ACC_VAL_METRICS]],label= [ACC_METRICS, ACC_VAL_METRICS])\n        if best_epoch >= from_epoch:\n            plt.scatter([best_epoch], [best_val_acc], c = 'r', label = f'Best val_acc = {best_val_acc:.5f}')\n        plt.xlabel('Epoch')\n        plt.ylabel('Accuracy')\n        plt.legend(loc = 'lower left')\n        plt.legend(fontsize = 15)\n        plt.grid(b = True, linestyle = '-')\ndef set_seed(seed):\n    np.random.seed(seed)\n    tf.random.set_seed(seed)\n    print(f\"Seed set to: {seed}\")","metadata":{"_kg_hide-input":true,"_kg_hide-output":true,"execution":{"iopub.execute_input":"2024-12-14T18:22:56.265952Z","iopub.status.busy":"2024-12-14T18:22:56.265131Z","iopub.status.idle":"2024-12-14T18:22:56.617359Z","shell.execute_reply":"2024-12-14T18:22:56.616317Z","shell.execute_reply.started":"2024-12-14T18:22:56.265918Z"},"papermill":{"duration":0.07972,"end_time":"2022-04-05T14:46:59.27383","exception":false,"start_time":"2022-04-05T14:46:59.19411","status":"completed"},"tags":[]},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"<a id=\"top\"></a>\n<h3 class=\"list-group-item list-group-item-action active\" data-toggle=\"list\" style='color:white; background:#1777C4; border:0' role=\"tab\" aria-controls=\"home\"><center>Prepare Data/Impute Missing Value</center></h3>\n\n\n## Prepare Data :","metadata":{"papermill":{"duration":0.058356,"end_time":"2022-04-05T14:46:59.539079","exception":false,"start_time":"2022-04-05T14:46:59.480723","status":"completed"},"tags":[]}},{"cell_type":"code","source":"train.columns","metadata":{"execution":{"iopub.execute_input":"2024-12-14T18:23:04.941003Z","iopub.status.busy":"2024-12-14T18:23:04.939923Z","iopub.status.idle":"2024-12-14T18:23:04.946681Z","shell.execute_reply":"2024-12-14T18:23:04.945885Z","shell.execute_reply.started":"2024-12-14T18:23:04.940969Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"%%time \n###############################################################################\n#                        Features engineer                                    #\n###############################################################################\nclass FeaturesEngineer(BaseEstimator, TransformerMixin):\n    #https://github.com/facebookresearch/Kats/blob/main/tutorials/kats_203_tsfeatures.ipynb\n    # https://github.com/predict-idlab/tsflex\n    #https://www.kaggle.com/code/ryanholbrook/tps-april-2022-benchmark\n    #https://www.kaggle.com/code/siukeitin/tps042022-fe-2500-features-with-tsfresh-catch22\n    #https://www.kaggle.com/competitions/tabular-playground-series-apr-2022/discussion/316757\n    # https://tsfresh.readthedocs.io/en/latest/api/tsfresh.feature_extraction.html#tsfresh.feature_extraction.feature_calculators.ar_coefficient\n    def fit(self, X, y=None):\n        return self \n    # Author : https://www.kaggle.com/gemartin/load-data-reduce-memory-usage\n    def reduce_mem_usage(self,df:pd.DataFrame)->pd.DataFrame:\n        \"\"\" iterate through all the columns of a dataframe and modify the data type\n            to reduce memory usage.        \n        \"\"\"\n        start_mem = df.memory_usage().sum() / 1024**2\n        print('Memory usage of dataframe is {:.2f} MB'.format(start_mem))\n\n        for col in tqdm(df.columns):\n            col_type = df[col].dtype\n            name =df[col].dtype.name \n\n            if col_type != object and col_type.name != 'category':\n            #if name != \"category\":    \n                c_min = df[col].min()\n                c_max = df[col].max()\n                if str(col_type)[:3] == 'int':\n                    if c_min > np.iinfo(np.int8).min and c_max < np.iinfo(np.int8).max:\n                        df[col] = df[col].astype(np.int8)\n                    elif c_min > np.iinfo(np.int16).min and c_max < np.iinfo(np.int16).max:\n                        df[col] = df[col].astype(np.int16)\n                    elif c_min > np.iinfo(np.int32).min and c_max < np.iinfo(np.int32).max:\n                        df[col] = df[col].astype(np.int32)\n                    elif c_min > np.iinfo(np.int64).min and c_max < np.iinfo(np.int64).max:\n                        df[col] = df[col].astype(np.int64)  \n                else:\n                    if c_min > np.finfo(np.float16).min and c_max < np.finfo(np.float16).max:\n                        df[col] = df[col].astype(np.float16)\n                    elif c_min > np.finfo(np.float32).min and c_max < np.finfo(np.float32).max:\n                        df[col] = df[col].astype(np.float32)\n                    else:\n                        df[col] = df[col].astype(np.float64)\n            else:\n                df[col] = df[col].astype('category')\n\n        end_mem = df.memory_usage().sum() / 1024**2\n        print('Memory usage after optimization is: {:.2f} MB'.format(end_mem))\n        print('Decreased by {:.1f}%'.format(100 * (start_mem - end_mem) / start_mem))\n        return df\n    \n    def transform(self, X, y=None):\n        train= pd.DataFrame(X).copy()\n        train=self.reduce_mem_usage(train)\n        if 'state' in train.columns:\n            train = train.drop(['state'], axis=1)\n        features = train.columns.tolist()[3:]\n        for feature in features:\n            for window in [3,6,12,24]:\n                train[feature+'_lead_diff'+str(window)] = train[feature] - train.groupby('sequence')[feature].shift(window).fillna(0)\n                train[feature+'_lag_diff'+str(window)] = train[feature] - train.groupby('sequence')[feature].shift(-1*window).fillna(0)\n            for window in [3,6,12,24]:\n                train[feature+'_roll_'+str(window)+'_mean'] = train.groupby('sequence')[feature]\\\n                                                         .rolling(window=window, min_periods=1)\\\n                                                         .mean().reset_index(level=0,drop=True)\n                train[feature+'_roll_'+str(window)+'_std'] = train.groupby('sequence')[feature]\\\n                                                        .rolling(window=window, min_periods=1)\\\n                                                        .std().reset_index(level=0,drop=True)\n                train[feature+'_roll_'+str(window)+'_sum'] = train.groupby('sequence')[feature]\\\n                                                        .rolling(window=window, min_periods=1)\\\n                                                        .sum().reset_index(level=0,drop=True)\n            #train['one'] = 1\n            #train['count'] = (train['one']).groupby(train['sequence']).cumsum()\n            #train[feature +'_ummean'] =train[feature + '_cumsum'] /train['count']\n            train[feature +'_ewm_mean'] = (train\\\n                          .groupby('sequence')[feature]\\\n                          .ewm(halflife=10)\\\n                       .mean()\\\n                        .reset_index(level=0,drop=True))\n            #train[feature +'_rolling_mean'] = train.groupby('sequence')[feature].rolling(window=10, min_periods=1).mean().reset_index(level=0,drop=True)\n            #train[feature +'_expand_mean'] = train.groupby('sequence')[feature].expanding(10).mean().reset_index(level=0,drop=True)\n            train.fillna(0, inplace=True)\n            #train['sensor_02_up'] = (train.sensor_02.diff(axis=1) > 0).sum(axis=1)\n            #train['sensor_02_down'] = (train.sensor_02.diff(axis=1) < 0).sum(axis=1)\n              \n\n        print(\"Step-1...Completed\")\n        #train['sensor_04' + '_kurt'] = train.groupby('sequence')['sensor_04'].transform(pd.DataFrame.kurt)\n        train['sequence_count_of_subject']=train.groupby('subject')['sequence'].transform('count')\n        count_in_sequences = 60\n        train['cum_count']=train.groupby('sequence').cumcount()+1\n        train['month_sin'] = np.sin(2*np.pi*train['cum_count']/count_in_sequences)\n        train['month_cos'] = np.cos(2*np.pi*train['cum_count']/count_in_sequences) \n        train.fillna(0, inplace=True)\n        train = train.drop([\"sequence\", \"subject\", \"step\",'cum_count'], axis=1)\n        print(\"Step-2...Completed\")\n        #train = train.drop([\"sequence\", \"subject\", \"step\",'one'], axis=1)\n        # Convert Dtypes   \n        train=self.reduce_mem_usage(train)\n        return train ","metadata":{"execution":{"iopub.execute_input":"2024-12-14T18:23:07.130372Z","iopub.status.busy":"2024-12-14T18:23:07.13006Z","iopub.status.idle":"2024-12-14T18:23:07.14562Z","shell.execute_reply":"2024-12-14T18:23:07.144787Z","shell.execute_reply.started":"2024-12-14T18:23:07.130347Z"},"papermill":{"duration":0.078198,"end_time":"2022-04-05T14:46:59.674537","exception":false,"start_time":"2022-04-05T14:46:59.596339","status":"completed"},"tags":[]},"outputs":[],"execution_count":null},{"cell_type":"code","source":"%%time \n###############################################################################\n#                        Features Engineer                                    # \n###############################################################################\n#FeaturesEngineer().fit(train)\ntrain =FeaturesEngineer().fit_transform(train)\ntest =FeaturesEngineer().fit_transform(test)","metadata":{"execution":{"iopub.execute_input":"2024-12-14T18:23:08.197106Z","iopub.status.busy":"2024-12-14T18:23:08.196356Z","iopub.status.idle":"2024-12-14T18:30:50.209863Z","shell.execute_reply":"2024-12-14T18:30:50.208879Z","shell.execute_reply.started":"2024-12-14T18:23:08.197072Z"},"papermill":{"duration":320.209297,"end_time":"2022-04-05T14:52:19.942932","exception":false,"start_time":"2022-04-05T14:46:59.733635","status":"completed"},"tags":[]},"outputs":[],"execution_count":null},{"cell_type":"code","source":"train.head()","metadata":{"execution":{"iopub.execute_input":"2024-12-14T18:31:29.831897Z","iopub.status.busy":"2024-12-14T18:31:29.831155Z","iopub.status.idle":"2024-12-14T18:31:29.856243Z","shell.execute_reply":"2024-12-14T18:31:29.855382Z","shell.execute_reply.started":"2024-12-14T18:31:29.83186Z"},"papermill":{"duration":0.164165,"end_time":"2022-04-05T14:52:20.236373","exception":false,"start_time":"2022-04-05T14:52:20.072208","status":"completed"},"tags":[]},"outputs":[],"execution_count":null},{"cell_type":"code","source":"%%time \n###############################################################################\n#                        Defien the features                                  #\n###############################################################################\nFEATURES = train.columns \nnum_features = len(FEATURES)\nprint(f'Number of features: {num_features}')","metadata":{"execution":{"iopub.execute_input":"2024-12-14T18:31:30.460861Z","iopub.status.busy":"2024-12-14T18:31:30.460043Z","iopub.status.idle":"2024-12-14T18:31:30.465832Z","shell.execute_reply":"2024-12-14T18:31:30.464999Z","shell.execute_reply.started":"2024-12-14T18:31:30.460829Z"},"papermill":{"duration":0.137251,"end_time":"2022-04-05T14:52:20.507317","exception":false,"start_time":"2022-04-05T14:52:20.370066","status":"completed"},"tags":[]},"outputs":[],"execution_count":null},{"cell_type":"code","source":"###############################################################################\n#                        Cat_columns                                          #\n###############################################################################\ncat_columns = train.select_dtypes(include=['category','object','bool']).columns\ncat_columns","metadata":{"execution":{"iopub.execute_input":"2024-12-14T18:31:37.521519Z","iopub.status.busy":"2024-12-14T18:31:37.520667Z","iopub.status.idle":"2024-12-14T18:31:38.075662Z","shell.execute_reply":"2024-12-14T18:31:38.074789Z","shell.execute_reply.started":"2024-12-14T18:31:37.521488Z"},"papermill":{"duration":0.42408,"end_time":"2022-04-05T14:52:21.485017","exception":false,"start_time":"2022-04-05T14:52:21.060937","status":"completed"},"tags":[]},"outputs":[],"execution_count":null},{"cell_type":"code","source":"###############################################################################\n#                        Num_columns                                          #\n###############################################################################\nnum_columns =train.select_dtypes(exclude=['category','object','bool']).columns\nnum_columns","metadata":{"execution":{"iopub.execute_input":"2024-12-14T18:31:38.537213Z","iopub.status.busy":"2024-12-14T18:31:38.536411Z","iopub.status.idle":"2024-12-14T18:31:40.20591Z","shell.execute_reply":"2024-12-14T18:31:40.204867Z","shell.execute_reply.started":"2024-12-14T18:31:38.537184Z"},"papermill":{"duration":0.932168,"end_time":"2022-04-05T14:52:22.548841","exception":false,"start_time":"2022-04-05T14:52:21.616673","status":"completed"},"tags":[]},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Preprocess the data ","metadata":{"papermill":{"duration":0.131372,"end_time":"2022-04-05T14:52:22.81274","exception":false,"start_time":"2022-04-05T14:52:22.681368","status":"completed"},"tags":[]}},{"cell_type":"code","source":"###############################################################################\n#                         Define differrent Transformer                       #\n###############################################################################\n\n#Define cat pipeline\n \ncategorical_transformer_ohe = Pipeline(\n                    steps=[\n                        ('imputer', SimpleImputer(strategy='constant',\n                                                  fill_value='MISSING',\n                                                #  add_indicator=True\n                                                 )\n                         ),\n                        ('encoder', OneHotEncoder()),#(Numerical Input, Categorical Output)\n                    ]\n                    )\n#Define num pipeline\nnumeric_transformer_power = Pipeline(\n                            steps=[\n                            ('imputer', SimpleImputer(strategy='median'\n                                                     # ,add_indicator=True\n                                                     )),\n                            ('scaler', PowerTransformer()),#(Numerical Input, Numerical Output)                 \n                                \n                            ]\n                            )\n\nnumeric_transformer_ss = Pipeline(\n                            steps=[\n                            ('imputer', SimpleImputer(strategy='median'\n                                                     # ,add_indicator=True\n                                                     )),\n                            ('scaler', StandardScaler()),#(Numerical Input, Numerical Output)\n                            ]\n                            )\nnumeric_transformer_RS = Pipeline(\n                            steps=[\n                            ('imputer', SimpleImputer(strategy='median'\n                                                     # ,add_indicator=True\n                                                     )),\n                            ('scaler', RobustScaler()),#(Numerical Input, Numerical Output)\n                            ]\n                            )\n#num_columns=FEATURES\n# Features union cat + num \npreprocessor_basic = ColumnTransformer(\n            transformers=[\n                ('numerical',  numeric_transformer_power, num_columns),\n                ('categorical', categorical_transformer_ohe, cat_columns)\n            ]\n            )\nnumeric_transformer_QuantileTransformer = Pipeline(\n                            steps=[\n                            ('imputer', SimpleImputer(strategy='median'\n                                                     # ,add_indicator=True\n                                                     )),\n                            ('scaler', QuantileTransformer(n_quantiles=2000, output_distribution='normal', \n                            random_state=42))\n                            ]\n                            )\n                            \n\npreprocessor_basic","metadata":{"execution":{"iopub.execute_input":"2024-12-14T18:31:43.21933Z","iopub.status.busy":"2024-12-14T18:31:43.218914Z","iopub.status.idle":"2024-12-14T18:31:43.25914Z","shell.execute_reply":"2024-12-14T18:31:43.258187Z","shell.execute_reply.started":"2024-12-14T18:31:43.219297Z"},"papermill":{"duration":0.190819,"end_time":"2022-04-05T14:52:23.136038","exception":false,"start_time":"2022-04-05T14:52:22.945219","status":"completed"},"tags":[]},"outputs":[],"execution_count":null},{"cell_type":"code","source":"%%time \n###############################################################################\n#                       Preprocess Train and Test DATA                         # \n###############################################################################\nnumeric_transformer_QuantileTransformer.fit(train[FEATURES])\ntrain[FEATURES]=numeric_transformer_QuantileTransformer.transform(train[FEATURES])\ntest[FEATURES]=numeric_transformer_QuantileTransformer.transform(test[FEATURES])","metadata":{"execution":{"iopub.execute_input":"2024-12-14T18:31:44.776715Z","iopub.status.busy":"2024-12-14T18:31:44.776348Z","iopub.status.idle":"2024-12-14T18:36:50.267698Z","shell.execute_reply":"2024-12-14T18:36:50.266833Z","shell.execute_reply.started":"2024-12-14T18:31:44.776686Z"},"papermill":{"duration":90.057071,"end_time":"2022-04-05T14:53:53.324842","exception":false,"start_time":"2022-04-05T14:52:23.267771","status":"completed"},"tags":[]},"outputs":[],"execution_count":null},{"cell_type":"code","source":"###############################################################################\n#                        Extract features and Target                          #\n###############################################################################\nnum_features = len(FEATURES)\ntrain_data = train[FEATURES].values.reshape(int(len(train) / 60), 60, num_features)\ntest_data = test[FEATURES].values.reshape(int(len(test) / 60), 60, num_features)\ndisplay(train_data.shape)\ndisplay(test_data.shape)\ndisplay(labels.shape)","metadata":{"execution":{"iopub.execute_input":"2024-12-14T18:37:04.388664Z","iopub.status.busy":"2024-12-14T18:37:04.388299Z","iopub.status.idle":"2024-12-14T18:37:06.467466Z","shell.execute_reply":"2024-12-14T18:37:06.466572Z","shell.execute_reply.started":"2024-12-14T18:37:04.388632Z"},"papermill":{"duration":1.284001,"end_time":"2022-04-05T14:53:54.747244","exception":false,"start_time":"2022-04-05T14:53:53.463243","status":"completed"},"tags":[]},"outputs":[],"execution_count":null},{"cell_type":"code","source":"###############################################################################\n#                        Extract features and Target                          #\n###############################################################################\ntarget= \"state\"\nX = train_data.copy()# axis=1\n#y = labels[target]\ndel train_data","metadata":{"execution":{"iopub.execute_input":"2024-12-14T18:37:06.469643Z","iopub.status.busy":"2024-12-14T18:37:06.469241Z","iopub.status.idle":"2024-12-14T18:37:07.419447Z","shell.execute_reply":"2024-12-14T18:37:07.418746Z","shell.execute_reply.started":"2024-12-14T18:37:06.469605Z"},"papermill":{"duration":0.433333,"end_time":"2022-04-05T14:53:55.312724","exception":false,"start_time":"2022-04-05T14:53:54.879391","status":"completed"},"tags":[]},"outputs":[],"execution_count":null},{"cell_type":"code","source":"###############################################################################\n#        Split the dataset and labels into training and test sets             #\n###############################################################################\nX_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1,random_state=0,stratify=y )\nprint(f\" {colors.BLUE}{X_test.shape[0]} {colors.ENDC} rows in test set vs. {colors.BLUE}{ X_train.shape[0]} {colors.ENDC}in training set. {colors.BLUE}{X_test.shape[1]}{colors.ENDC} Features.\")","metadata":{"execution":{"iopub.execute_input":"2024-12-14T18:37:12.462899Z","iopub.status.busy":"2024-12-14T18:37:12.462518Z","iopub.status.idle":"2024-12-14T18:37:14.579219Z","shell.execute_reply":"2024-12-14T18:37:14.578262Z","shell.execute_reply.started":"2024-12-14T18:37:12.462872Z"},"papermill":{"duration":0.338234,"end_time":"2022-04-05T14:53:55.784874","exception":false,"start_time":"2022-04-05T14:53:55.44664","status":"completed"},"tags":[]},"outputs":[],"execution_count":null},{"cell_type":"code","source":"###############################################################################\n#                         Hardware configurations                             #\n##############################a################################################\ngpus = tf.config.experimental.list_physical_devices('GPU')\nfor gpu in gpus:\n    print(\"Name:\", gpu.name, \"  Type:\", gpu.device_type)","metadata":{"execution":{"iopub.execute_input":"2024-12-14T18:37:15.955674Z","iopub.status.busy":"2024-12-14T18:37:15.954972Z","iopub.status.idle":"2024-12-14T18:37:16.016995Z","shell.execute_reply":"2024-12-14T18:37:16.016025Z","shell.execute_reply.started":"2024-12-14T18:37:15.95564Z"},"papermill":{"duration":0.254921,"end_time":"2022-04-05T14:53:56.901629","exception":false,"start_time":"2022-04-05T14:53:56.646708","status":"completed"},"tags":[]},"outputs":[],"execution_count":null},{"cell_type":"code","source":"from tensorflow.python.client import device_lib\n\ndevice_lib.list_local_devices()","metadata":{"execution":{"iopub.execute_input":"2024-12-14T18:37:17.016669Z","iopub.status.busy":"2024-12-14T18:37:17.015842Z","iopub.status.idle":"2024-12-14T18:37:21.748067Z","shell.execute_reply":"2024-12-14T18:37:21.747093Z","shell.execute_reply.started":"2024-12-14T18:37:17.016636Z"},"papermill":{"duration":1.828169,"end_time":"2022-04-05T14:53:58.865273","exception":false,"start_time":"2022-04-05T14:53:57.037104","status":"completed"},"tags":[]},"outputs":[],"execution_count":null},{"cell_type":"code","source":"tf.test.is_gpu_available()","metadata":{"execution":{"iopub.execute_input":"2024-12-14T18:37:21.749901Z","iopub.status.busy":"2024-12-14T18:37:21.749551Z","iopub.status.idle":"2024-12-14T18:37:21.764077Z","shell.execute_reply":"2024-12-14T18:37:21.763138Z","shell.execute_reply.started":"2024-12-14T18:37:21.749875Z"},"papermill":{"duration":0.151613,"end_time":"2022-04-05T14:53:59.15204","exception":false,"start_time":"2022-04-05T14:53:59.000427","status":"completed"},"tags":[]},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def get_hardware_strategy():\n    try:\n        # TPU detection. No parameters necessary if TPU_NAME environment variable is\n        # set: this is always the case on Kaggle.\n        tpu = tf.distribute.cluster_resolver.TPUClusterResolver()\n        print('Running on TPU ', tpu.master())\n    except ValueError:\n        tpu = None\n\n    if tpu:\n        tf.config.experimental_connect_to_cluster(tpu)\n        tf.tpu.experimental.initialize_tpu_system(tpu)\n        strategy = tf.distribute.experimental.TPUStrategy(tpu)\n        tf.config.optimizer.set_jit(True)\n    else:\n        # Default distribution strategy in Tensorflow. Works on CPU and single GPU.\n        strategy = tf.distribute.get_strategy()\n\n    return tpu, strategy\n\ntpu, strategy = get_hardware_strategy()","metadata":{"execution":{"iopub.execute_input":"2024-12-14T18:37:23.770836Z","iopub.status.busy":"2024-12-14T18:37:23.770218Z","iopub.status.idle":"2024-12-14T18:37:23.781306Z","shell.execute_reply":"2024-12-14T18:37:23.780357Z","shell.execute_reply.started":"2024-12-14T18:37:23.770801Z"},"papermill":{"duration":0.148798,"end_time":"2022-04-05T14:53:59.436443","exception":false,"start_time":"2022-04-05T14:53:59.287645","status":"completed"},"tags":[]},"outputs":[],"execution_count":null},{"cell_type":"code","source":"# Detect hardware, return appropriate distribution strategy\nprint(tf.version.VERSION)\nprint(\"REPLICAS: \", strategy.num_replicas_in_sync)","metadata":{"execution":{"iopub.execute_input":"2024-12-14T18:37:26.129363Z","iopub.status.busy":"2024-12-14T18:37:26.128516Z","iopub.status.idle":"2024-12-14T18:37:26.134Z","shell.execute_reply":"2024-12-14T18:37:26.133088Z","shell.execute_reply.started":"2024-12-14T18:37:26.129331Z"},"papermill":{"duration":0.148157,"end_time":"2022-04-05T14:53:59.723114","exception":false,"start_time":"2022-04-05T14:53:59.574957","status":"completed"},"tags":[]},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# Hybrid CNN_LSTM Sequence Parrllel architecure:\n\n\n##  Define the Model\n### Utils","metadata":{}},{"cell_type":"code","source":"#Capturer des caractéristiques locales de la séquence sur différentes résolutions.\n\ndef _inception_module( input_tensor, nb_filters,use_bottleneck,bottleneck_size,kernel_size,stride=1, activation='linear'):\n     \n    if use_bottleneck and int(input_tensor.shape[-1]) > bottleneck_size:\n        input_inception = tf.keras.layers.Conv1D(filters=bottleneck_size, kernel_size=1,\n                                              padding='same', activation=activation, use_bias=False)(input_tensor)\n    else:\n        input_inception = input_tensor\n    kernel_size=kernel_size-1\n    # kernel_size_s = [3, 5, 8, 11, 17]\n    kernel_size_s = [kernel_size // (2 ** i) for i in range(3)]\n\n    conv_list = []\n\n    for i in range(len(kernel_size_s)):\n        conv_list.append(tf.keras.layers.Conv1D(filters=nb_filters, kernel_size=kernel_size_s[i],\n                                             strides=stride, padding='same', activation=activation, use_bias=False)(\n            input_inception))\n\n    max_pool_1 = tf.keras.layers.MaxPool1D(pool_size=3, strides=stride, padding='same')(input_tensor)\n\n    conv_6 = tf.keras.layers.Conv1D(filters=nb_filters, kernel_size=1,\n                                 padding='same', activation=activation, use_bias=False)(max_pool_1)\n\n    conv_list.append(conv_6)\n\n    x = tf.keras.layers.Concatenate(axis=2)(conv_list)\n    x = tf.keras.layers.BatchNormalization()(x)\n    x = tf.keras.layers.Activation(activation='relu')(x)\n    return x\n\n#Faciliter l'apprentissage des couches profondes en permettant un flux direct d'informations, ce qui réduit le risque de disparition du gradient.\n\ndef _shortcut_layer( input_tensor, out_tensor):\n    shortcut_y = tf.keras.layers.Conv1D(filters=int(out_tensor.shape[-1]), kernel_size=1,\n                                     padding='same', use_bias=False)(input_tensor)\n    shortcut_y = tf.keras.layers.BatchNormalization()(shortcut_y)\n\n    x = tf.keras.layers.Add()([shortcut_y, out_tensor])\n    x = tf.keras.layers.Activation('relu')(x)\n    return x\n     ","metadata":{"_kg_hide-input":true,"_kg_hide-output":true,"execution":{"iopub.execute_input":"2024-12-14T18:37:38.807993Z","iopub.status.busy":"2024-12-14T18:37:38.807305Z","iopub.status.idle":"2024-12-14T18:37:38.81881Z","shell.execute_reply":"2024-12-14T18:37:38.817815Z","shell.execute_reply.started":"2024-12-14T18:37:38.807959Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def BiLSTM_CNN_Parrallel(x_pre):\n    with strategy.scope():  \n        # determine the number of input features\n        n_features = x_pre.shape[-2:]\n        nb_classes=60\n        nb_filters=32\n        bottleneck_size = 32\n        use_residual=True\n        use_bottleneck=True\n        depth=6\n        kernel_size=41\n        # first input model\n        imputs = tf.keras.layers.Input(shape=(n_features), name=\"input_x\")\n        out1 = tf.keras.layers.Conv1D(filters=16, kernel_size=3, strides=1)(imputs)\n        out1 = tf.keras.layers.BatchNormalization()(out1)\n        for _ in range(5):\n            out = tf.keras.layers.Conv1D(filters=32, kernel_size=4, strides=1, padding='same')(out1)\n            out = tf.keras.layers.BatchNormalization()(out)\n            out = tf.keras.layers.Activation(\"relu\")(out)\n            out = tf.keras.layers.Conv1D(filters=16, kernel_size=2, strides=1, padding='same')(out)\n            out = tf.keras.layers.BatchNormalization()(out)\n            out = tf.keras.layers.Concatenate()([out, out1])\n            out = tf.keras.layers.Activation(\"relu\")(out)\n            out1 = tf.keras.layers.MaxPooling1D(pool_size=3, strides=2,padding='same')(out)\n\n        cnn1 = tf.keras.layers.Flatten()(out1)\n        cnn1 = tf.keras.layers.Dense(60)(cnn1)\n        # second input model\n        x1 = tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(768, return_sequences=True))(imputs)\n        \n        x21 = tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(512, return_sequences=True))(x1)\n        x22 = tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(512, return_sequences=True))(imputs)\n        l2 = tf.keras.layers.Concatenate(axis=2)([x21, x22])\n        \n        x31 = tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(384, return_sequences=True))(l2)\n        x32 = tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(384, return_sequences=True))(x21)\n        l3 = tf.keras.layers.Concatenate(axis=2)([x31, x32])\n        \n        x41 = tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(256, return_sequences=True))(l3)\n        x42 = tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(128, return_sequences=True))(x32)\n        l4 = tf.keras.layers.Concatenate(axis=2)([x41, x42])\n        l5 = tf.keras.layers.Concatenate(axis=2)([x1, l2, l3, l4])\n        #lstm1 = tf.keras.layers.Bidirectional(tf.keras.layers.LSTM(256, return_sequences=False))(l5)\n        lstm1 = tf.keras.layers.Dense(128, activation=\"selu\", kernel_initializer='lecun_normal')(l5)\n        #lstm1=layers.Dropout(0.2)(lstm1)\n        #lstm1 = tf.keras.layers.Dense(60)(lstm1)\n        lstm1 = tf.keras.layers.Dense(1)(lstm1)\n        lstm1 = tf.keras.layers.Flatten()(lstm1)\n        # thrird input model\n\n        x = imputs\n        input_res = imputs\n\n        for d in range(depth):\n\n            x = _inception_module(x,nb_filters=32,use_bottleneck=True,bottleneck_size = 32, kernel_size=41)\n\n            if use_residual and d % 3 == 2:\n                x = _shortcut_layer(input_res, x)\n                input_res = x\n\n        gap_layer = tf.keras.layers.GlobalAveragePooling1D()(x)\n\n        cnn2 = tf.keras.layers.Dense(nb_classes, activation='sigmoid')(gap_layer)\n        # merge input models\n        merge = tf.keras.layers.concatenate([cnn1,cnn2,lstm1])\n        merge = tf.keras.layers.Dropout(0.2)(merge)\n        dense = tf.keras.layers.Dense(128, activation='selu', kernel_initializer='lecun_normal')(merge)\n        output = tf.keras.layers.Dense(60, activation=\"sigmoid\")(dense)\n        model = tf.keras.Model(inputs=[imputs], outputs=output)\n        #model = tf.keras.Model(inputs=[visible1, visible2], outputs=output)\n        #sequence = tmp\n        model.compile(optimizer='adam', loss='binary_crossentropy', \n                                #metrics=['accuracy',F1])\n                                 metrics=[AUC(name='auc')])\n    return model ","metadata":{"execution":{"iopub.execute_input":"2024-12-14T18:37:39.891664Z","iopub.status.busy":"2024-12-14T18:37:39.89056Z","iopub.status.idle":"2024-12-14T18:37:39.908669Z","shell.execute_reply":"2024-12-14T18:37:39.907692Z","shell.execute_reply.started":"2024-12-14T18:37:39.891414Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"###############################################################################\n#                         Define and compile model                            #\n###############################################################################\n#model_reg=generate_baseline2()\nsimple_basic_dl =BiLSTM_CNN_Parrallel(X)\n#model_reg.summary()\nsimple_basic_dl.summary()","metadata":{"execution":{"iopub.execute_input":"2024-12-14T18:37:40.715966Z","iopub.status.busy":"2024-12-14T18:37:40.714952Z","iopub.status.idle":"2024-12-14T18:37:45.924593Z","shell.execute_reply":"2024-12-14T18:37:45.923603Z","shell.execute_reply.started":"2024-12-14T18:37:40.715934Z"},"papermill":{"duration":0.839121,"end_time":"2022-04-05T14:54:04.917459","exception":false,"start_time":"2022-04-05T14:54:04.078338","status":"completed"},"tags":[]},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"## Fitting concept","metadata":{"papermill":{"duration":0.136211,"end_time":"2022-04-05T14:54:06.91363","exception":false,"start_time":"2022-04-05T14:54:06.777419","status":"completed"},"tags":[]}},{"cell_type":"code","source":"###############################################################################\n#                        Learning Rate Scheduler                              #\n###############################################################################\ndef get_scheduler(monitor='val_loss'):\n    if Config.scheduler == \"custom-v1\":\n        def custom_scheduler(epoch):\n            x = Config.lr\n            if epoch >= 125: x = 0.0007\n            if epoch >= 185: x = 0.0004\n            if epoch >= 250: x = 0.0003\n            if epoch >= 275: x = 0.0002\n            if epoch >= 290: x = 0.00015\n            if epoch >= 305: x = 0.0001\n            if epoch >= 320: x = 0.000075\n            if epoch >= 325: x = 0.00006\n            if epoch >= 330: x = 0.00004\n            if epoch >= 330: x = 0.00003\n            if epoch >= 340: x = 0.00002\n            if epoch >= 345: x = 0.00001\n            return x\n        \n        # plot steps\n        plt.plot([custom_scheduler(i) for i in range(Config.epochs)])\n        plt.show()\n        scheduler = tf.keras.callbacks.LearningRateScheduler(custom_scheduler, verbose=1)\n    elif Config.scheduler == \"custom-v2\":\n        def get_lr_callback(epoch,lr):\n            lr_start   = 0.00001\n            lr_max     = 0.01#0.00000125 * 1 * batch_size\n            lr_min     = 0.0001\n            lr_ramp_ep = 2\n            lr_sus_ep  = 2\n            lr_decay   = 0.8\n\n            def lrfn(epoch):\n                if epoch < lr_ramp_ep: lr = (lr_max - lr_start) / lr_ramp_ep * epoch + lr_start\n                elif epoch < lr_ramp_ep + lr_sus_ep: lr = lr_max\n                else:\n                    lr = (lr_max - lr_min) * lr_decay**(epoch - lr_ramp_ep - lr_sus_ep) + lr_min\n                return lr\n            return lrfn(epoch)\n\n        # plot steps\n        scheduler = tf.keras.callbacks.LearningRateScheduler(get_lr_callback, verbose=True)\n        x = [x for x in range(1000)]\n        plt.plot(x,[get_lr_callback(x,.1) for x in x])\n        plt.show()\n    elif Config.scheduler == \"ReduceLROnPlateau\":\n        scheduler = tf.keras.callbacks.ReduceLROnPlateau(\n            monitor=monitor, \n            factor=0.7,\n            patience=4,\n            min_lr=1e-7, \n            verbose=1\n                     )\n    elif Config.scheduler == \"custom-v3\":\n        # set learning rate scheduler\n        # we can chage learning rate during learning\n        def lr_schedul(epoch):\n            x = 0.0001\n            if epoch >= 20:\n                x= 0.00001\n            if epoch >= 40:\n                x = 0.00001\n            if epoch >= 60:\n                x = 0.000001\n            if epoch >= 80:\n                x = 0.0000001\n            if epoch >= 100:\n                x = 0.00000001\n            if epoch >= 120:\n                x = 0.000000001        \n            return x\n\n            def lrfn(epoch):\n                if epoch < lr_ramp_ep: lr = (lr_max - lr_start) / lr_ramp_ep * epoch + lr_start\n                elif epoch < lr_ramp_ep + lr_sus_ep: lr = lr_max\n                else:\n                    lr = (lr_max - lr_min) * lr_decay**(epoch - lr_ramp_ep - lr_sus_ep) + lr_min\n                return lr\n            return lrfn(epoch)\n\n        # plot steps\n        scheduler = tf.keras.callbacks.LearningRateScheduler(lr_schedul, verbose=True)\n           \n    elif Config.scheduler == \"CosineDecayRestarts\":\n        cisine_decay_r = tf.keras.experimental.CosineDecayRestarts(\n            Config.lr,\n            first_decay_steps=Config.epochs // 2,\n            t_mul=1,\n            m_mul=1,\n            alpha=0.01\n            )\n        \n        # plot steps\n        plt.plot([cisine_decay_r(i) for i in range(Config.epochs)])\n        plt.show()\n        scheduler = tf.keras.callbacks.LearningRateScheduler(cisine_decay_r, verbose=1)\n    else:\n        raise NotImplementedError\n    \n    return scheduler\n","metadata":{"_kg_hide-input":true,"_kg_hide-output":true,"execution":{"iopub.execute_input":"2024-12-14T18:38:06.845569Z","iopub.status.busy":"2024-12-14T18:38:06.844605Z","iopub.status.idle":"2024-12-14T18:38:06.862135Z","shell.execute_reply":"2024-12-14T18:38:06.861259Z","shell.execute_reply.started":"2024-12-14T18:38:06.845499Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"###############################################################################\n#                       configure early stopping                              #\n###############################################################################\nes = EarlyStopping(monitor='val_loss',\n                   mode='auto',\n                   patience=10,\n                   min_delta=0.00000001,\n                   restore_best_weights=True)\n###############################################################################\n#                       Save Models                                          #\n###############################################################################\n#filepath = 'my_best_model.epoch{epoch:02d}-loss{val_loss:.2f}.hdf5'\n# define the checkpoint\n#filepath = \"model.hdf5\"\n#checkpoint = tf.keras.callbacks.ModelCheckpoint(filepath=filepath,  monitor='val_auc', verbose=1,  save_best_only=True, save_weights_only=True,mode='max')","metadata":{"execution":{"iopub.execute_input":"2024-12-14T18:38:09.319171Z","iopub.status.busy":"2024-12-14T18:38:09.318832Z","iopub.status.idle":"2024-12-14T18:38:09.324284Z","shell.execute_reply":"2024-12-14T18:38:09.323316Z","shell.execute_reply.started":"2024-12-14T18:38:09.319145Z"},"papermill":{"duration":0.190014,"end_time":"2022-04-05T14:54:07.912806","exception":false,"start_time":"2022-04-05T14:54:07.722792","status":"completed"},"tags":[]},"outputs":[],"execution_count":null},{"cell_type":"markdown","source":"# GroupKFold  Evaluation ","metadata":{"papermill":{"duration":0.137401,"end_time":"2022-04-05T14:54:08.188216","exception":false,"start_time":"2022-04-05T14:54:08.050815","status":"completed"},"tags":[]}},{"cell_type":"code","source":"X.shape","metadata":{"execution":{"iopub.execute_input":"2024-12-14T18:38:11.681427Z","iopub.status.busy":"2024-12-14T18:38:11.680752Z","iopub.status.idle":"2024-12-14T18:38:11.686946Z","shell.execute_reply":"2024-12-14T18:38:11.686075Z","shell.execute_reply.started":"2024-12-14T18:38:11.681393Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"y.shape","metadata":{"execution":{"iopub.execute_input":"2024-12-14T18:38:12.303768Z","iopub.status.busy":"2024-12-14T18:38:12.303076Z","iopub.status.idle":"2024-12-14T18:38:12.309559Z","shell.execute_reply":"2024-12-14T18:38:12.308515Z","shell.execute_reply.started":"2024-12-14T18:38:12.303732Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"len(groups.unique())","metadata":{"execution":{"iopub.execute_input":"2024-12-14T18:38:12.957662Z","iopub.status.busy":"2024-12-14T18:38:12.957316Z","iopub.status.idle":"2024-12-14T18:38:12.97944Z","shell.execute_reply":"2024-12-14T18:38:12.978731Z","shell.execute_reply.started":"2024-12-14T18:38:12.957633Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"%%time \n###############################################################################\n#                         CV                                                 #\n###############################################################################\nfrom sklearn import metrics\nfrom sklearn.metrics import accuracy_score, roc_auc_score, average_precision_score\nimport gc\n\n# Evaluate each strategy on the dataset\nresults = list()\n\n# Setting a 5-fold stratified cross-validation (note: shuffle=True)\nseed = 2022\nset_seed(seed)\nACC_VAL_METRICS = 'val_auc'\nACC_METRICS = 'auc'\nSEED = 2022\nFOLDS = 5\nEPOCHS = 10\n\nskf = GroupKFold(n_splits=FOLDS)\n\n# CV iterations\n# Create arrays for the features and the response variable\nroc_auc = list()\naverage_precision = list()\noof = np.empty((X.shape[0],))\npredictions = []\nf_scores = []\nmean_auc = 0\nmean_ap = 0\nmean_accuracy = 0\nF1 = list()\nRecall = list()\nbest_iteration = list()\n\nfor fold, (train_idx, test_idx) in enumerate(skf.split(X, y, groups.unique())):    \n    X_train, y_train = X[list(train_idx), :], y[list(train_idx)]\n    X_test, y_test = X[list(test_idx), :], y[list(test_idx)]\n\n    # Fit model using our GPU\n    filepath = f'my_best_model{fold}.hdf5'\n    checkpoint = tf.keras.callbacks.ModelCheckpoint(\n        filepath=filepath, \n        monitor='val_auc',\n        verbose=1, \n        save_best_only=True, \n        save_weights_only=True,\n        mode='max'\n    )\n \n    history = simple_basic_dl.fit(\n        X_train, y_train,\n        validation_data=(X_test, y_test),\n        batch_size=128, epochs=EPOCHS, \n        verbose=1, shuffle=True,\n        callbacks=[get_scheduler('val_loss'), es, checkpoint]\n    )\n\n    # Saving scores to plot at the end\n    scores = pd.DataFrame(history.history)\n    scores['folds'] = fold\n    if fold == 0:\n        f_scores = scores\n    else:\n        f_scores = pd.concat([f_scores, scores], axis=0)\n\n    # Predict on the test set\n    preds = simple_basic_dl.predict(X_test)\n    \n    # Calculate AUC and average precision\n    auc_score = roc_auc_score(y_true=y_test, y_score=preds.squeeze())\n    ap = average_precision_score(y_true=y_test, y_score=preds.squeeze())\n    \n    # Calculate accuracy\n    preds_binary = (preds.squeeze() >= 0.5).astype(int)  # Convert probabilities to binary predictions\n    accuracy = accuracy_score(y_true=y_test, y_pred=preds_binary)\n    \n    # Print results for the current fold\n    print('-' * 80) \n    plot_roc(y_test.squeeze().reshape(-1, 1).squeeze(), preds.squeeze().reshape(-1, 1).squeeze())\n    mean_auc += auc_score / FOLDS\n    mean_ap += ap / FOLDS\n    mean_accuracy += accuracy / FOLDS\n\n    predictions.append(simple_basic_dl.predict(test_data)) \n    print(f\"Fold {fold} | AUC: {colors.GREEN}{auc_score}{colors.ENDC}\")\n    print(f\"Fold {fold} | Average Precision Score: {colors.GREEN}{ap}{colors.ENDC}\")\n    print(f\"Fold {fold} | Accuracy: {colors.GREEN}{accuracy}{colors.ENDC}\")\n    \n    roc_auc.append(auc_score)\n    gc.collect()\n\n# Print overall results\nprint('-' * 80)  \nprint(f\"\\nOverall mean AUC score: {colors.RED}{mean_auc}{colors.ENDC}\")\nprint(f\"\\nOverall mean average precision score: {colors.RED}{mean_ap}{colors.ENDC}\")\nprint(f\"\\nOverall mean accuracy: {colors.RED}{mean_accuracy}{colors.ENDC}\")","metadata":{"execution":{"iopub.execute_input":"2024-12-14T18:38:14.036373Z","iopub.status.busy":"2024-12-14T18:38:14.03566Z","iopub.status.idle":"2024-12-14T19:38:15.963977Z","shell.execute_reply":"2024-12-14T19:38:15.96289Z","shell.execute_reply.started":"2024-12-14T18:38:14.036344Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"plot_acc(f_scores)","metadata":{"execution":{"iopub.execute_input":"2024-12-14T19:47:25.141933Z","iopub.status.busy":"2024-12-14T19:47:25.141569Z","iopub.status.idle":"2024-12-14T19:47:28.420195Z","shell.execute_reply":"2024-12-14T19:47:28.419276Z","shell.execute_reply.started":"2024-12-14T19:47:25.141905Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"predictions = np.mean(np.column_stack(predictions), axis=1)\n#predictions = model.predict(x_test_pre)\nprint(len(predictions))\npredictions.shape","metadata":{"execution":{"iopub.execute_input":"2024-12-14T19:47:38.794659Z","iopub.status.busy":"2024-12-14T19:47:38.793768Z","iopub.status.idle":"2024-12-14T19:47:38.808282Z","shell.execute_reply":"2024-12-14T19:47:38.807358Z","shell.execute_reply.started":"2024-12-14T19:47:38.794623Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"predictions","metadata":{"execution":{"iopub.execute_input":"2024-12-14T20:12:32.46319Z","iopub.status.busy":"2024-12-14T20:12:32.462476Z","iopub.status.idle":"2024-12-14T20:12:32.468965Z","shell.execute_reply":"2024-12-14T20:12:32.4681Z","shell.execute_reply.started":"2024-12-14T20:12:32.463156Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"predictions = np.round(predictions, 3)\npredictions","metadata":{"execution":{"iopub.execute_input":"2024-12-14T20:19:24.949094Z","iopub.status.busy":"2024-12-14T20:19:24.948758Z","iopub.status.idle":"2024-12-14T20:19:24.955916Z","shell.execute_reply":"2024-12-14T20:19:24.955056Z","shell.execute_reply.started":"2024-12-14T20:19:24.949068Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"SAMPLE_SUBMISSION = '../input/tabular-playground-series-apr-2022/sample_submission.csv'\nSUBMISSION_FILE = 'submission.csv'","metadata":{"execution":{"iopub.execute_input":"2024-12-14T20:19:29.647786Z","iopub.status.busy":"2024-12-14T20:19:29.647402Z","iopub.status.idle":"2024-12-14T20:19:29.652372Z","shell.execute_reply":"2024-12-14T20:19:29.651376Z","shell.execute_reply.started":"2024-12-14T20:19:29.647756Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"def read_data():\n    \"\"\"Reads the data sets\n    \"\"\"\n    submission = pd.read_csv(SAMPLE_SUBMISSION, index_col=INDEX)\n    \n    return submission\nsubmission = read_data()","metadata":{"execution":{"iopub.execute_input":"2024-12-14T20:19:31.076939Z","iopub.status.busy":"2024-12-14T20:19:31.07657Z","iopub.status.idle":"2024-12-14T20:19:31.099605Z","shell.execute_reply":"2024-12-14T20:19:31.098723Z","shell.execute_reply.started":"2024-12-14T20:19:31.076911Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"submission.shape","metadata":{"execution":{"iopub.execute_input":"2024-12-14T20:19:32.071624Z","iopub.status.busy":"2024-12-14T20:19:32.071025Z","iopub.status.idle":"2024-12-14T20:19:32.077113Z","shell.execute_reply":"2024-12-14T20:19:32.076225Z","shell.execute_reply.started":"2024-12-14T20:19:32.07159Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"#submission[TARGET] = np.mean(y_preds, axis=0)\nsubmission[TARGET] = predictions\nsubmission.to_csv(SUBMISSION_FILE, index=True)\nsubmission","metadata":{"execution":{"iopub.execute_input":"2024-12-14T20:19:33.447346Z","iopub.status.busy":"2024-12-14T20:19:33.447012Z","iopub.status.idle":"2024-12-14T20:19:33.47669Z","shell.execute_reply":"2024-12-14T20:19:33.475851Z","shell.execute_reply.started":"2024-12-14T20:19:33.447317Z"}},"outputs":[],"execution_count":null},{"cell_type":"code","source":"import pandas as pd\nimport numpy as np\n\n# Squeeze to ensure compatibility, keep all columns\ny_test = np.array(y_test).squeeze()  # Actual values\npreds = np.array(preds).squeeze()  # Predicted probabilities\n\n# Create DataFrame with all columns\npredictions_df = pd.DataFrame({\n    'Actual': y_test.flatten(),  # Flatten to 1D array\n    'Predicted_Labels': (preds.flatten() >= 0.5).astype(int)  # Binary predictions\n})\n\n# Display the table\npredictions_df","metadata":{"execution":{"iopub.execute_input":"2024-12-14T20:28:07.786032Z","iopub.status.busy":"2024-12-14T20:28:07.785683Z","iopub.status.idle":"2024-12-14T20:28:07.798174Z","shell.execute_reply":"2024-12-14T20:28:07.79732Z","shell.execute_reply.started":"2024-12-14T20:28:07.786003Z"}},"outputs":[],"execution_count":null}]}