{"metadata":{"kernelspec":{"language":"python","display_name":"Python 3","name":"python3"},"language_info":{"pygments_lexer":"ipython3","nbconvert_exporter":"python","version":"3.6.4","file_extension":".py","codemirror_mode":{"name":"ipython","version":3},"name":"python","mimetype":"text/x-python"}},"nbformat_minor":4,"nbformat":4,"cells":[{"cell_type":"code","source":"import os\nimport glob\nimport numpy as np\nimport pandas as pd\nfrom sklearn.preprocessing import StandardScaler\nfrom collections import Counter\nfrom sklearn.model_selection import train_test_split\nfrom hmmlearn import hmm\nfrom sklearn.utils import resample\nfrom imblearn.under_sampling import RandomUnderSampler\n\n","metadata":{"execution":{"iopub.status.busy":"2023-06-11T14:22:46.494856Z","iopub.execute_input":"2023-06-11T14:22:46.495286Z","iopub.status.idle":"2023-06-11T14:22:48.062014Z","shell.execute_reply.started":"2023-06-11T14:22:46.495252Z","shell.execute_reply":"2023-06-11T14:22:48.060743Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#categorization\ndef Convert_binarytotest(df):\n    df_result = df.copy()\n    \n    df_result['y'] = 0\n    \n    conditions = {\n        0: ['StartHesitation', 'Turn', 'Walking'],\n        1: ['StartHesitation'],\n        2: ['Turn'],\n        3: ['Walking']\n    }\n    \n    df_result.loc[df_result['StartHesitation'] == 0, ['y']] = 0\n    for value, columns in conditions.items():\n        if value != 0:\n            df_result.loc[df_result[columns].sum(axis=1) > 0, ['y']] = value\n    \n    return df_result['y']\n","metadata":{"execution":{"iopub.status.busy":"2023-06-11T14:22:48.064580Z","iopub.execute_input":"2023-06-11T14:22:48.065427Z","iopub.status.idle":"2023-06-11T14:22:48.075779Z","shell.execute_reply.started":"2023-06-11T14:22:48.065336Z","shell.execute_reply":"2023-06-11T14:22:48.073129Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#reading csv files\ndef read_csv_files(folder_path):\n    file_paths = glob.glob(os.path.join(folder_path, '*.csv'))\n    file_list = [pd.read_csv(file_path) for file_path in file_paths]\n    return pd.concat(file_list, axis=0)","metadata":{"execution":{"iopub.status.busy":"2023-06-11T14:22:48.077848Z","iopub.execute_input":"2023-06-11T14:22:48.078486Z","iopub.status.idle":"2023-06-11T14:22:48.093806Z","shell.execute_reply.started":"2023-06-11T14:22:48.078443Z","shell.execute_reply":"2023-06-11T14:22:48.092603Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"**GaussianHMM**\n\nGaussianHMM is used for IMU data due to its ability to model sequential dependencies and handle uncertainty in sensor measurements. It captures underlying dynamics as hidden states and assumes Gaussian emissions, aligning well with IMU characteristics. This makes it effective for tasks like activity recognition and motion prediction.","metadata":{}},{"cell_type":"code","source":"#reading train data and training hmm model\ndef readcsv_and_train_hmm(defog_path, tdcsfog_path):\n    tdcsfog = read_csv_files(tdcsfog_path)\n    defog = read_csv_files(defog_path)\n\n    defog_filtered = defog[(defog['Task'] == 1) & (defog['Valid'] == 1)]\n    \n    defog_selected = defog_filtered[['Time', 'AccV', 'AccML', 'AccAP', 'StartHesitation', 'Turn', 'Walking']]\n\n\n    concated = pd.concat([tdcsfog, defog_selected], axis=0)\n    print(concated.columns)\n\n    \n    X = concated[['Time', 'AccV', 'AccML', 'AccAP']]\n    X2 = concated.drop(['Time', 'AccV', 'AccML', 'AccAP'], axis=1)\n    \n    y = Convert_binarytotest(X2)\n    X_y=pd.concat([X, y], axis=1)\n    \n    rus = RandomUnderSampler(random_state=11)\n    X_under, y_under = rus.fit_resample(X_y, y)\n    X_under = X_under[['Time', 'AccV', 'AccML', 'AccAP']]\n    \n    \n    #Train and Test Split\n    X_train, X_test, y_train, y_test = train_test_split(X_under, y_under, test_size=0.2)\n    scaler = StandardScaler()\n    X_train = scaler.fit_transform(X_train)\n    X_test = scaler.transform(X_test)\n\n    model = hmm.GaussianHMM(n_components=4, covariance_type='full', n_iter=100)\n    model.fit(X_train)\n\n    y_pred = model.predict(X_test)\n\n    cross_tab = pd.crosstab(index=y_pred, columns='count')\n    print(cross_tab)\n    \n    # Calculate accuracy\n    accuracy = (y_pred+1 == y_test).mean()  \n    print(\"Model Accuracy:\", accuracy)\n\n    return model,scaler\n","metadata":{"execution":{"iopub.status.busy":"2023-06-11T14:22:48.095957Z","iopub.execute_input":"2023-06-11T14:22:48.096487Z","iopub.status.idle":"2023-06-11T14:22:48.111258Z","shell.execute_reply.started":"2023-06-11T14:22:48.096449Z","shell.execute_reply":"2023-06-11T14:22:48.109899Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#path links\ndefog_path = '/kaggle/input/tlvmc-parkinsons-freezing-gait-prediction/train/defog'\ntdcsfog_path = '/kaggle/input/tlvmc-parkinsons-freezing-gait-prediction/train/tdcsfog'\ndefog_test_path = '/kaggle/input/tlvmc-parkinsons-freezing-gait-prediction/test/defog'\ntdcsfog_test_path = '/kaggle/input/tlvmc-parkinsons-freezing-gait-prediction/test/tdcsfog'\n\n#model training\nmodel,scaler_T = readcsv_and_train_hmm(defog_path, tdcsfog_path)","metadata":{"execution":{"iopub.status.busy":"2023-06-11T14:22:48.116360Z","iopub.execute_input":"2023-06-11T14:22:48.116735Z","iopub.status.idle":"2023-06-11T14:25:29.591248Z","shell.execute_reply.started":"2023-06-11T14:22:48.116701Z","shell.execute_reply":"2023-06-11T14:25:29.589858Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#submission file\ndef generate_submission_csv(df, filename):\n    submission = df[['Id', 'StartHesitation', 'Turn', 'Walking']].fillna(0.0)\n    submission.to_csv(filename, index=False)\n","metadata":{"execution":{"iopub.status.busy":"2023-06-11T14:25:29.593009Z","iopub.execute_input":"2023-06-11T14:25:29.594061Z","iopub.status.idle":"2023-06-11T14:25:29.600372Z","shell.execute_reply.started":"2023-06-11T14:25:29.594023Z","shell.execute_reply":"2023-06-11T14:25:29.598792Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#class to binary\ndef Convert_to_classlabels(df):\n    df_result = df.copy()\n    \n    df_result['StartHesitation'] = 0\n    df_result['Turn'] = 0\n    df_result['Walking'] = 0\n    \n    conditions = {\n        0: ['StartHesitation', 'Turn', 'Walking'],\n        1: ['StartHesitation'],\n        2: ['Turn'],\n        3: ['Walking']\n    }\n    \n    df_result.loc[df_result['pred_y'] == 0, ['StartHesitation', 'Turn', 'Walking']] = 0\n    for value, columns in conditions.items():\n        if value != 0:\n            df_result.loc[df_result['pred_y'] == value, columns] = 1\n    \n    return df_result[['StartHesitation', 'Turn', 'Walking']]\n","metadata":{"execution":{"iopub.status.busy":"2023-06-11T14:25:29.601776Z","iopub.execute_input":"2023-06-11T14:25:29.602245Z","iopub.status.idle":"2023-06-11T14:25:29.622577Z","shell.execute_reply.started":"2023-06-11T14:25:29.602212Z","shell.execute_reply":"2023-06-11T14:25:29.621461Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def read_csv_files2(folder_path):\n    folder_test_list = []\n\n    for file_name in os.listdir(folder_path):\n        if file_name.endswith('.csv'):\n            file_path = os.path.join(folder_path, file_name)\n            file = pd.read_csv(file_path)\n            file['Id'] = file_name[:-4] + '_' + file['Time'].apply(str)\n            file.Time = file.Time / (len(file) - 1)\n            folder_test_list.append(file)\n\n    folder_test_df = pd.concat(folder_test_list, axis=0)\n    return folder_test_df","metadata":{"execution":{"iopub.status.busy":"2023-06-11T14:25:29.624008Z","iopub.execute_input":"2023-06-11T14:25:29.625128Z","iopub.status.idle":"2023-06-11T14:25:29.638329Z","shell.execute_reply.started":"2023-06-11T14:25:29.625082Z","shell.execute_reply":"2023-06-11T14:25:29.637224Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#test set prediction\ndef test_set_prediction(defog_test_path, tdcsfog_test_path, model,scaler):\n    defog_test = read_csv_files2(defog_test_path)\n    tdcsfog_test = read_csv_files2(tdcsfog_test_path)\n\n    test = pd.concat([tdcsfog_test, defog_test], axis=0).reset_index(drop=True)\n    \n    test_selected =test[['Time', 'AccV', 'AccML', 'AccAP']]\n    test_X = scaler.transform(test_selected)\n    pred_y = model.predict(test_X)\n    \n    pred_y_df = pd.DataFrame({'pred_y': pred_y})\n    \n    pred_y_df_converted =Convert_to_classlabels(pred_y_df)\n    file_column_stack=test[['Id']]\n    df_combined = pd.concat([file_column_stack, pred_y_df_converted], axis=1)\n    print(df_combined)\n    \n    generate_submission_csv(df_combined, \"submission.csv\")","metadata":{"execution":{"iopub.status.busy":"2023-06-11T14:25:29.639861Z","iopub.execute_input":"2023-06-11T14:25:29.640998Z","iopub.status.idle":"2023-06-11T14:25:29.652805Z","shell.execute_reply.started":"2023-06-11T14:25:29.640953Z","shell.execute_reply":"2023-06-11T14:25:29.651599Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#test set\ntest_set_prediction(defog_test_path, tdcsfog_test_path, model,scaler_T)","metadata":{"execution":{"iopub.status.busy":"2023-06-11T14:25:29.654485Z","iopub.execute_input":"2023-06-11T14:25:29.655465Z","iopub.status.idle":"2023-06-11T14:25:31.553643Z","shell.execute_reply.started":"2023-06-11T14:25:29.655421Z","shell.execute_reply":"2023-06-11T14:25:31.552377Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"\n\n","metadata":{"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"","metadata":{},"execution_count":null,"outputs":[]}]}