diff --git "a/A3/A3_Test.ipynb" "b/A3/A3_Test.ipynb" new file mode 100644--- /dev/null +++ "b/A3/A3_Test.ipynb" @@ -0,0 +1,1812 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 1, + "id": "ebf9ad89-fceb-4097-8ca7-652640702196", + "metadata": {}, + "outputs": [], + "source": [ + "# Import all necessary libraries \n", + "import numpy as np\n", + "import pandas as pd\n", + "import matplotlib.pyplot as plt\n", + "import seaborn as sns\n", + "import os\n", + "from sklearn.model_selection import train_test_split, GridSearchCV\n", + "from sklearn.preprocessing import StandardScaler, PolynomialFeatures\n", + "from sklearn.metrics import (\n", + " accuracy_score, precision_score, recall_score, f1_score,\n", + " classification_report, confusion_matrix\n", + ")\n", + "from sklearn.linear_model import LogisticRegression\n", + "from sklearn.naive_bayes import GaussianNB\n", + "from sklearn.discriminant_analysis import LinearDiscriminantAnalysis, QuadraticDiscriminantAnalysis\n", + "from sklearn.neighbors import KNeighborsClassifier\n", + "import warnings\n", + "warnings.filterwarnings('ignore')\n", + "import pickle" + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "6d632d88-ff88-4d59-b75d-d5408b02cbcc", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Dataset 1 - Weak Link Scores:\n", + "Shape: (2096, 17)\n", + "Columns: ['ID', 'Date', 'SCORE', 'ForwardHead', 'LeftArmFallForward', 'RightArmFallForward', 'LeftShoulderElevation', 'RightShoulderElevation', 'ExcessiveForwardLean', 'LeftAsymmetricalWeightShift', 'RightAsymmetricalWeightShift', 'LeftKneeMovesInward', 'RightKneeMovesInward', 'LeftKneeMovesOutward', 'RightKneeMovesOutward', 'LeftHeelRises', 'RightHeelRises']\n", + "\n", + "First few rows:\n", + " ID Date SCORE \\\n", + "0 cf0e95ab-d6ec-475a-9cc0-c9444b8dd080.Kinect 7/19/2018 0.612532 \n", + "1 6210cc6d-575d-4e9f-bab1-4fe1da2a30a3.Kinect 7/30/2018 0.388809 \n", + "\n", + " ForwardHead LeftArmFallForward RightArmFallForward \\\n", + "0 0.31 1.34 1.15 \n", + "1 1.49 1.42 1.39 \n", + "\n", + " LeftShoulderElevation RightShoulderElevation ExcessiveForwardLean \\\n", + "0 0.33 0.49 0.00 \n", + "1 0.00 0.00 1.08 \n", + "\n", + " LeftAsymmetricalWeightShift RightAsymmetricalWeightShift \\\n", + "0 0.0 0.08 \n", + "1 0.1 0.00 \n", + "\n", + " LeftKneeMovesInward RightKneeMovesInward LeftKneeMovesOutward \\\n", + "0 0.0 0.0 0.0 \n", + "1 0.0 0.0 0.0 \n", + "\n", + " RightKneeMovesOutward LeftHeelRises RightHeelRises \n", + "0 0.77 0.0 0.0 \n", + "1 0.40 0.0 0.0 \n", + "\n", + "\n", + "\n", + "Dataset 2 - Movement Features:\n", + "Shape: (2094, 43)\n", + "Columns: ['AimoScore', 'No_1_Angle_Deviation', 'No_2_Angle_Deviation', 'No_3_Angle_Deviation', 'No_4_Angle_Deviation', 'No_5_Angle_Deviation', 'No_6_Angle_Deviation', 'No_7_Angle_Deviation', 'No_8_Angle_Deviation', 'No_9_Angle_Deviation']...\n", + "\n", + "First few rows:\n", + " AimoScore No_1_Angle_Deviation No_2_Angle_Deviation \\\n", + "0 0.323667 0.538020 0.815878 \n", + "1 0.323699 0.443807 0.306552 \n", + "\n", + " No_3_Angle_Deviation No_4_Angle_Deviation No_5_Angle_Deviation \\\n", + "0 0.346724 0.382114 0.302248 \n", + "1 0.823529 0.188905 0.497370 \n", + "\n", + " No_6_Angle_Deviation No_7_Angle_Deviation No_8_Angle_Deviation \\\n", + "0 0.947872 0.275945 0.52176 \n", + "1 0.140124 0.664275 0.52176 \n", + "\n", + " No_9_Angle_Deviation ... No_20_NASM_Deviation No_21_NASM_Deviation \\\n", + "0 0.457198 ... 0.656624 0.642276 \n", + "1 0.729316 ... 0.721186 0.826399 \n", + "\n", + " No_22_NASM_Deviation No_23_NASM_Deviation No_24_NASM_Deviation \\\n", + "0 0.552846 0.648972 0.578192 \n", + "1 0.805356 0.848876 0.889048 \n", + "\n", + " No_25_NASM_Deviation No_1_Time_Deviation No_2_Time_Deviation \\\n", + "0 0.560019 0.821616 0.818747 \n", + "1 0.816834 0.307987 0.248207 \n", + "\n", + " EstimatedScore ID \n", + "0 0.209947 0003cdcc-86ed-494a-a3b5-90d09e96e06b.Kinect \n", + "1 0.457198 003115c4-bdb8-491c-b571-8fcebdecf8ed.Kinect \n", + "\n", + "[2 rows x 43 columns]\n" + ] + } + ], + "source": [ + "# Configuration \n", + "\n", + "REPO_ROOT = os.path.abspath(os.path.join(os.getcwd(), \"..\"))\n", + "DATA_DIR = os.path.join(REPO_ROOT, \"Datasets_all\")\n", + "\n", + "# Dataset 1: New dataset with Weak link scores with 14 categories\n", + "weaklink_scores_df = pd.read_csv(os.path.join(DATA_DIR,\"scores_and_weaklink.csv\"))\n", + "\n", + "# Dataset 2: Movement features 38 features\n", + "movement_features_df = pd.read_csv(os.path.join(DATA_DIR, \"aimoscores.csv\"))\n", + "\n", + "print(\"Dataset 1 - Weak Link Scores:\")\n", + "print(f\"Shape: {weaklink_scores_df.shape}\")\n", + "print(f\"Columns: {list(weaklink_scores_df.columns)}\")\n", + "print(\"\\nFirst few rows:\")\n", + "print(weaklink_scores_df.head(2))\n", + "\n", + "print(\"\\n\\n\")\n", + "\n", + "print(\"Dataset 2 - Movement Features:\")\n", + "print(f\"Shape: {movement_features_df.shape}\")\n", + "print(f\"Columns: {list(movement_features_df.columns)[:10]}...\") \n", + "print(\"\\nFirst few rows:\")\n", + "print(movement_features_df.head(2))" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "df7685aa-319d-45e2-9b33-9e0758654626", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Weakest Link Distribution:\n", + "WeakestLink\n", + "LeftArmFallForward 629\n", + "RightArmFallForward 472\n", + "RightKneeMovesOutward 278\n", + "RightShoulderElevation 250\n", + "ForwardHead 117\n", + "ExcessiveForwardLean 100\n", + "LeftAsymmetricalWeightShift 73\n", + "LeftShoulderElevation 58\n", + "LeftKneeMovesOutward 49\n", + "RightKneeMovesInward 45\n", + "RightAsymmetricalWeightShift 19\n", + "LeftKneeMovesInward 3\n", + "LeftHeelRises 2\n", + "RightHeelRises 1\n", + "Name: count, dtype: int64\n" + ] + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABJ8AAAJOCAYAAAAZP6bBAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjgsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvwVt1zgAAAAlwSFlzAAAPYQAAD2EBqD+naQAA8vZJREFUeJzs3QeYnUX5sPFJobdQpFcVhVAFpDcBCeWPlIiAlKBIkx660kFAihSlqCCggAhKkSJVBKUXUYoiKApIByGAUnO+6558z8nsydkkwB6yu3P/rmtJsudkszu87zszzzzzzIBGo9FIkiRJkiRJUgcM7MQXlSRJkiRJkgw+SZIkSZIkqaPMfJIkSZIkSVLHGHySJEmSJElSxxh8kiRJkiRJUscYfJIkSZIkSVLHGHySJEmSJElSxxh8kiRJkiRJUscYfJIkSZIkSVLHGHySJGkS+N3vfpcGDBjQ/PjnP/85yf8/8D2U3xPfYzjssMOan59//vlTb3Duued2+X77m2uvvTatttpqaYYZZmj+jEOGDEn92bbbbtv8WVdfffVUK+6xaAfuvY+qv98rkqTez+CTJEk9EDziY/LJJ8+Bgk9+8pNprbXWSocffnh66qmnOt6+TNLje2Dy3h/UPll+8MEH04YbbphuvfXWNGrUqIn+e0svvXSzzdZbb71xXt966627tOs//vGPLq/fd999XV7/zW9+0yM/T19XtgnX5kcJ6vZEMEmSpL5m8KT+BiRJ6i/efffd/EGw4Iknnkg33XRTOvLII9PBBx+cPwYOHLvm86lPfSodf/zxzT/PNNNMaVLjeyi/J77H3uzzn/98l++3P7n00kvTO++8k38/xRRTpD333DPNMsssacoppxzv31t11VXT/fffn39/2223pdGjR3e57n7/+993eT9/Jlgabrnllubv+XsrrbRSj/1Mmnjf/va302uvvZZ/v+KKK9p0kqQ+z+CTJEk9YLPNNkvLLLNMnjAy+b/uuuvS+++/nz/IdHjuuefSGWec0Xz/PPPMk/bZZ59e0fYEORqNRpp++ul7zfc0MRZZZJH80R/961//6hJkO/bYYyfq7xF8Ovnkk/PvCYI+8MADaamllsp/Jguv/Logs2rEiBFd/hyWWGKJfE3o47f99tvb7JKkfsVtd5Ik9YB11lknB27IdLr66qvztqkFFlig+fqZZ56Za/hMTM2nN998Mx1xxBE5aDDddNOlySabLM0666xpySWXzJPS+DpRh6nMVjnvvPPaft3WrXkPPfRQ2mijjdLMM8+cM2v+8pe/jLfmU6vXX3897b333jmIRjbO0KFD0w9+8IMcxJrYLYHtttbF9/C1r32ty3vbbVua0Na8//3vf+mkk07K2Tszzjhj3hY522yz5e1oF1988Tjvb/1/wpa0008/PS2++OL5Z+T/wTe+8Y30n//8J30QBCB/8pOfpDXXXDNnL/H/k3b/whe+kH784x+n9957b5w2Oeecc5qf+8Mf/jDR2ypXWWWVLm1RZjqVgaU55phjnNf5f8e/VQaySrTH7rvvnhZeeOE0zTTTpKmmmir/fz/ggAPSSy+91LY9t9tuu3wd8+9xnU099dTp05/+dP7/yz0ysd5444208sorN9uBdowML/zpT39KX//613O2Ht/XtNNOmz73uc+lo48+Ot9PrQjC7bjjjmnBBRfM7+f/71xzzZWvlZEjR+b7obx+S3zvna5/1l3Np05co2TVxdcbNGhQvlbBdUkgc4UVVsi1xgYPHpyvWwK+22yzTbrooos68rNLkvqphiRJ+sBuvvlmoizNj3POOWec99x9991d3rP22mt3+/efeOKJ5murr756l9daPzbbbLP8vkMPPXS87yu/7mqrrdb83Oc+97nGNNNM0+V9f/zjH/N7y8/xPYby35ptttkayyyzTNt/b7fdduvSBuW/O2LEiC6v0Wbl30Xr99Dug++lu78fnn322cYiiywy3q8zfPjwxrvvvtvt/5OVV1657d9bddVVJ/o6eeONN/L7x/d98O+8/vrrbX+m1o/WNmxn6NChzfdvsskmzc/vuOOO+XPTTTddl/+fzz33XH79wQcf7PJv/fKXv2z+3csvv7wx9dRTd/t9zTXXXI1HHnmky/ex9957j/dnmXzyyRs33HBDl7/Dzxevc+3gv//9b5fraNZZZ238+c9/bv6d008/vTF48OBu/x3ag+shPP/8841PfOIT4/3ezjjjjPze8t9t9zHffPNN8P9H6zUd1+/48HXbvf/DXqPd3Sv77rtv83ODBg1qXHDBBW3/X7T7WG655Sb4c0iSFNx2J0lSh7Bdiq1LZGVE5glZMGQXdIeMi8g4ouYOGQaf+cxncmYJdaTKbKS11147Z3iwnS8KR7P1jy2A46sl9cc//jFn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uunII49Mp512Wg5ISZIkSZIkqY8En+aZZ5609tprp5/97GfpzTff7LGvy7Y6spfWWmutLp+/77770rvvvtvl8wsttFCad9550x133JH/zK+LLbZYmm222ZrvGTZsWBo1alR6+OGHe+x7lCRJkiRJUoeDT0cccUTe9jZixIgc7Nlqq63Stddem0aPHv2hv+ZFF12U7r///nTMMceM89pzzz2XJp988jRkyJAun+ff5rV4Txl4itfjtXbefvvtHJwqPyRJkiRJkjSJg0/f+ta30kMPPZQzknbaaaf0u9/9Lq233nppzjnnzLWZ7r333g/09Z566qm0xx57pAsuuCBNOeWU6eNCoGuGGWZofpDRJUmSJEmSpF5ScPxzn/tcOuGEE3Lw6IYbbshb5qjFtNxyy6WhQ4emo48+Op9ANyEEsV544YW01FJLpcGDB+cPioqfeuqp+fdkMFG36dVXX+3y9zjtbvbZZ8+/59fW0+/iz/GeVgceeGCuJxUf/BySJEmSJEnqZafdDRgwIK2yyio5+2n55ZdPjUYjPfbYY+mwww5Ln/zkJ9Omm2463iLla665ZnrwwQfTAw880PxYZpllcvHx+P1kk02WbrrppubfefTRR3Nga4UVVsh/5le+BkGsQEBs+umnz4GwdqaYYor8evkhSZIkSZKkD2Zw6qCbb745b5f71a9+lWsmUfSbbCgCR2QtkQlFBtTWW2+dbrzxxrZfY7rppkuLLrpol89NM800aeaZZ25+frvttksjR45MM800Uw4S7bbbbjngRLALFEAnyMS/c9xxx+U6TwcddFAuYk6QSZIkSZIkSX0k+PSnP/0pB5x+/vOf58LjbGv7xje+kbbZZpscfCrts88+uY4Tv34UJ510Uho4cGAaPnx4LhTOSXann3568/VBgwalq666Ku288845KEXwioLoFEeXJEmSJElSHwo+UetpqqmmShtttFEOOH3xi1/MgaHuLLLIIs3tcROLIuYlAlinnXZa/ujOfPPNl6655poP9O9IkiRJkiSplwWffvKTn6Qvf/nLadppp52o93/hC1/IH5IkSZIkSep/ejz4tO222/b0l5QkSZIkSVIf1eOn3Z166qm55lJ31l133XTGGWf09D8rSZIkSZKkGoJPZ599dj5Zrju89qMf/ain/1lJkiRJkiTVEHz6+9//nhZeeOFuX19ooYXyeyRJkiRJktT/9XjwafLJJ0/PPfdct68/++yz4z39TpIkSZIkSf1Hj0eBll9++XTuueem119/fZzXXnvttXTOOefk90iSJEmSJKn/6/HT7g499NC02mqrpSWXXDLtueeeaZFFFsmff+ihh9LJJ5+cM58uvPDCnv5nJUmSJEmSVEPwabnllktXXnll2nHHHdMee+yRBgwYkD/faDTSAgsskH7961+nFVZYoaf/WUmSJEmSJNUQfMIXv/jF9Pjjj6c//vGPzeLin/rUp9JSSy3VDEZJkiRJkiSp/+tI8AkUFV966aXzhyRJkiRJkurUseDTI488kv7xj3+k//znP3nLXattttmmU/+0JEmSJEmS+mvwiW12W221Vbr77rvbBp3A1juDT5IkSZIkSf1fjwefKDT+4IMP5pPtVllllTTjjDP29D8hSZIkSZKkWoNPt912W/rWt76Vdtttt57+0pIkSZIkSepjBvb0F5xlllnSDDPM0NNfVpIkSZIkSX1Qjwefdtppp3T++een999/v6e/tCRJkiRJkmrfdveZz3wmB56WWGKJ9PWvfz3NM888adCgQeO8b5NNNunpf1qSJEmSJEn9Pfi02WabNX+/zz77dHvanZlRkiRJkiRJ/V+PB59uvvnmnv6SkiRJkiRJ6qN6PPi02mqr9fSXlCRJkiRJUh/V48Gn8Pbbb6f7778/vfDCC2mllVbKp+BJkiRJkiSpLj1+2h1OPfXUNMccc6SVV145Fxb/85//nD//0ksv5SDUT37yk078s5IkSZIkServwadzzjkn7bnnnmmdddZJZ599dmo0Gs3XCDytscYa6aKLLurpf1aSJEmSJEk1BJ9OPPHEtOGGG6YLL7wwbbDBBuO8vvTSS6eHH364p/9ZSZIkSZIk1RB8evzxx9O6667b7eszzTRTevnll3v6n5UkSZIkSVINwachQ4bk2k7deeSRR9Lss8/e0/+sJEmSJEmSagg+rbfeeulHP/pRevXVV8d5je12P/7xj9OXvvSlnv5nJUmSJEmSVEPw6aijjkrvv/9+WnTRRdNBBx2UBgwYkM4777y01VZbpWWWWSbNOuus6ZBDDunpf1aSJEmSJEk1BJ/mnHPOdN999+XT7n7xi1/k0+5+9rOfpSuvvDJtscUW6c4778yn3kmSJEmSJKn/G9yJL0p201lnnZU/XnzxxTR69Oj0iU98Ig0c2OOxLkmSJEmSJNUWfCoRdJIkSZIkSVKdejz4dMQRR0zwPdSBOvjgg3v6n5YkSZIkSVJ/Dz4ddthh4w06UQPK4JMkSZIkSVIderwIE/WdWj/ee++99Pe//z3ttdde+cS7F154oaf/WUmSJEmSJPVCH0sFcAqNL7DAAumEE05ICy64YNptt90+jn9WkiRJkiRJk9jHfvzcqquumq655pqP+5+VJEmSJElSDcGne++9N2dCSZIkSZIkqf/r8YLjP/3pT9t+/tVXX0233npruvTSS9M3vvGNnv5nJUmSJEmSVEPwadttt+32tVlmmSUdcMAB6ZBDDunpf1aSJEmSJEk1BJ+eeOKJcT43YMCANOOMM6bpppuup/85SZIkSZIk1RR8mm+++Xr6S0qSJEmSJKmPsvK3JEmSJEmS+k7wiZPsBg0a9IE+Bg8efwLWGWeckRZffPE0/fTT548VVlgh/eY3v2m+/tZbb6VddtklzTzzzGnaaadNw4cPT88//3yXr/Hkk0+m9ddfP0099dRp1llnTfvuu2967733evrHlyRJkiRJUie33VFM/PLLL08PP/xwGjZsWPrsZz+bP//Xv/41XX/99WnRRRdNG2200Qf6mnPPPXc69thj04ILLpgajUY677zz0oYbbpj++Mc/pkUWWSTttdde6eqrr06XXHJJmmGGGdKuu+6aNtlkk3Tbbbflv//+++/nwNPss8+ebr/99vTss8+mbbbZJk022WTp6KOP7ukmkCRJkiRJUqeCT3POOWd64YUX0kMPPdQMPIW//OUvaY011sjv2X777Sf6a26wwQZd/vyd73wnZ0PdeeedOTB19tlnpwsvvDB/bZxzzjlp4YUXzq8vv/zyOej1yCOPpBtvvDHNNttsackll0xHHnlk2n///dNhhx2WJp988h766SVJkiRJktTRbXfHH398zjxqDTyBgBCvHXfccR/665PFdNFFF6U333wzb7+777770rvvvpvWWmut5nsWWmihNO+886Y77rgj/5lfF1tssRx4CmRljRo1KmdotfP222/n18sPSZIkSZIkTeLg09NPP523s3WH13jPB/Xggw/mek5TTDFF2mmnndJll12Whg4dmp577rmcuTRkyJAu7yfQxGvg1zLwFK/Ha+0cc8wxeQtffMwzzzwf+HuWJEmSJEmqXY8Hn6jpdPrpp6d///vf47xG0InXyEL6oMikeuCBB9Jdd92Vdt555zRixIi8la5TDjzwwPTaa681P5566qmO/VuSJEmSJEn9VY/XfDrppJPylrbPfOYzaeONN06f/vSn8+cfe+yxXIicguHnn3/+B/66ZDfF11p66aXTPffck0455ZS02WabpXfeeSe9+uqrXbKfOO2OAuPg17vvvrvL14vT8OI9rciw4kOSJEmSJEm9KPi08sor5+ykgw8+OG+N+9///pc/P9VUU+Wg1OGHH/6hMp9ajR49OtdlIhDFVr6bbropDR8+PL/26KOPpieffDLXhAK/UqScQuizzjpr/twNN9yQpp9++rx1T5IkSZIkSX0k+BRb7wg8ESB68cUX8+c+8YlPpIEDB37oLXDrrrtuLiL++uuv55Ptfve736Xrrrsu12Pabrvt0siRI9NMM82UA0q77bZbDjhx0h3WXnvtHGTaeuutc7Fz6jwddNBBaZdddjG7SZIkSZIkqa8FnwLBpimnnDIXCv+wgSeQsbTNNtukZ599NgebFl988Rx4+uIXv9jc6sfXJ/OJbCgyrKgtFQYNGpSuuuqqXCuKoNQ000yTa0YdccQRPfJzSpIkSZIk6WMMPt177705s+jWW2/N9Ziuv/76tMYaa6SXXnopZynttddeafXVV5/or3f22WeP93UCXKeddlr+6M58882Xrrnmmg/0c0iSJEmSJKmXnXZ3++2357pPFBjfaqut8ta7MMsss+ST4374wx/29D8rSZIkSZKkGoJP3/rWt9LCCy+cHnnkkXT00UeP8/oXvvCFXJBckiRJkiRJ/V+PB5/uueee9LWvfS0X8h4wYMA4r88111y54LckSZIkSZL6vx4PPk022WRdttq1+ve//50LkEuSJEmSJKn/6/Hg0/LLL59++ctftn3tzTffTOecc05abbXVevqflSRJkiRJUg2n3R1++OE5uLT++uunLbbYIn/uT3/6U/rHP/6RTjjhhPTiiy+mgw8+uKf/WUkTYdiRV/fadrru4PUn9bcgSZIkSeoLwaflllsuXXPNNWnnnXdO22yzTf7c3nvvnX/91Kc+lV9bfPHFe/qflSRJkiRJUn8PPjUajfT666+nFVdcMT366KPpgQceSI899liuAUXgaemll25bhFySJEmSJEn9U48Gn955550000wzpaOPPjrtt99+ackll8wfkiRJ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t77Be9V285rrG7xXbTuvub5j+l46359hhhkm+J5qgk8gk2nEiBFpmWWWScsuu2w6+eST05tvvplPv5MkSZIkSVLPqyr4tNlmm6UXX3wxHXLIIem5555LSy65ZLr22mvHKUIuSZIkSZKknlFV8AlssWu3za6vY4vgoYceOs5WQdluXnO9i/eqbec11zd4r9p2XnN9h/er7eY11zd4r9bddtWcdidJkiRJkqSP38BJ8G9KkiRJkiSpEgafJEmSJEmS1DEGnyRJkiRJktQxBp/UL1nKzLaTJEl9n2M6SeofDD71AXa6H8xLL72UBgwYYLt9SLTd6NGjP+xflyRJ+shuueWW/Ktjug/H+YOk3sbgUy917rnnpoMOOij/3k534nH85JxzzpmefPJJ2+0D+uY3v5lWWmml/PuBAwcagFLHXXfddemtt96ypfWxTsbef/99W1wfm4svvjhdfvnltvgHdOyxx6Zddtkl/exnP8t/diz8wZ91tJkm3jHHHJMOOeQQg3ZSBxl86oX++9//pt///vfp2muvTd/97nfz5+x0J85WW22VVllllbTqqqumf/3rX7bbRHrvvfdyu73wwgtpo402yp8zAKVO+vvf/57WXXfdtOeee6a3337bxtbH4tlnn02DBg3Kv//JT36S/vSnP9ny6uj1dvTRR6cf/vCHeUynibfZZpulBRdcMN+n5513Xv6cY+GJc9ddd6X7778//36HHXZIJ554opfeRJhqqqnSUUcdlY4//ngDUB8yy+6JJ55Izz//vNfbRBpd4U4Tg0+90NRTT52+853v5GDAlVdemY488sj8eTvdCWOgQtbY0KFD0+qrr56efvpp220iDB48OH35y19OJ5xwQnr88cfThhtumD9vAOrDdxymu4/fpz71qfTrX/86XXDBBWmvvfZK//vf/ybmUlVxbT366KM5ePLII4/YLhNwzz335EHx3HPPnSdl++67b/r2t7+dhgwZYtt9gGvuP//5T3r55Zdts4k0xxxz5MATAfbTTz89XXXVVbbdRHjnnXfSAgsskNtuxhlnTBdeeGE6//zz82uOhbt3+OGHpzvvvDNtsskmeTy3zTbb5LZba621vO4m4hnHYtiZZ56ZDjzwwHTccceld99913b7AFl2ZHhuvvnm6Re/+EV6/fXXbbuJmD8MHDgmFPPjH/84XX311VW0mcGnXngDk4Uy++yzp2233TYtvPDC6aKLLkonnXRSft1Od8IBgD/84Q9pjTXWyJlPw4YNcwveRLbdZJNNlj/IfCLoueWWW+bPG4Aa//0aHQedLoEUtpLFvVrjisbEthtt83//93/pkksuySvbRxxxRHrzzTcn9bfWJ3Bt/epXv0orrrhi2njjjdMKK6yQJ2lqb/nll0977LFHmm666dKOO+6YF3Z+9KMf5UnafPPNZ6B4Iq+5yy67LK2//vppmWWWSfvvv3964IEHvOTGg2ccWzyXW265XEZh1KhR+T698cYbbbcJtNvkk0+ef//HP/4x36MEj9mGx3g4rkcXeLpaZ5118hiE5x3jkJtuuin/+ayzzkpLLLFEfo9t1h7tEm3zla98JW+9IwDF/eo4buL6BxYTt9hiizx3YDGb/rZsX3U/f9h///3TYYcdlhcTWeDp7ww+9dIsFCZk++23X16p/fe//51TZul4Yac7rriBaTNuYmy//fbN7WTWgJpw2+299945G4ABMpNaAlBmQE1cPQXajtR2BisjR45M2223XbNtHbh0f92xysPkgmwUthiTiWINqPFfc3Gowre+9a28sk09FH6/884753oV6oogE1sAbr/99jTLLLOkmWeeOWfZcZ2xJUoT5957783PODIoeL4RBGB7ShSE1rjoH9jiSdDu0ksvTa+++mreekd2SixSqH3fAPrTrbfeOvcPBxxwQM6GOuWUU8yAauPBBx/Mmf5XXHFF/jMBTnYAUAOVfvbuu+9uXpOOSdrfq1x3LOoQLKYsAP3F7rvv7ha8iUAfy/ZixnG02UwzzZRefPHFnAFF4Nh5a/trDt/73vfyAiz3KWM5Mj37vYZ6nfvuu68xzTTTNH784x83/v3vfzeeeuqpxle/+tXG5z//+caxxx7bfN/o0aMn6ffZ2/zlL39pzD333I1f//rXzc/96U9/aqy88sqN+eefv/Hkk0/mz9lu47rlllsas8wyS/4Vb731VuO8887L7bbRRhs13/f+++9/DP8n+5a///3vjbXWWqvx5z//OV9jP/zhDxuLLLJI4ytf+UrzPbbbuK655prGlFNO2Tj55JMbP/nJTxqHHXZYY/LJJ29885vfbPzvf//7WP8f9iXXXntt47jjjmvssccejXfffbf5+TPOOKMxcODAxjHHHDNJv7/e5le/+lXjs5/9bO5XjzrqqMbOO+/cuP322xu77LJLY4oppmjceOON+X1lW2rcZ9zxxx/fOPLII5ufu+uuuxpLLbVUY+ONN2787ne/s8m6QZ862WST5X6B6+7qq6/O/cO6667buO6662y3Qjk2e/zxx/P44/LLL29+7oknnmisvfbajSWXXLJx0UUXtf17tfrPf/6Tx7/bbrtt41vf+lZj6qmnbrzwwguN+++/v/GpT30qj0fuvvvuSf1t9moPPvhgY7rppsv36htvvJHnXsy56Fe/+93vOo4bj9dffz33B6eeemrjv//9b74GV1pppcbss8/eGDRoUOOKK674+P5H9iFvv/12Y+utt87XVzz3Lr744saqq67a2Gmnnfpt32rwqRdo7Ti58OgsXn311ebneAjSecw555x5sqauE3oedv/4xz9yh0vAqXwPA74ZZpih8bnPfS4PXjRuMOQ3v/lN4xOf+ETj5Zdf7tKZnHLKKY0BAwY0ttlmG5utDYImq6++emPzzTfPnQjefPPNxk9/+tPG0KFDG5tttlm393ntvv71r3dpH1x66aU5ALXnnnvmwZ/GvW8Z1HFPLrHEEuMETAhAEdA7+OCDbbr/j6Dwl770pcZCCy2U242+FM8//3xj++23zwGocoD3ne98p/Hwww/bfv//mcUEdq655soLYgQ8S3fccUfuVzfddNPGDTfcYJu1cfjhhzdWXHHFLp+77bbbckCUhbEIftauHJO89tprjeeee67xyU9+shlkeu+99/KvTz/9dF4oW2655fLzrnaMNwJjXQKdjIP/+c9/dvk8cwoWsfk9Vltttcbpp5/eqF05LqMf+PSnP50X/UtHH3107jtoLxcp2mO+wJiOcQnX34Ybbtj4wQ9+kPuPDTbYIAdY1H4e8MUvfjEH1H/5y1821lhjjcaaa67Z+NrXvtZYcMEF8xi5P84dDD71AnFhsULGaiKBADoKovBlp/zYY481hgwZ0phnnnnyynfNyptx3333bXzjG9/IAShu4JEjR3Z5fdSoUY3ll18+r17wQNRYRxxxRO5Q//rXv+aB3i9+8YtxVryZeNDx0q4ai+ycQw89NN+rTMBKEYBabLHFclaUumIiwcp/mR0Wk4v9998/X29mQLV/3hEgZjWWNjrnnHPGubROOumkxswzz9x46aWXqr3sCF6Wq/wMfgkyMeEiYBJefPHFHIBiZZagE69zz8a1WLPy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yRqvtRvQ1TyZ1YfHJJ/aOmQABALqZPOQCUXGydChQ/OJdqye1a58vjORpe1Iaee5VtYtIgA1zzzz5K3Z7bYV1462IqMpFiGiNhHYhsI4pfbJa3fbd6JeIvcngZQYs5E1wfXIQkXtR4x3h+AJbUR2Hdko1KEsX6PeU3myca3K8QQZ1ywYkmkd/URcjwSgKDfB9tiyZozGIsDONkVKJLAoUZ5qR/Yn9cfK55/UyQAU81i2/zsuqcfA1GEDBw5Mf/vb39IhhxyS/3zJJZekxRdfPD3++OP5z3PNNVcaMmRIWm211dIf/vCHdOONN6ZFF100v0ZwbN11102f+cxnUo3uv//+tOWWW6aTTjopjRw5Mu24445psskmSwMGDMivL7XUUun3v/99WmihhdJvf/vbNMssszTbjTblffw+3l+rG264If3yl79M11xzTTriiCPSiBEj0r/+9a+0yiqr5Paccsop05577pkOOuigdN111+U20xjRFrTRCy+8kN56661m06ywwgpp7bXXTr/4xS/SqFGjxmmyQYMG2Yz6wF555ZX8zOK5x/2I5ZdfPn3ve99LF110UVpjjTXSyy+/nJ544onqn22jR4/u0gbPPvts/njkkUfS22+/nSaffPL07rvv5tc23XTT3IY//OEP8zNRXZ9ztNVMM82Urrrqqvy5KaaYIrchlllmmfTOO+80xzRK+bq75ZZb0rbbbpv233//dN9996WLL744j+HuuOOO3ERbb711+vrXv54effTRdNxxxzWvxVrv1XbmmWee9L///S/tsssu6YADDkg77bRT/jyfO/PMM9M000yTZp999o/5u+1daIsYT/B8W3HFFdO3v/3t9Prrr6fHHnssf/7/L6an2WabLW2//fZpvfXWy32J47mxoi2mm266dN5556Vll102bbjhhrlP4H7m/mSs/PDDD0+S/8+qz4ILLpiOP/74tOqqqzbn/qpAJyNbpHFy4hpbnFilILo5aNCg5kkesZWO7CdqPLFaobGoccJq/+yzz96YfvrpmxlhZRYZWxPLo8fNchoX9WKoP4GLLroory6efvrp+c9sIYvT7Lgea84Wa90SW2IbAMUBf/Ob33RpG1bJyBbwtCd9lOsuVsBidZvtO2Q4kcFDweJWZHbWfEoW2AIb2xMPPPDAnL0Jnm1kdm6xxRbNOlnltnW2ateelRg/P9vU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Sk899VT+80EHHZSWWGKJ9PWvfz0deuih6emnn05XXXVVGjRoUDrppJPS888/n6+7AQMG5K/BrzV66KGH0sorr5w23HDD5uduueWW9Ic//CFfb//3f/+XNt5447TDDjvkdt15553ztbfbbrtN0u9bfd97772X78t55pknvfvuu+moo45KN910U/rzn/+cpphiinTxxRenRRZZJG266abpxBNPTAsssMCk/pZ7FZ5lM888c/r1r3+dttlmm3T88cen7bffPj/PrrzyyvSvf/0r7brrrmnaaadt/p3Bg3usi+8TeK7zM//zn/9Mc8wxR/NztNkVV1yRrzFepx2vvfba9OUvfzmPSc4777w066yzptpF3/j3v/89/562mn/++dMhhxySfve73+VxHuMT7uX3338/HX744en6669Pv/3tb/M9XCPaa9lll839JmNg2uGJJ55oXn9vvvlmbkfGfXzw+xlmmCE9/vjjac4555zU336vw1yB/oGxMeNinnM77rhjfu1Pf/pT/jx9w0ILLdTl2Vgb2uKCCy7Iz6/zzz8/vfPOO83XYowcFl100dxXTDnllGnppZeeBN+tJI01gAhU6gGXXXZZDo5ceuml6bHHHsvBk3XWWSf98Ic/zK+//fbbuVN+7rnn0mSTTZYHf7UHnhjI/fjHP04/+tGP8mRrr732yp+/55570sEHH5z+9re/5clZ6ySs/Bo1KX9ugk2nnnpqWmmlldKdd96ZPv3pT6ef//zn+Vc+f8011+QB8XLLLZevtUsuuSRfdwyYaxyohJEjR+ZJGJMLMJGg/V566aUcZHrggQfSV77ylRyw+89//pNuvfXWtMEGG1TdZuo52223Xe4ruI8Jgq6xxhpp9913TyussEIOPBFQrl13z/fTTjst9wv0pfQXTHTB4gX3LJMKJms14/nOJIwgHGONr371q+mvf/1r+ulPf5rWXHPNfL2xyLP55punGWecMd1www35773++utpuummm9Tffq/wy1/+MvcTBJg++clP5jb85je/mf7yl7+k4cOHp1GjRuWgCe3HBPg3v/lN+tznPpdqRTtFkJegMEFNAnb33ntvXjykvYYMGZLva36PddddN5177rn597WOScrnXNkGLFxzvV199dV50YtgE9566638nCOActFFF1U5Bi7xzOJao//8whe+kNuP6RyBJnDN8SzkffzK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9esnLVu2lKNHj2oWZ4cOHeTQoUMycOBAnc1z48aNEhISIrGxsZoBheMbsqOIiIh8ATOfiIjors6AQq8UBJ5wwhYdHa0BKSIiX4YJEdDPDkFylA3Xr19fs50aNmwoWbJkkeXLl0uBAgVk6dKlsmTJEs3qLFmypJYao/wYAfbKlStrYOrpp59O6T+HiIiIwSciIro7A1DIGkAD3nfeeUebi2/btk0DTyy1IyJf9v7772vQCKV0v/76qwbTkdnZvHlzPZY1aNBA/Pz8dMY7BKDgwIEDmumEjCgc+1CKh6DUunXr5L777kvpP4mIiIhld0REdPeW4KG/EwNPRJSaAk/du3eXadOmSUREhMyePVvOnDkjy5Yt0ywoBJJwP8rwzPENMPMdmpBj1s/OnTvr7y1atIiBJyIi8hns+URERHdlAGr8+PHSo0cP2b59OzOeiMjnrV27Vl588UUJCwuTVq1a6X1169bVLCc0Ej937pxcuHBBA0rffPONTqiA0mLMiGc/9qEhOUrvKlWqlIJ/DRERkTv2fCIiorseS+2IKDWUDGMGu1y5cmnPuipVqkiLFi1k5cqVEhwcrI3Ec+bMKQ8//LArOIUg+4wZMyRt2rSu2fGQIYWeT0RERL6EwSciIiIiIh/qWYdgUlxcnJw/f14+/PBDCQwM1Gwm9IAaPXq0nD59Wp555hntaQdXr17V3yEiIvJVDD4REREREflQAKpbt26yadMmmTlzps7WaYeg1NatW3UWPAaciIgotWDwiYiIiIjIh+zfv18bj6N8DjPfIdCUUAkxM56IiCi1YPCJiIiIiMhHS/Bg0KBB2lyciIgotWI3QiIiIiIiH4OZ6yZPnqyldT179tSZO4mIiFIrBp+IiIiIiHw0ADV27FipXbu2BAUFpfTLISIiumUsuyMiIiIiSgX+/fdf7QNFRESU2jD4REREREREREREXsNLJ0RERERERERE5DUMPhERERERERERkdcw+ERERERERERERF7D4BMREREREREREXkNg09EREREREREROQ1DD4REREREREREZHXMPhEREREjvbCCy9I1qxZvfb8a9eulTRp0ujXW/3dRYsWeeW1ERERESUHBp+IiIgo2SxYsECDKUuXLo33WIUKFfSxyMjIeI/df//9UqNGDfE1Q4cO1dccExMjvurMmTPyxhtv6PpFkC1z5swSFBQk/fv3l2PHjiX5+b744gv9u4mIiIgSi8EnIiIiSja1atXSr1FRUfECJDt37pR06dLJhg0b3B47fPiw3szvpja1a9eWCxcu6NfkduDAAalYsaIMHz5cypYtK6NHj5bJkydL3bp15YMPPpBHH330loJPCGYRERERJVa6RC9JREREdJsKFiwoxYoVixd82rhxo1iWJU8//XS8x8zPqTX4dM8990imTJmS/f+9cuWKtGjRQk6cOKHle57rb8SIERqMultdvHhRMmTIoOufiIiIUhY/jYmIiChZIQiyZcsWzQYykO1Urlw5adSokXz//ffy77//uj2G0raaNWu67vv444+lcuXKWkJ27733Stu2bTU7ym79+vUazELJXsaMGaVw4cLSq1cvt//3erZu3Sp58+bVzKBz587d8Z5PeF6Uvu3evVuzkLJkySKFChWSMWPG3PT5Ll26JI0bN5YcOXLId999d93lFi9eLNu2bZOwsLAEA3fZs2fXAFRS1hf6Y02dOlW/x99kbgbet4kTJ+p7iYBb/vz55aWXXpLY2Fi3/xvLoXQPwUj87VgHWBdFixbV/8MzewuvC+8zlq1evbp8/vnnCa7j+fPny6BBg3RdYlm8j7h/woQJ8f5+rDs8Fh4efpM1TkRERLeLmU9ERESUrBAI+eijj+SHH35wlX0hwISeTrjFxcVpCd4DDzzgeiwwMFBy586tPyNgMnjwYGndurV07txZTp06Je+8846WtSGolTNnTl1u4cKFcv78eenatav+7o8//qjLHTlyRB+7nk2bNsnjjz8uVapUkWXLlmmAyxsQkGnYsKFmJ+FvQVNx9GEqX768BuESgkBQs2bN5KeffpKvv/5aqlatet3nX758uX597rnnEvV6ErO+EEhCn6iIiAh9Dz3h8dmzZ0uHDh0kNDRUDh48KFOmTNH3Be9j+vTpdbnXXntNA21NmjTRdY0gGb4iW8kOWVvYJvC68Hx4XXPmzJGmTZvq+nrqqafclkd5IbKd+vTpo0E6bDcIWs6bN08DaXa4L1u2bLo+iYiIyMssIiIiomS0a9cuC0OQ4cOH68///POP5efnZ82ZM0d/zp8/vzV16lT9/syZM1batGmtLl266M+//fab/jxixAi359yxY4eVLl06t/vPnz8f7/8eOXKklSZNGuvQoUOu+55//nn9/yEqKsrKnj279eSTT1oXL1686d8yZMgQ/VtOnTp13WUiIyN1GXw16tSpo/fNnTvXdd+lS5csf39/q2XLlvF+d+HChdbZs2f19/LkyWNt2bLlpq+tUqVKVo4cOazESuz66t69u74mT+vXr9f7582b53b/qlWr3O7/448/9L1q3ry523JDhw7V5fB+GD179tT78NwG1kOxYsWsokWLWlevXnVbT8WLF4/3d7z77rv6WHR0tOu+y5cv63q0/19ERETkPSy7IyIiomRVpkwZzWAxvZyQ9fL333+7ZrPDV9N0HL2grl696iobW7JkiZZsIVMIM8yZm7+/v5QqVcptpjx7xhKeH8vhudFbCpk4nvC7yL557LHH9P9B6Zk3Yea5Z5991vUzMnaqVaumZWaekA0WHBwsv/zyi5aYoYn4zaCJOzJ7Eiup68sTsqNQCtigQQO39wblkfhbzXuzZs0a7UfVrVs3t98PCQlJsLk51om9bBDP9eKLL8pvv/2mpXp2zz//fLxMNWwrKAFEppOxevVqfW329U9ERETew+ATERERJSv02UFQw/R2QqApX758UrJkyXjBJ/PVBB/27t2rwRAEmtCTyX6Ljo6WkydPuv6f33//XfsHoVcQAhZYpk6dOq5gjh3KvZ588kmpVKmSLFiwQANB3nbfffe59UuCXLlyxeuPBD179tRyQJTaoZ9SYqCn09mzZxP9epKyvhKC9wbL4b30fG/QN8u8N4cOHdKv5v028P/i77fDsgEBAQkGMO3PZaCZvSeUYaK875NPPnHdh0AU+kLVq1fvpn8XERER3T72fCIiIqJkh2DSihUrZMeOHa5+Twa+79u3rxw9elSzo9CUunjx4voYglUI2Hz55ZeSNm3aeM+LoAkgWwoZOH/99Zf2UULvHz8/P31OBFjsDc0BWU5PPPGE9nhatWqVNvT2toRePyC45gl9idBMe9SoUTJ37txEzeCGvxkZS2jEjubhN5LU9ZUQLIPAkz3DyA5BKG+7Xn+u9u3ba2YWmoyjpxb6YSHzijPhERERJQ8Gn4iIiCjZmUwmBJcQfEJmj4EyLQSDUF6GpuQIChklSpTQ4AwyXEqXLn3d50dQ69dff9Xm1Ag8GGiUnRAEtBA0QZAHM6shuGWaofuC5s2ba9kdAkEopZs+ffpNfwfZPpjJDTMDosH3jSRlfXlma9nfG2RmocH3jZq0FylSRL/u27fPLVPpzz//jJf1hWX37NkT7zlQfmh/rptBY3cEv/AeP/TQQ9rAPLGN2ImIiOj2seyOiIiIkh1mkjN9eJBdY898QuDpwQcflKlTp2rvIXu/H8wMh4yhN954I16GEH5GAMOeVWRfBt9PmjTpuq8JpXbo9YQZ5BC4wWxvvgRBocmTJ8uMGTM0O+lmWrVqpVk+mB0QvbM8oSQvLCwsyesLGVFw+vTpeL2VkEGFGec8oceTWR49tdKlSxcvgIZZ8Twh8Ij3wf76sU3MnDlTihYtKmXLlpXEwP/Xrl07LanEbHxYL2Y2RSIiIvI+Zj4RERFRskOgB0Ge9evXa7AJ2U52CEaNHz9ev7cHn5Bd8+abb2omDxpOIyMImUAHDx6UpUuXaiPqPn36aNkYlsX3CG6h/9HixYsT7Kdkh4ydlStXai+gRo0aybp16yQoKOimf8/bb78tWbJkcbsPJV0DBw6UO6lHjx7aSBxBIzT3vtHzp0+fXoNp9evXl9q1a2twCFlJuH/Xrl3aAwk9lhCcSsr6Mu9VaGioNmhH4Kpt27baH+qll16SkSNHytatWzVTC/8XekGh5A2BLATE8ufPL6+88oq+v02bNtWsJDSdR7ZZnjx53DKrBgwYoNlbeC/w/6EvFLKz8H7j9SWlbM4E79D4fPTo0Ule90RERHQbvDiTHhEREdF1vfbaa0izsWrUqBHvsSVLluhj2bJls65cuRLv8cWLF1u1atWy/Pz89BYYGGh1797d2rNnj2uZ3bt3W/Xr17eyZs1q5cmTx+rSpYu1bds2fd4PP/zQtdzzzz+vz2EXExNjlS1b1vL397f27t173b9hyJAh+nwJ3dKmTavLREZG6s/4atSpU8cqV65cvOfDaylSpIjrZ/O7CxcudFuuX79+ev+UKVOsm4mNjbVef/11q3z58laWLFmsTJkyWUFBQbr+jx8/nuT1hfcjJCTEyps3r5UmTRp93G7mzJlW5cqVrcyZM+v7h/8Xr/fYsWNuzzF48GBdv1iuXr16VnR0tJU7d27r5Zdfdnu+/fv3W61atbJy5sypr71atWrWypUr3Za53nryhHV+zz33WEeOHLnpeiMiIqI7Jw3+uZ3gFRERERHR7UJZHjKxkNlmygHvNMxmiOypNWvWeOX5iYiIKGHs+UREREREyerChQvx7ps4caJ+9Vaj959++knLAe0N1YmIiCh5MPOJiIiIiJIVmn7jhobiWbNm1VkP0dsJfaJWr159R/+vnTt3yubNm7XHVExMjBw4cECb3RMREVHyYcNxIiIiIkpWmGkOM9CNGTNGG6ibJuQoubvTFi1aJMOGDZOAgAANcDHwRERElPyY+URERERERERERF7Dnk9EREREREREROQ1DD4REREREREREZHXMPhERERERERERERew+ATERERERERERF5DYNPRERERERERETkNQw+ERERERERERGR1zD4REREREREREREXsPgExEREREREREReQ2DT0REREREREREJN7yf9PmkXM1MbNYAAAAAElFTkSuQmCC", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Define the 14 weak link categories (column names)\n", + "weaklink_categories = [\n", + " \"ForwardHead\",\n", + " \"LeftArmFallForward\", \"RightArmFallForward\",\n", + " \"LeftShoulderElevation\", \"RightShoulderElevation\",\n", + " \"ExcessiveForwardLean\",\n", + " \"LeftAsymmetricalWeightShift\", \"RightAsymmetricalWeightShift\",\n", + " \"LeftKneeMovesInward\", \"RightKneeMovesInward\",\n", + " \"LeftKneeMovesOutward\", \"RightKneeMovesOutward\",\n", + " \"LeftHeelRises\", \"RightHeelRises\",\n", + "]\n", + "\n", + "# For each row, find the column name with the maximum score\n", + "# This is our TARGET variable (what we want to predict)\n", + "weaklink_scores_df['WeakestLink'] = weaklink_scores_df[weaklink_categories].idxmax(axis=1)\n", + "\n", + "print(f\"\\nWeakest Link Distribution:\")\n", + "print(weaklink_scores_df['WeakestLink'].value_counts())\n", + "\n", + "# Visualize the distribution\n", + "plt.figure(figsize=(12, 6))\n", + "weaklink_scores_df['WeakestLink'].value_counts().plot(kind='bar', color='steelblue')\n", + "plt.title('Distribution of Weakest Links', fontsize=14, fontweight='bold')\n", + "plt.xlabel('Weak Link Category', fontsize=12)\n", + "plt.ylabel('Frequency', fontsize=12)\n", + "plt.xticks(rotation=45, ha='right')\n", + "plt.tight_layout()\n", + "plt.show()" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "dfe33797-776b-4edb-ae58-bda12d577553", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Datasets merged successfully!\n", + "Merged dataset shape: (2094, 44)\n", + "\n", + "Columns in merged dataset:\n", + "['AimoScore', 'No_1_Angle_Deviation', 'No_2_Angle_Deviation', 'No_3_Angle_Deviation', 'No_4_Angle_Deviation', 'No_5_Angle_Deviation', 'No_6_Angle_Deviation', 'No_7_Angle_Deviation', 'No_8_Angle_Deviation', 'No_9_Angle_Deviation', 'No_10_Angle_Deviation', 'No_11_Angle_Deviation', 'No_12_Angle_Deviation', 'No_13_Angle_Deviation', 'No_1_NASM_Deviation', 'No_2_NASM_Deviation', 'No_3_NASM_Deviation', 'No_4_NASM_Deviation', 'No_5_NASM_Deviation', 'No_6_NASM_Deviation', 'No_7_NASM_Deviation', 'No_8_NASM_Deviation', 'No_9_NASM_Deviation', 'No_10_NASM_Deviation', 'No_11_NASM_Deviation', 'No_12_NASM_Deviation', 'No_13_NASM_Deviation', 'No_14_NASM_Deviation', 'No_15_NASM_Deviation', 'No_16_NASM_Deviation', 'No_17_NASM_Deviation', 'No_18_NASM_Deviation', 'No_19_NASM_Deviation', 'No_20_NASM_Deviation', 'No_21_NASM_Deviation', 'No_22_NASM_Deviation', 'No_23_NASM_Deviation', 'No_24_NASM_Deviation', 'No_25_NASM_Deviation', 'No_1_Time_Deviation', 'No_2_Time_Deviation', 'EstimatedScore', 'ID', 'WeakestLink']\n", + "\n", + "First few rows:\n", + " AimoScore No_1_Angle_Deviation No_2_Angle_Deviation \\\n", + "0 0.323667 0.538020 0.815878 \n", + "1 0.323699 0.443807 0.306552 \n", + "2 0.848327 0.603539 0.373984 \n", + "3 0.351332 0.484935 0.623625 \n", + "4 0.627181 0.860832 0.657580 \n", + "\n", + " No_3_Angle_Deviation No_4_Angle_Deviation No_5_Angle_Deviation \\\n", + "0 0.346724 0.382114 0.302248 \n", + "1 0.823529 0.188905 0.497370 \n", + "2 0.346724 0.590626 0.341942 \n", + "3 0.380201 0.975132 0.509326 \n", + "4 0.745576 0.552846 0.375897 \n", + "\n", + " No_6_Angle_Deviation No_7_Angle_Deviation No_8_Angle_Deviation \\\n", + "0 0.947872 0.275945 0.521760 \n", + "1 0.140124 0.664275 0.521760 \n", + "2 0.298900 0.276901 0.623625 \n", + "3 0.888570 0.363462 0.847441 \n", + "4 0.483022 0.388331 0.521760 \n", + "\n", + " No_9_Angle_Deviation ... No_21_NASM_Deviation No_22_NASM_Deviation \\\n", + "0 0.457198 ... 0.642276 0.552846 \n", + "1 0.729316 ... 0.826399 0.805356 \n", + "2 0.658058 ... 0.642276 0.690579 \n", + "3 0.237207 ... 0.642276 0.552846 \n", + "4 0.387853 ... 0.642276 0.552846 \n", + "\n", + " No_23_NASM_Deviation No_24_NASM_Deviation No_25_NASM_Deviation \\\n", + "0 0.648972 0.578192 0.560019 \n", + "1 0.848876 0.889048 0.816834 \n", + "2 0.648972 0.578192 0.555715 \n", + "3 0.648972 0.578192 0.744620 \n", + "4 0.648972 0.578192 0.308943 \n", + "\n", + " No_1_Time_Deviation No_2_Time_Deviation EstimatedScore \\\n", + "0 0.821616 0.818747 0.209947 \n", + "1 0.307987 0.248207 0.457198 \n", + "2 0.218556 0.235294 0.107126 \n", + "3 0.458154 0.432807 0.612626 \n", + "4 0.805356 0.774271 0.153515 \n", + "\n", + " ID WeakestLink \n", + "0 0003cdcc-86ed-494a-a3b5-90d09e96e06b.Kinect RightShoulderElevation \n", + "1 003115c4-bdb8-491c-b571-8fcebdecf8ed.Kinect RightArmFallForward \n", + "2 00316bfb-ed43-489f-a55b-11c7f01c852d.Kinect LeftArmFallForward \n", + "3 00607608-6f2f-459b-a69d-e14067489459.Kinect RightShoulderElevation \n", + "4 007396ec-3463-4a05-915c-02244ff8d3de.Kinect ForwardHead \n", + "\n", + "[5 rows x 44 columns]\n", + "\n", + "Missing values:\n", + "0\n" + ] + } + ], + "source": [ + "# Keep only ID and WeakestLink from the first dataset\n", + "target_df = weaklink_scores_df[['ID', 'WeakestLink']].copy()\n", + "\n", + "# Join with movement features dataset\n", + "merged_df = movement_features_df.merge(target_df, on='ID', how='inner')\n", + "\n", + "print(f\"Datasets merged successfully!\")\n", + "print(f\"Merged dataset shape: {merged_df.shape}\")\n", + "print(f\"\\nColumns in merged dataset:\")\n", + "print(list(merged_df.columns))\n", + "print(f\"\\nFirst few rows:\")\n", + "print(merged_df.head())\n", + "\n", + "# Check for missing values\n", + "print(f\"\\nMissing values:\")\n", + "print(merged_df.isnull().sum().sum())" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "483b6227-5a06-445f-9f62-cf0ed0474d06", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Features (X) shape: (2094, 42)\n", + "Target (y) shape: (2094,)\n", + "\n", + "Number of features: 42\n", + "Feature names: ['AimoScore', 'No_1_Angle_Deviation', 'No_2_Angle_Deviation', 'No_3_Angle_Deviation', 'No_4_Angle_Deviation', 'No_5_Angle_Deviation', 'No_6_Angle_Deviation', 'No_7_Angle_Deviation', 'No_8_Angle_Deviation', 'No_9_Angle_Deviation']...\n", + "\n", + "Number of classes: 14\n", + "Classes: ['ExcessiveForwardLean', 'ForwardHead', 'LeftArmFallForward', 'LeftAsymmetricalWeightShift', 'LeftHeelRises', 'LeftKneeMovesInward', 'LeftKneeMovesOutward', 'LeftShoulderElevation', 'RightArmFallForward', 'RightAsymmetricalWeightShift', 'RightHeelRises', 'RightKneeMovesInward', 'RightKneeMovesOutward', 'RightShoulderElevation']\n" + ] + } + ], + "source": [ + "# Drop non-feature columns \n", + "exclude_from_X = ['ID', 'WeakestLink']\n", + "feature_columns = [col for col in merged_df.columns if col not in exclude_from_X]\n", + "\n", + "X = merged_df[feature_columns].copy()\n", + "y = merged_df['WeakestLink'].copy()\n", + "\n", + "print(f\"Features (X) shape: {X.shape}\")\n", + "print(f\"Target (y) shape: {y.shape}\")\n", + "print(f\"\\nNumber of features: {len(feature_columns)}\")\n", + "print(f\"Feature names: {feature_columns[:10]}...\") # Show first 10\n", + "print(f\"\\nNumber of classes: {y.nunique()}\")\n", + "print(f\"Classes: {sorted(y.unique())}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "8d6b31e8-a219-4bf4-96c8-484f25a219e1", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Training set size: 1675 samples\n", + "Testing set size: 419 samples\n", + "\n", + "Training set class distribution:\n", + "WeakestLink\n", + "LeftArmFallForward 500\n", + "RightArmFallForward 373\n", + "RightKneeMovesOutward 228\n", + "RightShoulderElevation 203\n", + "ForwardHead 91\n", + "ExcessiveForwardLean 79\n", + "LeftAsymmetricalWeightShift 57\n", + "LeftShoulderElevation 47\n", + "LeftKneeMovesOutward 40\n", + "RightKneeMovesInward 34\n", + "RightAsymmetricalWeightShift 17\n", + "LeftKneeMovesInward 3\n", + "LeftHeelRises 2\n", + "RightHeelRises 1\n", + "Name: count, dtype: int64\n" + ] + } + ], + "source": [ + "# Split the data\n", + "X_train, X_test, y_train, y_test = train_test_split(\n", + " X, y, \n", + " test_size=0.2, \n", + " random_state=42\n", + ")\n", + "\n", + "print(f\"Training set size: {X_train.shape[0]} samples\")\n", + "print(f\"Testing set size: {X_test.shape[0]} samples\")\n", + "print(f\"\\nTraining set class distribution:\")\n", + "print(y_train.value_counts())" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "94110586-d85f-4dae-8aec-20786b95b5c5", + "metadata": {}, + "outputs": [], + "source": [ + "# Standardize features (mean=0, std=1)\n", + "scaler = StandardScaler()\n", + "X_train_scaled = scaler.fit_transform(X_train)\n", + "X_test_scaled = scaler.transform(X_test)" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "f25703fc-dab7-49f0-aaf7-c38da9f44b3d", + "metadata": {}, + "outputs": [], + "source": [ + "def train_and_evaluate_variants(X_train, X_test, y_train, y_test, models_dict):\n", + " results = []\n", + " trained_models = {} \n", + " for name, model in models_dict.items():\n", + " try:\n", + " model.fit(X_train, y_train)\n", + " y_pred = model.predict(X_test)\n", + " \n", + " accuracy = accuracy_score(y_test, y_pred)\n", + " error_rate = 1 - accuracy \n", + " precision = precision_score(y_test, y_pred, average='weighted', zero_division=0)\n", + " recall = recall_score(y_test, y_pred, average='weighted', zero_division=0)\n", + " f1 = f1_score(y_test, y_pred, average='weighted', zero_division=0)\n", + " \n", + " results.append({\n", + " 'Model': name,\n", + " 'Accuracy': accuracy,\n", + " 'Error Rate': error_rate,\n", + " 'Precision': precision,\n", + " 'Recall': recall,\n", + " 'F1-Score': f1\n", + " })\n", + " trained_models[name] = model # Store trained model\n", + " except Exception as e:\n", + " print(f\"Failed to train {name}: {e}\")\n", + "\n", + " results_df = pd.DataFrame(results).sort_values('F1-Score', ascending=False)\n", + " return results_df, trained_models" + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "21eef0e4-374d-4dad-8a22-dc45f984cade", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Models defined:\n", + "Parametric: ['Logistic Regression', 'Naive Bayes', 'Linear Discriminant Analysis', 'Quadratic Discriminant Analysis']\n", + "Non-Parametric: ['KNN (k=3)', 'KNN (k=5)', 'KNN (k=7)']\n" + ] + } + ], + "source": [ + "# Train different model variants\n", + "\n", + "models_14class = {\n", + " 'Logistic Regression': LogisticRegression(max_iter=1000, random_state =42, class_weight='balanced'),\n", + " 'Naive Bayes': GaussianNB(),\n", + " 'LDA': LinearDiscriminantAnalysis(),\n", + " 'QDA': QuadraticDiscriminantAnalysis(),\n", + " 'KNN (k=5)': KNeighborsClassifier(n_neighbors=5),\n", + " 'KNN (k=7)': KNeighborsClassifier(n_neighbors=7),\n", + " 'KNN (k=10)': KNeighborsClassifier(n_neighbors=10)\n", + "}\n", + "\n", + "print(\"Models defined:\")\n", + "print(\"Parametric:\", ['Logistic Regression', 'Naive Bayes', 'Linear Discriminant Analysis', 'Quadratic Discriminant Analysis'])\n", + "print(\"Non-Parametric:\", ['KNN (k=3)', 'KNN (k=5)', 'KNN (k=7)'])" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "3313afe6-aeb0-4222-937e-de34dbe660c0", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Failed to train QDA: y has only 1 sample in class RightHeelRises, covariance is ill defined.\n", + "\n", + " Classification Performance (Baseline - 14 classes): \n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
ModelAccuracyError RatePrecisionRecallF1-Score
2LDA0.5799520.4200480.5949210.5799520.580049
0Logistic Regression0.5489260.4510740.6236110.5489260.566248
3KNN (k=5)0.5536990.4463010.5567920.5536990.546164
5KNN (k=10)0.5513130.4486870.5737100.5513130.542103
4KNN (k=7)0.5441530.4558470.5426870.5441530.538519
1Naive Bayes0.4319810.5680190.5134080.4319810.447074
\n", + "
" + ], + "text/plain": [ + " Model Accuracy Error Rate Precision Recall F1-Score\n", + "2 LDA 0.579952 0.420048 0.594921 0.579952 0.580049\n", + "0 Logistic Regression 0.548926 0.451074 0.623611 0.548926 0.566248\n", + "3 KNN (k=5) 0.553699 0.446301 0.556792 0.553699 0.546164\n", + "5 KNN (k=10) 0.551313 0.448687 0.573710 0.551313 0.542103\n", + "4 KNN (k=7) 0.544153 0.455847 0.542687 0.544153 0.538519\n", + "1 Naive Bayes 0.431981 0.568019 0.513408 0.431981 0.447074" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# 2. Call the function\n", + "results_14class_baseline, trained_14class = train_and_evaluate_variants(X_train_scaled, X_test_scaled, y_train, y_test, models_14class)\n", + "\n", + "# 3. View results\n", + "print(\"\\n Classification Performance (Baseline - 14 classes): \")\n", + "display(results_14class_baseline)" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "c6f7b43f-4ff8-41b9-bfe2-c08904770688", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "CHAMPION: LDA\n", + "F1-Score: 0.5800\n" + ] + } + ], + "source": [ + "# Identify champion\n", + "champion_14class_baseline = results_14class_baseline.iloc[0]['Model']\n", + "champion_14class_f1_baseline = results_14class_baseline.iloc[0]['F1-Score']\n", + "\n", + "print(f\"\\nCHAMPION: {champion_14class_baseline}\")\n", + "print(f\"F1-Score: {champion_14class_f1_baseline:.4f}\")" + ] + }, + { + "cell_type": "markdown", + "id": "646254ce-5de3-43cc-b62a-e29b3452222b", + "metadata": {}, + "source": [ + "### Hyperparameter tuning (14-class)" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "6cecb844-b3b1-448f-b0fa-e917e4f979d7", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Tuning Logistic Regression...\n", + " Parameters to test: {'C': [0.001, 0.01, 0.1, 1, 10, 100], 'solver': ['lbfgs', 'saga'], 'class_weight': [None, 'balanced']}\n", + "Best params: {'C': 10, 'class_weight': None, 'solver': 'lbfgs'}\n", + "CV F1-Score: 0.5968\n", + "Test F1-Score: 0.6195\n", + "Improvement: +0.0532\n", + "\n", + "Tuning LDA...\n", + " Parameters to test: {'solver': ['svd', 'lsqr', 'eigen']}\n", + "Best params: {'solver': 'svd'}\n", + "CV F1-Score: 0.5774\n", + "Test F1-Score: 0.5800\n", + "Improvement: +0.0000\n", + "\n", + "Tuning KNN (k=5)...\n", + " Parameters to test: {'n_neighbors': [3, 5, 7, 9, 11, 13], 'weights': ['uniform', 'distance'], 'metric': ['euclidean', 'manhattan']}\n", + "Best params: {'metric': 'manhattan', 'n_neighbors': 5, 'weights': 'distance'}\n", + "CV F1-Score: 0.5560\n", + "Test F1-Score: 0.5571\n", + "Improvement: +0.0110\n", + "\n", + "\n", + "Hyperparameter Tuning Results (14-class):\n", + "\n", + "\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
ModelBest ParamsCV ScoreTest AccuracyTest F1-ScoreImprovement
0Logistic Regression (Tuned){'C': 10, 'class_weight': None, 'solver': 'lbf...0.5967890.6205250.6194700.053222
1LDA (Tuned){'solver': 'svd'}0.5773700.5799520.5800490.000000
2KNN (k=5) (Tuned){'metric': 'manhattan', 'n_neighbors': 5, 'wei...0.5559570.5680190.5571330.010970
\n", + "
" + ], + "text/plain": [ + " Model \\\n", + "0 Logistic Regression (Tuned) \n", + "1 LDA (Tuned) \n", + "2 KNN (k=5) (Tuned) \n", + "\n", + " Best Params CV Score Test Accuracy \\\n", + "0 {'C': 10, 'class_weight': None, 'solver': 'lbf... 0.596789 0.620525 \n", + "1 {'solver': 'svd'} 0.577370 0.579952 \n", + "2 {'metric': 'manhattan', 'n_neighbors': 5, 'wei... 0.555957 0.568019 \n", + "\n", + " Test F1-Score Improvement \n", + "0 0.619470 0.053222 \n", + "1 0.580049 0.000000 \n", + "2 0.557133 0.010970 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Define tuning configurations for top 3 models\n", + "tuning_configs_14class = {\n", + " 'Logistic Regression': {\n", + " 'model': LogisticRegression(max_iter=1000, random_state=42, class_weight='balanced'),\n", + " 'params': {\n", + " 'C': [0.001, 0.01, 0.1, 1, 10, 100],\n", + " 'solver': ['lbfgs', 'saga'],\n", + " 'class_weight': [None, 'balanced'] \n", + " }\n", + " },\n", + " 'LDA': {\n", + " 'model': LinearDiscriminantAnalysis(),\n", + " 'params': {\n", + " 'solver': ['svd', 'lsqr', 'eigen']\n", + " }\n", + " },\n", + " 'KNN (k=5)': {\n", + " 'model': KNeighborsClassifier(),\n", + " 'params': {\n", + " 'n_neighbors': [3, 5, 7, 9, 11, 13],\n", + " 'weights': ['uniform', 'distance'],\n", + " 'metric': ['euclidean', 'manhattan']\n", + " }\n", + " }\n", + "}\n", + "\n", + "tuning_results_14class = []\n", + "best_models_14class = {}\n", + "\n", + "for name, config in tuning_configs_14class.items():\n", + " print(f\"\\nTuning {name}...\")\n", + " print(f\" Parameters to test: {config['params']}\")\n", + " \n", + " # GridSearchCV with cross-validation\n", + " grid = GridSearchCV(\n", + " config['model'],\n", + " config['params'],\n", + " cv=5, # 5-fold cross-validation\n", + " scoring='f1_weighted',\n", + " n_jobs=-1,\n", + " verbose=0\n", + " )\n", + " \n", + " # Fit with cross-validation\n", + " grid.fit(X_train_scaled, y_train)\n", + " \n", + " # Get best model\n", + " best_model = grid.best_estimator_\n", + " best_models_14class[name] = best_model\n", + " \n", + " # Evaluate on test set\n", + " y_pred = best_model.predict(X_test_scaled)\n", + " \n", + " accuracy = accuracy_score(y_test, y_pred)\n", + " f1 = f1_score(y_test, y_pred, average='weighted', zero_division=0)\n", + " \n", + " tuning_results_14class.append({\n", + " 'Model': f\"{name} (Tuned)\",\n", + " 'Best Params': str(grid.best_params_),\n", + " 'CV Score': grid.best_score_, \n", + " 'Test Accuracy': accuracy,\n", + " 'Test F1-Score': f1,\n", + " 'Improvement': f1 - results_14class_baseline[results_14class_baseline['Model']==name]['F1-Score'].values[0]\n", + " })\n", + " \n", + " print(f\"Best params: {grid.best_params_}\")\n", + " print(f\"CV F1-Score: {grid.best_score_:.4f}\")\n", + " print(f\"Test F1-Score: {f1:.4f}\")\n", + " print(f\"Improvement: {tuning_results_14class[-1]['Improvement']:+.4f}\")\n", + "\n", + "tuning_df_14class = pd.DataFrame(tuning_results_14class).sort_values('Test F1-Score', ascending=False)\n", + "\n", + "print(\"\\n\")\n", + "print(\"Hyperparameter Tuning Results (14-class):\")\n", + "print(\"\\n\")\n", + "display(tuning_df_14class)" + ] + }, + { + "cell_type": "markdown", + "id": "ef10daaa-f356-46e4-94dc-9ebc987494d5", + "metadata": {}, + "source": [ + "### Trying the alternative option (mentioned in slide 6 - Alternatively find the body region with the weakest link, e.g., upper body (shoulders and arms) vs lower body (hips and legs) )" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "9a43d212-4268-4921-8926-0ee1a017d771", + "metadata": {}, + "outputs": [], + "source": [ + "# The alternative approach was chosen because of severe class imbalance. Highest clss shows 500 labels but lowest shows only 1.\n", + "# Also quadratic discriminant analysis was not possible in previous example due to very few data points belonging to a class." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "2256f87c-6d23-4a03-a614-53cfe31916bc", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "New Class Distribution based on two Body Regions\n", + "WeakestRegion\n", + "Upper Body 1525\n", + "Lower Body 569\n", + "Name: count, dtype: int64\n", + "(2094, 45)\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
AimoScoreNo_1_Angle_DeviationNo_2_Angle_DeviationNo_3_Angle_DeviationNo_4_Angle_DeviationNo_5_Angle_DeviationNo_6_Angle_DeviationNo_7_Angle_DeviationNo_8_Angle_DeviationNo_9_Angle_Deviation...No_22_NASM_DeviationNo_23_NASM_DeviationNo_24_NASM_DeviationNo_25_NASM_DeviationNo_1_Time_DeviationNo_2_Time_DeviationEstimatedScoreIDWeakestLinkWeakestRegion
00.3236670.5380200.8158780.3467240.3821140.3022480.9478720.2759450.5217600.457198...0.5528460.6489720.5781920.5600190.8216160.8187470.2099470003cdcc-86ed-494a-a3b5-90d09e96e06b.KinectRightShoulderElevationUpper Body
10.3236990.4438070.3065520.8235290.1889050.4973700.1401240.6642750.5217600.729316...0.8053560.8488760.8890480.8168340.3079870.2482070.457198003115c4-bdb8-491c-b571-8fcebdecf8ed.KinectRightArmFallForwardUpper Body
20.8483270.6035390.3739840.3467240.5906260.3419420.2989000.2769010.6236250.658058...0.6905790.6489720.5781920.5557150.2185560.2352940.10712600316bfb-ed43-489f-a55b-11c7f01c852d.KinectLeftArmFallForwardUpper Body
\n", + "

3 rows × 45 columns

\n", + "
" + ], + "text/plain": [ + " AimoScore No_1_Angle_Deviation No_2_Angle_Deviation \\\n", + "0 0.323667 0.538020 0.815878 \n", + "1 0.323699 0.443807 0.306552 \n", + "2 0.848327 0.603539 0.373984 \n", + "\n", + " No_3_Angle_Deviation No_4_Angle_Deviation No_5_Angle_Deviation \\\n", + "0 0.346724 0.382114 0.302248 \n", + "1 0.823529 0.188905 0.497370 \n", + "2 0.346724 0.590626 0.341942 \n", + "\n", + " No_6_Angle_Deviation No_7_Angle_Deviation No_8_Angle_Deviation \\\n", + "0 0.947872 0.275945 0.521760 \n", + "1 0.140124 0.664275 0.521760 \n", + "2 0.298900 0.276901 0.623625 \n", + "\n", + " No_9_Angle_Deviation ... No_22_NASM_Deviation No_23_NASM_Deviation \\\n", + "0 0.457198 ... 0.552846 0.648972 \n", + "1 0.729316 ... 0.805356 0.848876 \n", + "2 0.658058 ... 0.690579 0.648972 \n", + "\n", + " No_24_NASM_Deviation No_25_NASM_Deviation No_1_Time_Deviation \\\n", + "0 0.578192 0.560019 0.821616 \n", + "1 0.889048 0.816834 0.307987 \n", + "2 0.578192 0.555715 0.218556 \n", + "\n", + " No_2_Time_Deviation EstimatedScore \\\n", + "0 0.818747 0.209947 \n", + "1 0.248207 0.457198 \n", + "2 0.235294 0.107126 \n", + "\n", + " ID WeakestLink \\\n", + "0 0003cdcc-86ed-494a-a3b5-90d09e96e06b.Kinect RightShoulderElevation \n", + "1 003115c4-bdb8-491c-b571-8fcebdecf8ed.Kinect RightArmFallForward \n", + "2 00316bfb-ed43-489f-a55b-11c7f01c852d.Kinect LeftArmFallForward \n", + "\n", + " WeakestRegion \n", + "0 Upper Body \n", + "1 Upper Body \n", + "2 Upper Body \n", + "\n", + "[3 rows x 45 columns]" + ] + }, + "execution_count": 14, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Define the groups as mentioned in Slide 6 into 3 distinct regions\n", + "def get_region(label):\n", + " upper = [\"ForwardHead\", \"LeftArmFallForward\", \"RightArmFallForward\", \n", + " \"LeftShoulderElevation\", \"RightShoulderElevation\"]\n", + " lower = [\"LeftKneeMovesInward\", \"RightKneeMovesInward\", \n", + " \"LeftKneeMovesOutward\", \"RightKneeMovesOutward\", \n", + " \"LeftHeelRises\", \"RightHeelRises\", \n", + " \"ExcessiveForwardLean\", \n", + " \"LeftAsymmetricalWeightShift\", \"RightAsymmetricalWeightShift\"]\n", + " \n", + " if label in upper: \n", + " return \"Upper Body\"\n", + " else: \n", + " return \"Lower Body\"\n", + "\n", + "merged_df['WeakestRegion'] = merged_df['WeakestLink'].apply(get_region)\n", + "\n", + "print(\"New Class Distribution based on two Body Regions\")\n", + "print(merged_df['WeakestRegion'].value_counts())\n", + "print(merged_df.shape)\n", + "merged_df.head(3)" + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "c556f1ac-552b-4ccb-82a1-6c3b782c3c75", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Training set: 1675 samples\n", + "Test set: 419 samples\n" + ] + } + ], + "source": [ + "# Prepare data for region wise classification\n", + "\n", + "exclude_region = ['ID', 'WeakestLink', 'WeakestRegion']\n", + "features_region = [c for c in merged_df.columns if c not in exclude_region]\n", + "\n", + "X_region = merged_df[features_region].copy()\n", + "y_region = merged_df['WeakestRegion'].copy()\n", + "\n", + "X_train_region, X_test_region, y_train_region, y_test_region = train_test_split(\n", + " X_region, y_region, test_size=0.2, random_state=42, stratify=y_region\n", + ")\n", + "\n", + "# Scaling\n", + "scaler_region = StandardScaler()\n", + "X_train_region_scaled = scaler_region.fit_transform(X_train_region)\n", + "X_test_region_scaled = scaler_region.transform(X_test_region)\n", + "\n", + "print(f\"\\nTraining set: {X_train_region.shape[0]} samples\")\n", + "print(f\"Test set: {X_test_region.shape[0]} samples\")" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "cc39415b-8dab-4af3-bd1c-830c01735921", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Final Classification Performance\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
ModelAccuracyError RatePrecisionRecallF1-Score
2LDA0.8424820.1575180.8373280.8424820.837989
6KNN (k=10)0.8329360.1670640.8265750.8329360.824195
5KNN (k=7)0.8329360.1670640.8271250.8329360.822706
4KNN (k=5)0.8257760.1742240.8185450.8257760.818477
0Logistic Regression0.8090690.1909310.8334340.8090690.815823
1Naive Bayes0.7708830.2291170.7639690.7708830.766729
3QDA0.5489260.4510740.6889260.5489260.570997
\n", + "
" + ], + "text/plain": [ + " Model Accuracy Error Rate Precision Recall F1-Score\n", + "2 LDA 0.842482 0.157518 0.837328 0.842482 0.837989\n", + "6 KNN (k=10) 0.832936 0.167064 0.826575 0.832936 0.824195\n", + "5 KNN (k=7) 0.832936 0.167064 0.827125 0.832936 0.822706\n", + "4 KNN (k=5) 0.825776 0.174224 0.818545 0.825776 0.818477\n", + "0 Logistic Regression 0.809069 0.190931 0.833434 0.809069 0.815823\n", + "1 Naive Bayes 0.770883 0.229117 0.763969 0.770883 0.766729\n", + "3 QDA 0.548926 0.451074 0.688926 0.548926 0.570997" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "models_region = {\n", + " 'Logistic Regression': LogisticRegression(max_iter=1000, random_state=42, class_weight='balanced'),\n", + " 'Naive Bayes': GaussianNB(),\n", + " 'LDA': LinearDiscriminantAnalysis(),\n", + " 'QDA': QuadraticDiscriminantAnalysis(),\n", + " 'KNN (k=5)': KNeighborsClassifier(n_neighbors=5),\n", + " 'KNN (k=7)': KNeighborsClassifier(n_neighbors=7),\n", + " 'KNN (k=10)': KNeighborsClassifier(n_neighbors=10)\n", + "}\n", + "\n", + "# Train and evaluate\n", + "results_region_baseline, trained_region = train_and_evaluate_variants(\n", + " X_train_region_scaled, X_test_region_scaled, \n", + " y_train_region, y_test_region, \n", + " models_region\n", + ")\n", + "\n", + "# 3. View results\n", + "print(\"\\nFinal Classification Performance\")\n", + "display(results_region_baseline)" + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "c291d288-2668-4c28-a731-0ccc845dc4d1", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Baseline Champion (Body Regions): LDA\n", + "F1-Score: 0.8380\n" + ] + } + ], + "source": [ + "champion_region_baseline = results_region_baseline.iloc[0]['Model']\n", + "champion_region_f1_baseline = results_region_baseline.iloc[0]['F1-Score']\n", + "print(f\"\\nBaseline Champion (Body Regions): {champion_region_baseline}\")\n", + "print(f\"F1-Score: {champion_region_f1_baseline:.4f}\")" + ] + }, + { + "cell_type": "markdown", + "id": "892d5911-e7ea-45ce-ae1b-6aaf4aff30b7", + "metadata": {}, + "source": [ + "### Hyperparameter tuning (Body regions)" + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "aafe02c6-101b-4494-8679-70c6f8c67563", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Tuning Logistic Regression...\n", + " Parameters to test: {'C': [0.01, 0.1, 1, 10, 100], 'solver': ['lbfgs', 'saga', 'newton-cg']}\n", + "Best params: {'C': 0.1, 'solver': 'lbfgs'}\n", + "CV F1-Score: 0.8290\n", + "Test F1-Score: 0.8137\n", + "Improvement: -0.0022\n", + "\n", + "Tuning LDA...\n", + " Parameters to test: {'solver': ['svd', 'lsqr', 'eigen']}\n", + "Best params: {'solver': 'svd'}\n", + "CV F1-Score: 0.8434\n", + "Test F1-Score: 0.8380\n", + "Improvement: +0.0000\n", + "\n", + "Tuning KNN (k=10)...\n", + " Parameters to test: {'n_neighbors': [7, 9, 10, 11, 13, 15], 'weights': ['uniform', 'distance'], 'metric': ['euclidean', 'manhattan', 'minkowski']}\n", + "Best params: {'metric': 'euclidean', 'n_neighbors': 10, 'weights': 'distance'}\n", + "CV F1-Score: 0.8643\n", + "Test F1-Score: 0.8335\n", + "Improvement: +0.0093\n", + "Hyperparameter Tuning Results (Body Regions):\n", + "\n", + "\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
ModelBest ParamsCV ScoreTest AccuracyTest F1-ScoreImprovement
1LDA (Tuned){'solver': 'svd'}0.8434340.8424820.8379890.00000
2KNN (k=10) (Tuned){'metric': 'euclidean', 'n_neighbors': 10, 'we...0.8642730.8448690.8335240.00933
0Logistic Regression (Tuned){'C': 0.1, 'solver': 'lbfgs'}0.8290370.8066830.813662-0.00216
\n", + "
" + ], + "text/plain": [ + " Model \\\n", + "1 LDA (Tuned) \n", + "2 KNN (k=10) (Tuned) \n", + "0 Logistic Regression (Tuned) \n", + "\n", + " Best Params CV Score Test Accuracy \\\n", + "1 {'solver': 'svd'} 0.843434 0.842482 \n", + "2 {'metric': 'euclidean', 'n_neighbors': 10, 'we... 0.864273 0.844869 \n", + "0 {'C': 0.1, 'solver': 'lbfgs'} 0.829037 0.806683 \n", + "\n", + " Test F1-Score Improvement \n", + "1 0.837989 0.00000 \n", + "2 0.833524 0.00933 \n", + "0 0.813662 -0.00216 " + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "tuning_configs_region = {\n", + " 'Logistic Regression': {\n", + " 'model': LogisticRegression(max_iter=1000, random_state=42, class_weight='balanced'),\n", + " 'params': {\n", + " 'C': [0.01, 0.1, 1, 10, 100],\n", + " 'solver': ['lbfgs', 'saga', 'newton-cg']\n", + " }\n", + " },\n", + " 'LDA': {\n", + " 'model': LinearDiscriminantAnalysis(),\n", + " 'params': {\n", + " 'solver': ['svd', 'lsqr', 'eigen']\n", + " }\n", + " },\n", + " 'KNN (k=10)': {\n", + " 'model': KNeighborsClassifier(),\n", + " 'params': {\n", + " 'n_neighbors': [7, 9, 10, 11, 13, 15],\n", + " 'weights': ['uniform', 'distance'],\n", + " 'metric': ['euclidean', 'manhattan', 'minkowski']\n", + " }\n", + " }\n", + "}\n", + "\n", + "tuning_results_region = []\n", + "best_models_region = {}\n", + "\n", + "for name, config in tuning_configs_region.items():\n", + " print(f\"\\nTuning {name}...\")\n", + " print(f\" Parameters to test: {config['params']}\")\n", + " \n", + " grid = GridSearchCV(\n", + " config['model'],\n", + " config['params'],\n", + " cv=5,\n", + " scoring='f1_weighted',\n", + " n_jobs=-1,\n", + " verbose=0\n", + " )\n", + " \n", + " grid.fit(X_train_region_scaled, y_train_region)\n", + " \n", + " best_model = grid.best_estimator_\n", + " best_models_region[name] = best_model\n", + " \n", + " y_pred = best_model.predict(X_test_region_scaled)\n", + " \n", + " accuracy = accuracy_score(y_test_region, y_pred)\n", + " f1 = f1_score(y_test_region, y_pred, average='weighted', zero_division=0)\n", + " \n", + " tuning_results_region.append({\n", + " 'Model': f\"{name} (Tuned)\",\n", + " 'Best Params': str(grid.best_params_),\n", + " 'CV Score': grid.best_score_,\n", + " 'Test Accuracy': accuracy,\n", + " 'Test F1-Score': f1,\n", + " 'Improvement': f1 - results_region_baseline[results_region_baseline['Model']==name]['F1-Score'].values[0]\n", + " })\n", + " \n", + " print(f\"Best params: {grid.best_params_}\")\n", + " print(f\"CV F1-Score: {grid.best_score_:.4f}\")\n", + " print(f\"Test F1-Score: {f1:.4f}\")\n", + " print(f\"Improvement: {tuning_results_region[-1]['Improvement']:+.4f}\")\n", + "\n", + "tuning_df_region = pd.DataFrame(tuning_results_region).sort_values('Test F1-Score', ascending=False)\n", + "\n", + "print(\"Hyperparameter Tuning Results (Body Regions):\")\n", + "print(\"\\n\")\n", + "display(tuning_df_region)" + ] + }, + { + "cell_type": "markdown", + "id": "d30296f1-afb5-45ea-9dc4-60e8e0843500", + "metadata": {}, + "source": [ + "### FEature engineering" + ] + }, + { + "cell_type": "code", + "execution_count": 19, + "id": "4080074b-fd20-4ed2-8130-84ee3c45c888", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Original features: 42\n", + "After polynomial transformation: 903\n", + "New features created: 861\n", + "\n", + "Training Logistic Regression with polynomial features...\n", + "\n", + "Polynomial Features Results:\n", + "Accuracy: 0.8496\n", + "F1-Score: 0.8498\n", + "Baseline F1: 0.8380\n", + "Improvement: +0.0119\n" + ] + } + ], + "source": [ + "# Create polynomial features\n", + "poly = PolynomialFeatures(degree=2, include_bias=False, interaction_only=True)\n", + "X_train_poly = poly.fit_transform(X_train_region)\n", + "X_test_poly = poly.transform(X_test_region)\n", + "\n", + "print(f\"Original features: {X_train_region.shape[1]}\")\n", + "print(f\"After polynomial transformation: {X_train_poly.shape[1]}\")\n", + "print(f\"New features created: {X_train_poly.shape[1] - X_train_region.shape[1]}\")\n", + "\n", + "# Scale polynomial features\n", + "scaler_poly = StandardScaler()\n", + "X_train_poly_scaled = scaler_poly.fit_transform(X_train_poly)\n", + "X_test_poly_scaled = scaler_poly.transform(X_test_poly)\n", + "\n", + "# Train champion model with polynomial features\n", + "print(f\"\\nTraining Logistic Regression with polynomial features...\")\n", + "lr_poly = LogisticRegression(max_iter=1000, random_state=42)\n", + "lr_poly.fit(X_train_poly_scaled, y_train_region)\n", + "\n", + "y_pred_poly = lr_poly.predict(X_test_poly_scaled)\n", + "poly_accuracy = accuracy_score(y_test_region, y_pred_poly)\n", + "poly_f1 = f1_score(y_test_region, y_pred_poly, average='weighted')\n", + "\n", + "print(f\"\\nPolynomial Features Results:\")\n", + "print(f\"Accuracy: {poly_accuracy:.4f}\")\n", + "print(f\"F1-Score: {poly_f1:.4f}\")\n", + "print(f\"Baseline F1: {champion_region_f1_baseline:.4f}\")\n", + "print(f\"Improvement: {poly_f1 - champion_region_f1_baseline:+.4f}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 20, + "id": "6aaac401-c2d4-43b9-aba0-45a3315fd932", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "ALL ITERATIONS RANKED BY PERFORMANCE:\n" + ] + }, + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
ApproachIterationModelF1-Score
4Body RegionsPolynomialLR + Poly Features0.849847
3Body RegionsTunedLDA (Tuned)0.837989
2Body RegionsBaselineLDA0.837989
114-ClassTunedLogistic Regression (Tuned)0.619470
014-ClassBaselineLDA0.580049
\n", + "
" + ], + "text/plain": [ + " Approach Iteration Model F1-Score\n", + "4 Body Regions Polynomial LR + Poly Features 0.849847\n", + "3 Body Regions Tuned LDA (Tuned) 0.837989\n", + "2 Body Regions Baseline LDA 0.837989\n", + "1 14-Class Tuned Logistic Regression (Tuned) 0.619470\n", + "0 14-Class Baseline LDA 0.580049" + ] + }, + "metadata": {}, + "output_type": "display_data" + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "FINAL CHAMPION MODEL\n", + "Approach: Body Regions\n", + "Iteration: Polynomial\n", + "Model: LR + Poly Features\n", + "F1-Score: 0.8498\n", + "Improvement over baseline: +0.0119\n" + ] + } + ], + "source": [ + "all_iterations = pd.DataFrame([\n", + " # 14-class approaches\n", + " {'Approach': '14-Class', 'Iteration': 'Baseline', \n", + " 'Model': champion_14class_baseline, \n", + " 'F1-Score': champion_14class_f1_baseline},\n", + " {'Approach': '14-Class', 'Iteration': 'Tuned', \n", + " 'Model': tuning_df_14class.iloc[0]['Model'], \n", + " 'F1-Score': tuning_df_14class.iloc[0]['Test F1-Score']},\n", + " \n", + " # Body region approaches\n", + " {'Approach': 'Body Regions', 'Iteration': 'Baseline', \n", + " 'Model': champion_region_baseline, \n", + " 'F1-Score': champion_region_f1_baseline},\n", + " {'Approach': 'Body Regions', 'Iteration': 'Tuned', \n", + " 'Model': tuning_df_region.iloc[0]['Model'], \n", + " 'F1-Score': tuning_df_region.iloc[0]['Test F1-Score']},\n", + " {'Approach': 'Body Regions', 'Iteration': 'Polynomial', \n", + " 'Model': 'LR + Poly Features', \n", + " 'F1-Score': poly_f1},\n", + "])\n", + "\n", + "all_iterations = all_iterations.sort_values('F1-Score', ascending=False)\n", + "\n", + "print(\"\\nALL ITERATIONS RANKED BY PERFORMANCE:\")\n", + "display(all_iterations)\n", + "\n", + "# Identify overall champion\n", + "final_champion_row = all_iterations.iloc[0]\n", + "print(\"FINAL CHAMPION MODEL\")\n", + "print(f\"Approach: {final_champion_row['Approach']}\")\n", + "print(f\"Iteration: {final_champion_row['Iteration']}\")\n", + "print(f\"Model: {final_champion_row['Model']}\")\n", + "print(f\"F1-Score: {final_champion_row['F1-Score']:.4f}\")\n", + "print(f\"Improvement over baseline: +{final_champion_row['F1-Score'] - champion_region_f1_baseline:.4f}\")" + ] + }, + { + "cell_type": "code", + "execution_count": 21, + "id": "bb170b58-c408-4db5-a262-0fc00b93ba07", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "Classification Report:\n", + "----------------------------------------------------------------------------------------------------\n", + " precision recall f1-score support\n", + "\n", + " Lower Body 0.72 0.73 0.72 114\n", + " Upper Body 0.90 0.90 0.90 305\n", + "\n", + " accuracy 0.85 419\n", + " macro avg 0.81 0.81 0.81 419\n", + "weighted avg 0.85 0.85 0.85 419\n", + "\n" + ] + }, + { + "data": { + "image/png": "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", + "text/plain": [ + "
" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# Determine which champion to use\n", + "if final_champion_row['Approach'] == 'Body Regions':\n", + " if final_champion_row['Iteration'] == 'Tuned':\n", + " final_model = best_models_region[tuning_df_region.iloc[0]['Model'].replace(' (Tuned)', '')]\n", + " X_test_final = X_test_region_scaled\n", + " y_test_final = y_test_region\n", + " elif final_champion_row['Iteration'] == 'Polynomial':\n", + " final_model = lr_poly\n", + " X_test_final = X_test_poly_scaled\n", + " y_test_final = y_test_region\n", + " else: # Baseline\n", + " final_model = trained_region[champion_region_baseline]\n", + " X_test_final = X_test_region_scaled\n", + " y_test_final = y_test_region\n", + " \n", + " classes = sorted(y_region.unique())\n", + "else: # 14-class\n", + " final_model = best_models_14class[tuning_df_14class.iloc[0]['Model'].replace(' (Tuned)', '')]\n", + " X_test_final = X_test_scaled\n", + " y_test_final = y_test\n", + " classes = sorted(y.unique())\n", + "\n", + "# Get predictions\n", + "y_pred_final = final_model.predict(X_test_final)\n", + "\n", + "# Classification report\n", + "print(\"\\nClassification Report:\")\n", + "print(\"-\"*100)\n", + "print(classification_report(y_test_final, y_pred_final, zero_division=0))\n", + "\n", + "# Confusion matrix\n", + "cm = confusion_matrix(y_test_final, y_pred_final, labels=classes)\n", + "cm_df = pd.DataFrame(cm, index=classes, columns=classes)\n", + "\n", + "plt.figure(figsize=(8, 6))\n", + "sns.heatmap(cm_df, annot=True, fmt='d', cmap='Greens', cbar_kws={'label': 'Count'})\n", + "plt.title(f'Final Champion: {final_champion_row[\"Model\"]}\\n({final_champion_row[\"Approach\"]} - {final_champion_row[\"Iteration\"]})', \n", + " fontweight='bold', fontsize=14)\n", + "plt.ylabel('Actual', fontsize=12)\n", + "plt.xlabel('Predicted', fontsize=12)\n", + "plt.tight_layout()\n", + "plt.show()\n" + ] + }, + { + "cell_type": "code", + "execution_count": 22, + "id": "b894966a-0c41-4d24-83a9-3d9eef777493", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Model saved: final_champion_model_A3.pkl\n" + ] + } + ], + "source": [ + "# Save the champion model\n", + "model_filename = 'final_champion_model_A3.pkl'\n", + "with open(model_filename, 'wb') as f:\n", + " pickle.dump(final_model, f)\n", + "print(f\"Model saved: {model_filename}\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "3410f235-b475-4d97-a5d5-25601c8fa52a", + "metadata": {}, + "outputs": [], + "source": [] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "560d3057-2d3a-4ebe-a4e6-0e125efe9270", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.11" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +}