{"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 pandas as pd\nimport numpy as np\nimport seaborn as sns\nimport matplotlib.pyplot as plt\nfrom sklearn import *\nimport glob\nimport gc\nfrom pathlib import Path","metadata":{"execution":{"iopub.status.busy":"2023-04-16T15:00:51.896104Z","iopub.execute_input":"2023-04-16T15:00:51.89672Z","iopub.status.idle":"2023-04-16T15:00:51.903995Z","shell.execute_reply.started":"2023-04-16T15:00:51.896649Z","shell.execute_reply":"2023-04-16T15:00:51.902986Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Combining tdcsfog and defog db","metadata":{}},{"cell_type":"code","source":"path=\"/kaggle/input/tlvmc-parkinsons-freezing-gait-prediction/\"\n\ntrain_defog = glob.glob(path+'train/defog/**')\ntrain_tdcsfog = glob.glob(path+'train/tdcsfog/**')","metadata":{"execution":{"iopub.status.busy":"2023-04-16T15:00:51.905715Z","iopub.execute_input":"2023-04-16T15:00:51.90687Z","iopub.status.idle":"2023-04-16T15:00:51.923682Z","shell.execute_reply.started":"2023-04-16T15:00:51.906831Z","shell.execute_reply":"2023-04-16T15:00:51.922636Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def get_data(f):\n    df = pd.read_csv(f)\n    df['Id'] = f.split('/')[-1].split('.')[0]\n    df['data_type'] = f.split('/')[-2]\n    return df","metadata":{"execution":{"iopub.status.busy":"2023-04-16T15:00:51.925094Z","iopub.execute_input":"2023-04-16T15:00:51.925687Z","iopub.status.idle":"2023-04-16T15:00:51.932113Z","shell.execute_reply.started":"2023-04-16T15:00:51.925637Z","shell.execute_reply":"2023-04-16T15:00:51.930586Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_train_defog = pd.concat([get_data(f) for f in train_defog])\ndf_train_tdcsfog = pd.concat([get_data(f) for f in train_tdcsfog])","metadata":{"execution":{"iopub.status.busy":"2023-04-16T15:00:51.934582Z","iopub.execute_input":"2023-04-16T15:00:51.935198Z","iopub.status.idle":"2023-04-16T15:01:14.506524Z","shell.execute_reply.started":"2023-04-16T15:00:51.935163Z","shell.execute_reply":"2023-04-16T15:01:14.505179Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Converting times to make dbs the same","metadata":{}},{"cell_type":"code","source":"def convert_time(df, freq):\n    if freq == 100:\n        df['Time'] /= 100\n        df['Time'] = round(df['Time'], 3)\n    elif freq == 128:\n        df['Time'] = round(df['Time'] / 128, )\n    return df","metadata":{"execution":{"iopub.status.busy":"2023-04-16T15:01:14.508068Z","iopub.execute_input":"2023-04-16T15:01:14.508411Z","iopub.status.idle":"2023-04-16T15:01:14.514971Z","shell.execute_reply.started":"2023-04-16T15:01:14.508376Z","shell.execute_reply":"2023-04-16T15:01:14.513898Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_train_defog = convert_time(df_train_defog, 100)\ndf_train_tdcsfog = convert_time(df_train_tdcsfog, 128)","metadata":{"execution":{"iopub.status.busy":"2023-04-16T15:01:14.516775Z","iopub.execute_input":"2023-04-16T15:01:14.517657Z","iopub.status.idle":"2023-04-16T15:01:14.733216Z","shell.execute_reply.started":"2023-04-16T15:01:14.517611Z","shell.execute_reply":"2023-04-16T15:01:14.732047Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"def convert_acc(df):\n    df['AccV'] *= 9.80665\n    df['AccML'] *= 9.80665\n    df['AccAP'] *= 9.80665\n    return df\n","metadata":{"execution":{"iopub.status.busy":"2023-04-16T15:01:14.734626Z","iopub.execute_input":"2023-04-16T15:01:14.735109Z","iopub.status.idle":"2023-04-16T15:01:14.739596Z","shell.execute_reply.started":"2023-04-16T15:01:14.735072Z","shell.execute_reply":"2023-04-16T15:01:14.738731Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_train_defog = convert_acc(df_train_defog)","metadata":{"execution":{"iopub.status.busy":"2023-04-16T15:01:14.740828Z","iopub.execute_input":"2023-04-16T15:01:14.741358Z","iopub.status.idle":"2023-04-16T15:01:14.980364Z","shell.execute_reply.started":"2023-04-16T15:01:14.741325Z","shell.execute_reply":"2023-04-16T15:01:14.979073Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_train=pd.concat([df_train_defog,df_train_tdcsfog])","metadata":{"execution":{"iopub.status.busy":"2023-04-16T15:01:14.981908Z","iopub.execute_input":"2023-04-16T15:01:14.982444Z","iopub.status.idle":"2023-04-16T15:01:17.492514Z","shell.execute_reply.started":"2023-04-16T15:01:14.982398Z","shell.execute_reply":"2023-04-16T15:01:17.491477Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_train.fillna(0)","metadata":{"execution":{"iopub.status.busy":"2023-04-16T15:01:17.496121Z","iopub.execute_input":"2023-04-16T15:01:17.496455Z","iopub.status.idle":"2023-04-16T15:01:31.195493Z","shell.execute_reply.started":"2023-04-16T15:01:17.496424Z","shell.execute_reply":"2023-04-16T15:01:31.194442Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"df_train['data_type'] = np.where(df_train['data_type'] != 'defog', 0, 1)","metadata":{"execution":{"iopub.status.busy":"2023-04-16T15:02:19.01381Z","iopub.execute_input":"2023-04-16T15:02:19.014907Z","iopub.status.idle":"2023-04-16T15:02:21.790715Z","shell.execute_reply.started":"2023-04-16T15:02:19.014863Z","shell.execute_reply":"2023-04-16T15:02:21.789545Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"features=['Time', 'AccV', 'AccML', 'AccAP', 'data_type']\nTargets=['StartHesitation', 'Turn' , 'Walking']","metadata":{"execution":{"iopub.status.busy":"2023-04-16T15:02:23.530912Z","iopub.execute_input":"2023-04-16T15:02:23.531307Z","iopub.status.idle":"2023-04-16T15:02:23.536685Z","shell.execute_reply.started":"2023-04-16T15:02:23.531272Z","shell.execute_reply":"2023-04-16T15:02:23.535407Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Tuning Hyperparams","metadata":{}},{"cell_type":"code","source":"# from sklearn.model_selection import RandomizedSearchCV\n# from pprint import pprint\n\n# n_estimators = [int(x) for x in np.linspace(start = 50, stop = 150, num = 5)]\n# max_depth = [int(x) for x in np.linspace(5, 15, num = 3)]\n# max_depth.append(None)\n# min_samples_split = [2, 5, 10]\n# min_samples_leaf = [1, 2, 4]\n# max_features = ['sqrt', 'log2']\n\n# random_grid = {'n_estimators': n_estimators,\n#                 'max_depth': max_depth,\n#                 'min_samples_split': min_samples_split,\n#                 'min_samples_leaf': min_samples_leaf,\n#                 'max_features': max_features\n#               }\n# pprint(random_grid)","metadata":{"execution":{"iopub.status.busy":"2023-04-16T15:01:32.623811Z","iopub.status.idle":"2023-04-16T15:01:32.624203Z","shell.execute_reply.started":"2023-04-16T15:01:32.624001Z","shell.execute_reply":"2023-04-16T15:01:32.624021Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# X, x, Y, y = model_selection.train_test_split(subset_df_train[features], subset_df_train[Targets], test_size=.30, random_state=42)","metadata":{"execution":{"iopub.status.busy":"2023-04-16T15:01:32.626019Z","iopub.status.idle":"2023-04-16T15:01:32.627024Z","shell.execute_reply.started":"2023-04-16T15:01:32.626803Z","shell.execute_reply":"2023-04-16T15:01:32.626828Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"#print(y.dtypes)","metadata":{"execution":{"iopub.status.busy":"2023-04-16T15:01:32.628221Z","iopub.status.idle":"2023-04-16T15:01:32.62861Z","shell.execute_reply.started":"2023-04-16T15:01:32.628416Z","shell.execute_reply":"2023-04-16T15:01:32.628437Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"# from sklearn.model_selection import GridSearchCV\n\n# rf = ensemble.RandomForestRegressor(random_state=42)\n\n# grid_search = GridSearchCV(rf, param_grid=random_grid, cv=5, n_jobs=-1)\n\n# grid_search.fit(X, Y)\n\n# print(\"Best hyperparameters: \", grid_search.best_params_)\n","metadata":{"execution":{"iopub.status.busy":"2023-04-16T15:01:32.629707Z","iopub.status.idle":"2023-04-16T15:01:32.630287Z","shell.execute_reply.started":"2023-04-16T15:01:32.630081Z","shell.execute_reply":"2023-04-16T15:01:32.630105Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"Best hyperparameters:  {'max_depth': 10, 'max_features': 'sqrt', 'min_samples_leaf': 1, 'min_samples_split': 2, 'n_estimators': 125}","metadata":{}},{"cell_type":"markdown","source":"# Testing ","metadata":{}},{"cell_type":"code","source":"X_train, X_valid, y_train, y_valid = model_selection.train_test_split(df_train[features], df_train[Targets], test_size=.30, random_state=42)","metadata":{"execution":{"iopub.status.busy":"2023-04-16T15:02:26.436382Z","iopub.execute_input":"2023-04-16T15:02:26.436829Z","iopub.status.idle":"2023-04-16T15:02:31.909065Z","shell.execute_reply.started":"2023-04-16T15:02:26.43678Z","shell.execute_reply":"2023-04-16T15:02:31.907892Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"code","source":"rf = ensemble.RandomForestRegressor(max_depth= 10, min_samples_leaf=1, min_samples_split=2, n_estimators=125, max_features='sqrt', random_state=42, n_jobs=-1)\nrf.fit(X_train, y_train)","metadata":{"execution":{"iopub.status.busy":"2023-04-16T15:02:31.910782Z","iopub.execute_input":"2023-04-16T15:02:31.911726Z","iopub.status.idle":"2023-04-16T15:32:02.351656Z","shell.execute_reply.started":"2023-04-16T15:02:31.911683Z","shell.execute_reply":"2023-04-16T15:32:02.350621Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Evaluation ","metadata":{}},{"cell_type":"code","source":"y_pred = rf.predict(X_valid)\nprint(metrics.average_precision_score(y_valid, y_pred.clip(0.0,1.0)))","metadata":{"execution":{"iopub.status.busy":"2023-04-16T15:32:02.352851Z","iopub.execute_input":"2023-04-16T15:32:02.353464Z","iopub.status.idle":"2023-04-16T15:32:48.32566Z","shell.execute_reply.started":"2023-04-16T15:32:02.35342Z","shell.execute_reply":"2023-04-16T15:32:48.323654Z"},"trusted":true},"execution_count":null,"outputs":[]},{"cell_type":"markdown","source":"# Submission","metadata":{}},{"cell_type":"code","source":"test_files = glob.glob(path + 'test/**/**')\nsubmissions = []\nfor file in test_files:\n    test_df = pd.read_csv(file)\n    org_time = test_df[['Time']]\n    test_df = test_df.assign(Id=file.split('/')[-1].split('.')[0])\n    if 'defog' in file:\n        test_df = test_df.assign(data_type=1)\n        test_df = convert_time(test_df, 100)\n        test_df = convert_acc(test_df)\n    else:\n        test_df = test_df.assign(data_type=0)\n        test_df = convert_time(test_df, 128)\n    results = pd.DataFrame(np.round(rf.predict(test_df[features]),3), columns=Targets)\n    df_temp = test_df[['Id']]\n    org_time = org_time.reset_index(drop=True)\n    results = results.reset_index(drop=True)\n    sub = pd.concat([org_time, results], axis=1)\n    sub = pd.concat([df_temp, sub], axis=1)\n    sub['Id'] = sub['Id'].astype(str) + '_' + sub['Time'].astype(str)\n    submissions.append(sub[['Id','StartHesitation', 'Turn' , 'Walking']])\n    \nsubmission = pd.concat(submissions)\nsubmission[['Id','StartHesitation', 'Turn' , 'Walking']].to_csv('submission.csv', index=False)","metadata":{"execution":{"iopub.status.busy":"2023-04-16T15:36:57.207209Z","iopub.execute_input":"2023-04-16T15:36:57.208465Z","iopub.status.idle":"2023-04-16T15:36:59.516696Z","shell.execute_reply.started":"2023-04-16T15:36:57.208419Z","shell.execute_reply":"2023-04-16T15:36:59.515509Z"},"trusted":true},"execution_count":null,"outputs":[]}]}