Spaces:
Sleeping
Sleeping
removed estimated feature
Browse files- A3/A3_Test.ipynb +63 -757
A3/A3_Test.ipynb
CHANGED
|
@@ -307,10 +307,10 @@
|
|
| 307 |
"name": "stdout",
|
| 308 |
"output_type": "stream",
|
| 309 |
"text": [
|
| 310 |
-
"Features (X) shape: (2094,
|
| 311 |
"Target (y) shape: (2094,)\n",
|
| 312 |
"\n",
|
| 313 |
-
"Number of features:
|
| 314 |
"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",
|
| 315 |
"\n",
|
| 316 |
"Number of classes: 14\n",
|
|
@@ -320,7 +320,7 @@
|
|
| 320 |
],
|
| 321 |
"source": [
|
| 322 |
"# Drop non-feature columns \n",
|
| 323 |
-
"exclude_from_X = ['ID', 'WeakestLink']\n",
|
| 324 |
"feature_columns = [col for col in merged_df.columns if col not in exclude_from_X]\n",
|
| 325 |
"\n",
|
| 326 |
"X = merged_df[feature_columns].copy()\n",
|
|
@@ -513,56 +513,56 @@
|
|
| 513 |
" <tr>\n",
|
| 514 |
" <th>2</th>\n",
|
| 515 |
" <td>LDA</td>\n",
|
| 516 |
-
" <td>0.
|
| 517 |
-
" <td>0.
|
| 518 |
-
" <td>0.
|
| 519 |
-
" <td>0.
|
| 520 |
-
" <td>0.
|
| 521 |
" </tr>\n",
|
| 522 |
" <tr>\n",
|
| 523 |
" <th>0</th>\n",
|
| 524 |
" <td>Logistic Regression</td>\n",
|
| 525 |
-
" <td>0.
|
| 526 |
-
" <td>0.
|
| 527 |
-
" <td>0.
|
| 528 |
-
" <td>0.
|
| 529 |
-
" <td>0.
|
| 530 |
" </tr>\n",
|
| 531 |
" <tr>\n",
|
| 532 |
-
" <th>
|
| 533 |
-
" <td>KNN (k=
|
| 534 |
" <td>0.553699</td>\n",
|
| 535 |
" <td>0.446301</td>\n",
|
| 536 |
-
" <td>0.
|
| 537 |
" <td>0.553699</td>\n",
|
| 538 |
-
" <td>0.
|
| 539 |
" </tr>\n",
|
| 540 |
" <tr>\n",
|
| 541 |
" <th>5</th>\n",
|
| 542 |
" <td>KNN (k=10)</td>\n",
|
| 543 |
-
" <td>0.
|
| 544 |
-
" <td>0.
|
| 545 |
-
" <td>0.
|
| 546 |
-
" <td>0.
|
| 547 |
-
" <td>0.
|
| 548 |
" </tr>\n",
|
| 549 |
" <tr>\n",
|
| 550 |
-
" <th>
|
| 551 |
-
" <td>KNN (k=
|
| 552 |
-
" <td>0.
|
| 553 |
-
" <td>0.
|
| 554 |
-
" <td>0.
|
| 555 |
-
" <td>0.
|
| 556 |
-
" <td>0.
|
| 557 |
" </tr>\n",
|
| 558 |
" <tr>\n",
|
| 559 |
" <th>1</th>\n",
|
| 560 |
" <td>Naive Bayes</td>\n",
|
| 561 |
-
" <td>0.
|
| 562 |
-
" <td>0.
|
| 563 |
-
" <td>0.
|
| 564 |
-
" <td>0.
|
| 565 |
-
" <td>0.
|
| 566 |
" </tr>\n",
|
| 567 |
" </tbody>\n",
|
| 568 |
"</table>\n",
|
|
@@ -570,12 +570,12 @@
|
|
| 570 |
],
|
| 571 |
"text/plain": [
|
| 572 |
" Model Accuracy Error Rate Precision Recall F1-Score\n",
|
| 573 |
-
"2 LDA 0.
|
| 574 |
-
"0 Logistic Regression 0.
|
| 575 |
-
"
|
| 576 |
-
"5 KNN (k=10) 0.
|
| 577 |
-
"
|
| 578 |
-
"1 Naive Bayes 0.
|
| 579 |
]
|
| 580 |
},
|
| 581 |
"metadata": {},
|
|
@@ -603,7 +603,7 @@
|
|
| 603 |
"text": [
|
| 604 |
"\n",
|
| 605 |
"CHAMPION: LDA\n",
|
| 606 |
-
"F1-Score: 0.
|
| 607 |
]
|
| 608 |
}
|
| 609 |
],
|
|
@@ -626,7 +626,7 @@
|
|
| 626 |
},
|
| 627 |
{
|
| 628 |
"cell_type": "code",
|
| 629 |
-
"execution_count":
|
| 630 |
"id": "6cecb844-b3b1-448f-b0fa-e917e4f979d7",
|
| 631 |
"metadata": {},
|
| 632 |
"outputs": [
|
|
@@ -636,112 +636,8 @@
|
|
| 636 |
"text": [
|
| 637 |
"\n",
|
| 638 |
"Tuning Logistic Regression...\n",
|
| 639 |
-
" Parameters to test: {'C': [0.001, 0.01, 0.1, 1, 10, 100], 'solver': ['lbfgs', 'saga'], 'class_weight': [None, 'balanced']}\n"
|
| 640 |
-
"Best params: {'C': 10, 'class_weight': None, 'solver': 'lbfgs'}\n",
|
| 641 |
-
"CV F1-Score: 0.5968\n",
|
| 642 |
-
"Test F1-Score: 0.6195\n",
|
| 643 |
-
"Improvement: +0.0532\n",
|
| 644 |
-
"\n",
|
| 645 |
-
"Tuning LDA...\n",
|
| 646 |
-
" Parameters to test: {'solver': ['svd', 'lsqr', 'eigen']}\n",
|
| 647 |
-
"Best params: {'solver': 'svd'}\n",
|
| 648 |
-
"CV F1-Score: 0.5774\n",
|
| 649 |
-
"Test F1-Score: 0.5800\n",
|
| 650 |
-
"Improvement: +0.0000\n",
|
| 651 |
-
"\n",
|
| 652 |
-
"Tuning KNN (k=5)...\n",
|
| 653 |
-
" Parameters to test: {'n_neighbors': [3, 5, 7, 9, 11, 13], 'weights': ['uniform', 'distance'], 'metric': ['euclidean', 'manhattan']}\n",
|
| 654 |
-
"Best params: {'metric': 'manhattan', 'n_neighbors': 5, 'weights': 'distance'}\n",
|
| 655 |
-
"CV F1-Score: 0.5560\n",
|
| 656 |
-
"Test F1-Score: 0.5571\n",
|
| 657 |
-
"Improvement: +0.0110\n",
|
| 658 |
-
"\n",
|
| 659 |
-
"\n",
|
| 660 |
-
"Hyperparameter Tuning Results (14-class):\n",
|
| 661 |
-
"\n",
|
| 662 |
-
"\n"
|
| 663 |
]
|
| 664 |
-
},
|
| 665 |
-
{
|
| 666 |
-
"data": {
|
| 667 |
-
"text/html": [
|
| 668 |
-
"<div>\n",
|
| 669 |
-
"<style scoped>\n",
|
| 670 |
-
" .dataframe tbody tr th:only-of-type {\n",
|
| 671 |
-
" vertical-align: middle;\n",
|
| 672 |
-
" }\n",
|
| 673 |
-
"\n",
|
| 674 |
-
" .dataframe tbody tr th {\n",
|
| 675 |
-
" vertical-align: top;\n",
|
| 676 |
-
" }\n",
|
| 677 |
-
"\n",
|
| 678 |
-
" .dataframe thead th {\n",
|
| 679 |
-
" text-align: right;\n",
|
| 680 |
-
" }\n",
|
| 681 |
-
"</style>\n",
|
| 682 |
-
"<table border=\"1\" class=\"dataframe\">\n",
|
| 683 |
-
" <thead>\n",
|
| 684 |
-
" <tr style=\"text-align: right;\">\n",
|
| 685 |
-
" <th></th>\n",
|
| 686 |
-
" <th>Model</th>\n",
|
| 687 |
-
" <th>Best Params</th>\n",
|
| 688 |
-
" <th>CV Score</th>\n",
|
| 689 |
-
" <th>Test Accuracy</th>\n",
|
| 690 |
-
" <th>Test F1-Score</th>\n",
|
| 691 |
-
" <th>Improvement</th>\n",
|
| 692 |
-
" </tr>\n",
|
| 693 |
-
" </thead>\n",
|
| 694 |
-
" <tbody>\n",
|
| 695 |
-
" <tr>\n",
|
| 696 |
-
" <th>0</th>\n",
|
| 697 |
-
" <td>Logistic Regression (Tuned)</td>\n",
|
| 698 |
-
" <td>{'C': 10, 'class_weight': None, 'solver': 'lbf...</td>\n",
|
| 699 |
-
" <td>0.596789</td>\n",
|
| 700 |
-
" <td>0.620525</td>\n",
|
| 701 |
-
" <td>0.619470</td>\n",
|
| 702 |
-
" <td>0.053222</td>\n",
|
| 703 |
-
" </tr>\n",
|
| 704 |
-
" <tr>\n",
|
| 705 |
-
" <th>1</th>\n",
|
| 706 |
-
" <td>LDA (Tuned)</td>\n",
|
| 707 |
-
" <td>{'solver': 'svd'}</td>\n",
|
| 708 |
-
" <td>0.577370</td>\n",
|
| 709 |
-
" <td>0.579952</td>\n",
|
| 710 |
-
" <td>0.580049</td>\n",
|
| 711 |
-
" <td>0.000000</td>\n",
|
| 712 |
-
" </tr>\n",
|
| 713 |
-
" <tr>\n",
|
| 714 |
-
" <th>2</th>\n",
|
| 715 |
-
" <td>KNN (k=5) (Tuned)</td>\n",
|
| 716 |
-
" <td>{'metric': 'manhattan', 'n_neighbors': 5, 'wei...</td>\n",
|
| 717 |
-
" <td>0.555957</td>\n",
|
| 718 |
-
" <td>0.568019</td>\n",
|
| 719 |
-
" <td>0.557133</td>\n",
|
| 720 |
-
" <td>0.010970</td>\n",
|
| 721 |
-
" </tr>\n",
|
| 722 |
-
" </tbody>\n",
|
| 723 |
-
"</table>\n",
|
| 724 |
-
"</div>"
|
| 725 |
-
],
|
| 726 |
-
"text/plain": [
|
| 727 |
-
" Model \\\n",
|
| 728 |
-
"0 Logistic Regression (Tuned) \n",
|
| 729 |
-
"1 LDA (Tuned) \n",
|
| 730 |
-
"2 KNN (k=5) (Tuned) \n",
|
| 731 |
-
"\n",
|
| 732 |
-
" Best Params CV Score Test Accuracy \\\n",
|
| 733 |
-
"0 {'C': 10, 'class_weight': None, 'solver': 'lbf... 0.596789 0.620525 \n",
|
| 734 |
-
"1 {'solver': 'svd'} 0.577370 0.579952 \n",
|
| 735 |
-
"2 {'metric': 'manhattan', 'n_neighbors': 5, 'wei... 0.555957 0.568019 \n",
|
| 736 |
-
"\n",
|
| 737 |
-
" Test F1-Score Improvement \n",
|
| 738 |
-
"0 0.619470 0.053222 \n",
|
| 739 |
-
"1 0.580049 0.000000 \n",
|
| 740 |
-
"2 0.557133 0.010970 "
|
| 741 |
-
]
|
| 742 |
-
},
|
| 743 |
-
"metadata": {},
|
| 744 |
-
"output_type": "display_data"
|
| 745 |
}
|
| 746 |
],
|
| 747 |
"source": [
|
|
@@ -833,7 +729,7 @@
|
|
| 833 |
},
|
| 834 |
{
|
| 835 |
"cell_type": "code",
|
| 836 |
-
"execution_count":
|
| 837 |
"id": "9a43d212-4268-4921-8926-0ee1a017d771",
|
| 838 |
"metadata": {},
|
| 839 |
"outputs": [],
|
|
@@ -844,193 +740,10 @@
|
|
| 844 |
},
|
| 845 |
{
|
| 846 |
"cell_type": "code",
|
| 847 |
-
"execution_count":
|
| 848 |
"id": "2256f87c-6d23-4a03-a614-53cfe31916bc",
|
| 849 |
"metadata": {},
|
| 850 |
-
"outputs": [
|
| 851 |
-
{
|
| 852 |
-
"name": "stdout",
|
| 853 |
-
"output_type": "stream",
|
| 854 |
-
"text": [
|
| 855 |
-
"New Class Distribution based on two Body Regions\n",
|
| 856 |
-
"WeakestRegion\n",
|
| 857 |
-
"Upper Body 1525\n",
|
| 858 |
-
"Lower Body 569\n",
|
| 859 |
-
"Name: count, dtype: int64\n",
|
| 860 |
-
"(2094, 45)\n"
|
| 861 |
-
]
|
| 862 |
-
},
|
| 863 |
-
{
|
| 864 |
-
"data": {
|
| 865 |
-
"text/html": [
|
| 866 |
-
"<div>\n",
|
| 867 |
-
"<style scoped>\n",
|
| 868 |
-
" .dataframe tbody tr th:only-of-type {\n",
|
| 869 |
-
" vertical-align: middle;\n",
|
| 870 |
-
" }\n",
|
| 871 |
-
"\n",
|
| 872 |
-
" .dataframe tbody tr th {\n",
|
| 873 |
-
" vertical-align: top;\n",
|
| 874 |
-
" }\n",
|
| 875 |
-
"\n",
|
| 876 |
-
" .dataframe thead th {\n",
|
| 877 |
-
" text-align: right;\n",
|
| 878 |
-
" }\n",
|
| 879 |
-
"</style>\n",
|
| 880 |
-
"<table border=\"1\" class=\"dataframe\">\n",
|
| 881 |
-
" <thead>\n",
|
| 882 |
-
" <tr style=\"text-align: right;\">\n",
|
| 883 |
-
" <th></th>\n",
|
| 884 |
-
" <th>AimoScore</th>\n",
|
| 885 |
-
" <th>No_1_Angle_Deviation</th>\n",
|
| 886 |
-
" <th>No_2_Angle_Deviation</th>\n",
|
| 887 |
-
" <th>No_3_Angle_Deviation</th>\n",
|
| 888 |
-
" <th>No_4_Angle_Deviation</th>\n",
|
| 889 |
-
" <th>No_5_Angle_Deviation</th>\n",
|
| 890 |
-
" <th>No_6_Angle_Deviation</th>\n",
|
| 891 |
-
" <th>No_7_Angle_Deviation</th>\n",
|
| 892 |
-
" <th>No_8_Angle_Deviation</th>\n",
|
| 893 |
-
" <th>No_9_Angle_Deviation</th>\n",
|
| 894 |
-
" <th>...</th>\n",
|
| 895 |
-
" <th>No_22_NASM_Deviation</th>\n",
|
| 896 |
-
" <th>No_23_NASM_Deviation</th>\n",
|
| 897 |
-
" <th>No_24_NASM_Deviation</th>\n",
|
| 898 |
-
" <th>No_25_NASM_Deviation</th>\n",
|
| 899 |
-
" <th>No_1_Time_Deviation</th>\n",
|
| 900 |
-
" <th>No_2_Time_Deviation</th>\n",
|
| 901 |
-
" <th>EstimatedScore</th>\n",
|
| 902 |
-
" <th>ID</th>\n",
|
| 903 |
-
" <th>WeakestLink</th>\n",
|
| 904 |
-
" <th>WeakestRegion</th>\n",
|
| 905 |
-
" </tr>\n",
|
| 906 |
-
" </thead>\n",
|
| 907 |
-
" <tbody>\n",
|
| 908 |
-
" <tr>\n",
|
| 909 |
-
" <th>0</th>\n",
|
| 910 |
-
" <td>0.323667</td>\n",
|
| 911 |
-
" <td>0.538020</td>\n",
|
| 912 |
-
" <td>0.815878</td>\n",
|
| 913 |
-
" <td>0.346724</td>\n",
|
| 914 |
-
" <td>0.382114</td>\n",
|
| 915 |
-
" <td>0.302248</td>\n",
|
| 916 |
-
" <td>0.947872</td>\n",
|
| 917 |
-
" <td>0.275945</td>\n",
|
| 918 |
-
" <td>0.521760</td>\n",
|
| 919 |
-
" <td>0.457198</td>\n",
|
| 920 |
-
" <td>...</td>\n",
|
| 921 |
-
" <td>0.552846</td>\n",
|
| 922 |
-
" <td>0.648972</td>\n",
|
| 923 |
-
" <td>0.578192</td>\n",
|
| 924 |
-
" <td>0.560019</td>\n",
|
| 925 |
-
" <td>0.821616</td>\n",
|
| 926 |
-
" <td>0.818747</td>\n",
|
| 927 |
-
" <td>0.209947</td>\n",
|
| 928 |
-
" <td>0003cdcc-86ed-494a-a3b5-90d09e96e06b.Kinect</td>\n",
|
| 929 |
-
" <td>RightShoulderElevation</td>\n",
|
| 930 |
-
" <td>Upper Body</td>\n",
|
| 931 |
-
" </tr>\n",
|
| 932 |
-
" <tr>\n",
|
| 933 |
-
" <th>1</th>\n",
|
| 934 |
-
" <td>0.323699</td>\n",
|
| 935 |
-
" <td>0.443807</td>\n",
|
| 936 |
-
" <td>0.306552</td>\n",
|
| 937 |
-
" <td>0.823529</td>\n",
|
| 938 |
-
" <td>0.188905</td>\n",
|
| 939 |
-
" <td>0.497370</td>\n",
|
| 940 |
-
" <td>0.140124</td>\n",
|
| 941 |
-
" <td>0.664275</td>\n",
|
| 942 |
-
" <td>0.521760</td>\n",
|
| 943 |
-
" <td>0.729316</td>\n",
|
| 944 |
-
" <td>...</td>\n",
|
| 945 |
-
" <td>0.805356</td>\n",
|
| 946 |
-
" <td>0.848876</td>\n",
|
| 947 |
-
" <td>0.889048</td>\n",
|
| 948 |
-
" <td>0.816834</td>\n",
|
| 949 |
-
" <td>0.307987</td>\n",
|
| 950 |
-
" <td>0.248207</td>\n",
|
| 951 |
-
" <td>0.457198</td>\n",
|
| 952 |
-
" <td>003115c4-bdb8-491c-b571-8fcebdecf8ed.Kinect</td>\n",
|
| 953 |
-
" <td>RightArmFallForward</td>\n",
|
| 954 |
-
" <td>Upper Body</td>\n",
|
| 955 |
-
" </tr>\n",
|
| 956 |
-
" <tr>\n",
|
| 957 |
-
" <th>2</th>\n",
|
| 958 |
-
" <td>0.848327</td>\n",
|
| 959 |
-
" <td>0.603539</td>\n",
|
| 960 |
-
" <td>0.373984</td>\n",
|
| 961 |
-
" <td>0.346724</td>\n",
|
| 962 |
-
" <td>0.590626</td>\n",
|
| 963 |
-
" <td>0.341942</td>\n",
|
| 964 |
-
" <td>0.298900</td>\n",
|
| 965 |
-
" <td>0.276901</td>\n",
|
| 966 |
-
" <td>0.623625</td>\n",
|
| 967 |
-
" <td>0.658058</td>\n",
|
| 968 |
-
" <td>...</td>\n",
|
| 969 |
-
" <td>0.690579</td>\n",
|
| 970 |
-
" <td>0.648972</td>\n",
|
| 971 |
-
" <td>0.578192</td>\n",
|
| 972 |
-
" <td>0.555715</td>\n",
|
| 973 |
-
" <td>0.218556</td>\n",
|
| 974 |
-
" <td>0.235294</td>\n",
|
| 975 |
-
" <td>0.107126</td>\n",
|
| 976 |
-
" <td>00316bfb-ed43-489f-a55b-11c7f01c852d.Kinect</td>\n",
|
| 977 |
-
" <td>LeftArmFallForward</td>\n",
|
| 978 |
-
" <td>Upper Body</td>\n",
|
| 979 |
-
" </tr>\n",
|
| 980 |
-
" </tbody>\n",
|
| 981 |
-
"</table>\n",
|
| 982 |
-
"<p>3 rows × 45 columns</p>\n",
|
| 983 |
-
"</div>"
|
| 984 |
-
],
|
| 985 |
-
"text/plain": [
|
| 986 |
-
" AimoScore No_1_Angle_Deviation No_2_Angle_Deviation \\\n",
|
| 987 |
-
"0 0.323667 0.538020 0.815878 \n",
|
| 988 |
-
"1 0.323699 0.443807 0.306552 \n",
|
| 989 |
-
"2 0.848327 0.603539 0.373984 \n",
|
| 990 |
-
"\n",
|
| 991 |
-
" No_3_Angle_Deviation No_4_Angle_Deviation No_5_Angle_Deviation \\\n",
|
| 992 |
-
"0 0.346724 0.382114 0.302248 \n",
|
| 993 |
-
"1 0.823529 0.188905 0.497370 \n",
|
| 994 |
-
"2 0.346724 0.590626 0.341942 \n",
|
| 995 |
-
"\n",
|
| 996 |
-
" No_6_Angle_Deviation No_7_Angle_Deviation No_8_Angle_Deviation \\\n",
|
| 997 |
-
"0 0.947872 0.275945 0.521760 \n",
|
| 998 |
-
"1 0.140124 0.664275 0.521760 \n",
|
| 999 |
-
"2 0.298900 0.276901 0.623625 \n",
|
| 1000 |
-
"\n",
|
| 1001 |
-
" No_9_Angle_Deviation ... No_22_NASM_Deviation No_23_NASM_Deviation \\\n",
|
| 1002 |
-
"0 0.457198 ... 0.552846 0.648972 \n",
|
| 1003 |
-
"1 0.729316 ... 0.805356 0.848876 \n",
|
| 1004 |
-
"2 0.658058 ... 0.690579 0.648972 \n",
|
| 1005 |
-
"\n",
|
| 1006 |
-
" No_24_NASM_Deviation No_25_NASM_Deviation No_1_Time_Deviation \\\n",
|
| 1007 |
-
"0 0.578192 0.560019 0.821616 \n",
|
| 1008 |
-
"1 0.889048 0.816834 0.307987 \n",
|
| 1009 |
-
"2 0.578192 0.555715 0.218556 \n",
|
| 1010 |
-
"\n",
|
| 1011 |
-
" No_2_Time_Deviation EstimatedScore \\\n",
|
| 1012 |
-
"0 0.818747 0.209947 \n",
|
| 1013 |
-
"1 0.248207 0.457198 \n",
|
| 1014 |
-
"2 0.235294 0.107126 \n",
|
| 1015 |
-
"\n",
|
| 1016 |
-
" ID WeakestLink \\\n",
|
| 1017 |
-
"0 0003cdcc-86ed-494a-a3b5-90d09e96e06b.Kinect RightShoulderElevation \n",
|
| 1018 |
-
"1 003115c4-bdb8-491c-b571-8fcebdecf8ed.Kinect RightArmFallForward \n",
|
| 1019 |
-
"2 00316bfb-ed43-489f-a55b-11c7f01c852d.Kinect LeftArmFallForward \n",
|
| 1020 |
-
"\n",
|
| 1021 |
-
" WeakestRegion \n",
|
| 1022 |
-
"0 Upper Body \n",
|
| 1023 |
-
"1 Upper Body \n",
|
| 1024 |
-
"2 Upper Body \n",
|
| 1025 |
-
"\n",
|
| 1026 |
-
"[3 rows x 45 columns]"
|
| 1027 |
-
]
|
| 1028 |
-
},
|
| 1029 |
-
"execution_count": 14,
|
| 1030 |
-
"metadata": {},
|
| 1031 |
-
"output_type": "execute_result"
|
| 1032 |
-
}
|
| 1033 |
-
],
|
| 1034 |
"source": [
|
| 1035 |
"# Define the groups as mentioned in Slide 6 into 3 distinct regions\n",
|
| 1036 |
"def get_region(label):\n",
|
|
@@ -1057,24 +770,14 @@
|
|
| 1057 |
},
|
| 1058 |
{
|
| 1059 |
"cell_type": "code",
|
| 1060 |
-
"execution_count":
|
| 1061 |
"id": "c556f1ac-552b-4ccb-82a1-6c3b782c3c75",
|
| 1062 |
"metadata": {},
|
| 1063 |
-
"outputs": [
|
| 1064 |
-
{
|
| 1065 |
-
"name": "stdout",
|
| 1066 |
-
"output_type": "stream",
|
| 1067 |
-
"text": [
|
| 1068 |
-
"\n",
|
| 1069 |
-
"Training set: 1675 samples\n",
|
| 1070 |
-
"Test set: 419 samples\n"
|
| 1071 |
-
]
|
| 1072 |
-
}
|
| 1073 |
-
],
|
| 1074 |
"source": [
|
| 1075 |
"# Prepare data for region wise classification\n",
|
| 1076 |
"\n",
|
| 1077 |
-
"exclude_region = ['ID', 'WeakestLink', 'WeakestRegion']\n",
|
| 1078 |
"features_region = [c for c in merged_df.columns if c not in exclude_region]\n",
|
| 1079 |
"\n",
|
| 1080 |
"X_region = merged_df[features_region].copy()\n",
|
|
@@ -1095,130 +798,10 @@
|
|
| 1095 |
},
|
| 1096 |
{
|
| 1097 |
"cell_type": "code",
|
| 1098 |
-
"execution_count":
|
| 1099 |
"id": "cc39415b-8dab-4af3-bd1c-830c01735921",
|
| 1100 |
"metadata": {},
|
| 1101 |
-
"outputs": [
|
| 1102 |
-
{
|
| 1103 |
-
"name": "stdout",
|
| 1104 |
-
"output_type": "stream",
|
| 1105 |
-
"text": [
|
| 1106 |
-
"\n",
|
| 1107 |
-
"Final Classification Performance\n"
|
| 1108 |
-
]
|
| 1109 |
-
},
|
| 1110 |
-
{
|
| 1111 |
-
"data": {
|
| 1112 |
-
"text/html": [
|
| 1113 |
-
"<div>\n",
|
| 1114 |
-
"<style scoped>\n",
|
| 1115 |
-
" .dataframe tbody tr th:only-of-type {\n",
|
| 1116 |
-
" vertical-align: middle;\n",
|
| 1117 |
-
" }\n",
|
| 1118 |
-
"\n",
|
| 1119 |
-
" .dataframe tbody tr th {\n",
|
| 1120 |
-
" vertical-align: top;\n",
|
| 1121 |
-
" }\n",
|
| 1122 |
-
"\n",
|
| 1123 |
-
" .dataframe thead th {\n",
|
| 1124 |
-
" text-align: right;\n",
|
| 1125 |
-
" }\n",
|
| 1126 |
-
"</style>\n",
|
| 1127 |
-
"<table border=\"1\" class=\"dataframe\">\n",
|
| 1128 |
-
" <thead>\n",
|
| 1129 |
-
" <tr style=\"text-align: right;\">\n",
|
| 1130 |
-
" <th></th>\n",
|
| 1131 |
-
" <th>Model</th>\n",
|
| 1132 |
-
" <th>Accuracy</th>\n",
|
| 1133 |
-
" <th>Error Rate</th>\n",
|
| 1134 |
-
" <th>Precision</th>\n",
|
| 1135 |
-
" <th>Recall</th>\n",
|
| 1136 |
-
" <th>F1-Score</th>\n",
|
| 1137 |
-
" </tr>\n",
|
| 1138 |
-
" </thead>\n",
|
| 1139 |
-
" <tbody>\n",
|
| 1140 |
-
" <tr>\n",
|
| 1141 |
-
" <th>2</th>\n",
|
| 1142 |
-
" <td>LDA</td>\n",
|
| 1143 |
-
" <td>0.842482</td>\n",
|
| 1144 |
-
" <td>0.157518</td>\n",
|
| 1145 |
-
" <td>0.837328</td>\n",
|
| 1146 |
-
" <td>0.842482</td>\n",
|
| 1147 |
-
" <td>0.837989</td>\n",
|
| 1148 |
-
" </tr>\n",
|
| 1149 |
-
" <tr>\n",
|
| 1150 |
-
" <th>6</th>\n",
|
| 1151 |
-
" <td>KNN (k=10)</td>\n",
|
| 1152 |
-
" <td>0.832936</td>\n",
|
| 1153 |
-
" <td>0.167064</td>\n",
|
| 1154 |
-
" <td>0.826575</td>\n",
|
| 1155 |
-
" <td>0.832936</td>\n",
|
| 1156 |
-
" <td>0.824195</td>\n",
|
| 1157 |
-
" </tr>\n",
|
| 1158 |
-
" <tr>\n",
|
| 1159 |
-
" <th>5</th>\n",
|
| 1160 |
-
" <td>KNN (k=7)</td>\n",
|
| 1161 |
-
" <td>0.832936</td>\n",
|
| 1162 |
-
" <td>0.167064</td>\n",
|
| 1163 |
-
" <td>0.827125</td>\n",
|
| 1164 |
-
" <td>0.832936</td>\n",
|
| 1165 |
-
" <td>0.822706</td>\n",
|
| 1166 |
-
" </tr>\n",
|
| 1167 |
-
" <tr>\n",
|
| 1168 |
-
" <th>4</th>\n",
|
| 1169 |
-
" <td>KNN (k=5)</td>\n",
|
| 1170 |
-
" <td>0.825776</td>\n",
|
| 1171 |
-
" <td>0.174224</td>\n",
|
| 1172 |
-
" <td>0.818545</td>\n",
|
| 1173 |
-
" <td>0.825776</td>\n",
|
| 1174 |
-
" <td>0.818477</td>\n",
|
| 1175 |
-
" </tr>\n",
|
| 1176 |
-
" <tr>\n",
|
| 1177 |
-
" <th>0</th>\n",
|
| 1178 |
-
" <td>Logistic Regression</td>\n",
|
| 1179 |
-
" <td>0.809069</td>\n",
|
| 1180 |
-
" <td>0.190931</td>\n",
|
| 1181 |
-
" <td>0.833434</td>\n",
|
| 1182 |
-
" <td>0.809069</td>\n",
|
| 1183 |
-
" <td>0.815823</td>\n",
|
| 1184 |
-
" </tr>\n",
|
| 1185 |
-
" <tr>\n",
|
| 1186 |
-
" <th>1</th>\n",
|
| 1187 |
-
" <td>Naive Bayes</td>\n",
|
| 1188 |
-
" <td>0.770883</td>\n",
|
| 1189 |
-
" <td>0.229117</td>\n",
|
| 1190 |
-
" <td>0.763969</td>\n",
|
| 1191 |
-
" <td>0.770883</td>\n",
|
| 1192 |
-
" <td>0.766729</td>\n",
|
| 1193 |
-
" </tr>\n",
|
| 1194 |
-
" <tr>\n",
|
| 1195 |
-
" <th>3</th>\n",
|
| 1196 |
-
" <td>QDA</td>\n",
|
| 1197 |
-
" <td>0.548926</td>\n",
|
| 1198 |
-
" <td>0.451074</td>\n",
|
| 1199 |
-
" <td>0.688926</td>\n",
|
| 1200 |
-
" <td>0.548926</td>\n",
|
| 1201 |
-
" <td>0.570997</td>\n",
|
| 1202 |
-
" </tr>\n",
|
| 1203 |
-
" </tbody>\n",
|
| 1204 |
-
"</table>\n",
|
| 1205 |
-
"</div>"
|
| 1206 |
-
],
|
| 1207 |
-
"text/plain": [
|
| 1208 |
-
" Model Accuracy Error Rate Precision Recall F1-Score\n",
|
| 1209 |
-
"2 LDA 0.842482 0.157518 0.837328 0.842482 0.837989\n",
|
| 1210 |
-
"6 KNN (k=10) 0.832936 0.167064 0.826575 0.832936 0.824195\n",
|
| 1211 |
-
"5 KNN (k=7) 0.832936 0.167064 0.827125 0.832936 0.822706\n",
|
| 1212 |
-
"4 KNN (k=5) 0.825776 0.174224 0.818545 0.825776 0.818477\n",
|
| 1213 |
-
"0 Logistic Regression 0.809069 0.190931 0.833434 0.809069 0.815823\n",
|
| 1214 |
-
"1 Naive Bayes 0.770883 0.229117 0.763969 0.770883 0.766729\n",
|
| 1215 |
-
"3 QDA 0.548926 0.451074 0.688926 0.548926 0.570997"
|
| 1216 |
-
]
|
| 1217 |
-
},
|
| 1218 |
-
"metadata": {},
|
| 1219 |
-
"output_type": "display_data"
|
| 1220 |
-
}
|
| 1221 |
-
],
|
| 1222 |
"source": [
|
| 1223 |
"models_region = {\n",
|
| 1224 |
" 'Logistic Regression': LogisticRegression(max_iter=1000, random_state=42, class_weight='balanced'),\n",
|
|
@@ -1244,20 +827,10 @@
|
|
| 1244 |
},
|
| 1245 |
{
|
| 1246 |
"cell_type": "code",
|
| 1247 |
-
"execution_count":
|
| 1248 |
"id": "c291d288-2668-4c28-a731-0ccc845dc4d1",
|
| 1249 |
"metadata": {},
|
| 1250 |
-
"outputs": [
|
| 1251 |
-
{
|
| 1252 |
-
"name": "stdout",
|
| 1253 |
-
"output_type": "stream",
|
| 1254 |
-
"text": [
|
| 1255 |
-
"\n",
|
| 1256 |
-
"Baseline Champion (Body Regions): LDA\n",
|
| 1257 |
-
"F1-Score: 0.8380\n"
|
| 1258 |
-
]
|
| 1259 |
-
}
|
| 1260 |
-
],
|
| 1261 |
"source": [
|
| 1262 |
"champion_region_baseline = results_region_baseline.iloc[0]['Model']\n",
|
| 1263 |
"champion_region_f1_baseline = results_region_baseline.iloc[0]['F1-Score']\n",
|
|
@@ -1275,122 +848,10 @@
|
|
| 1275 |
},
|
| 1276 |
{
|
| 1277 |
"cell_type": "code",
|
| 1278 |
-
"execution_count":
|
| 1279 |
"id": "aafe02c6-101b-4494-8679-70c6f8c67563",
|
| 1280 |
"metadata": {},
|
| 1281 |
-
"outputs": [
|
| 1282 |
-
{
|
| 1283 |
-
"name": "stdout",
|
| 1284 |
-
"output_type": "stream",
|
| 1285 |
-
"text": [
|
| 1286 |
-
"\n",
|
| 1287 |
-
"Tuning Logistic Regression...\n",
|
| 1288 |
-
" Parameters to test: {'C': [0.01, 0.1, 1, 10, 100], 'solver': ['lbfgs', 'saga', 'newton-cg']}\n",
|
| 1289 |
-
"Best params: {'C': 0.1, 'solver': 'lbfgs'}\n",
|
| 1290 |
-
"CV F1-Score: 0.8290\n",
|
| 1291 |
-
"Test F1-Score: 0.8137\n",
|
| 1292 |
-
"Improvement: -0.0022\n",
|
| 1293 |
-
"\n",
|
| 1294 |
-
"Tuning LDA...\n",
|
| 1295 |
-
" Parameters to test: {'solver': ['svd', 'lsqr', 'eigen']}\n",
|
| 1296 |
-
"Best params: {'solver': 'svd'}\n",
|
| 1297 |
-
"CV F1-Score: 0.8434\n",
|
| 1298 |
-
"Test F1-Score: 0.8380\n",
|
| 1299 |
-
"Improvement: +0.0000\n",
|
| 1300 |
-
"\n",
|
| 1301 |
-
"Tuning KNN (k=10)...\n",
|
| 1302 |
-
" Parameters to test: {'n_neighbors': [7, 9, 10, 11, 13, 15], 'weights': ['uniform', 'distance'], 'metric': ['euclidean', 'manhattan', 'minkowski']}\n",
|
| 1303 |
-
"Best params: {'metric': 'euclidean', 'n_neighbors': 10, 'weights': 'distance'}\n",
|
| 1304 |
-
"CV F1-Score: 0.8643\n",
|
| 1305 |
-
"Test F1-Score: 0.8335\n",
|
| 1306 |
-
"Improvement: +0.0093\n",
|
| 1307 |
-
"Hyperparameter Tuning Results (Body Regions):\n",
|
| 1308 |
-
"\n",
|
| 1309 |
-
"\n"
|
| 1310 |
-
]
|
| 1311 |
-
},
|
| 1312 |
-
{
|
| 1313 |
-
"data": {
|
| 1314 |
-
"text/html": [
|
| 1315 |
-
"<div>\n",
|
| 1316 |
-
"<style scoped>\n",
|
| 1317 |
-
" .dataframe tbody tr th:only-of-type {\n",
|
| 1318 |
-
" vertical-align: middle;\n",
|
| 1319 |
-
" }\n",
|
| 1320 |
-
"\n",
|
| 1321 |
-
" .dataframe tbody tr th {\n",
|
| 1322 |
-
" vertical-align: top;\n",
|
| 1323 |
-
" }\n",
|
| 1324 |
-
"\n",
|
| 1325 |
-
" .dataframe thead th {\n",
|
| 1326 |
-
" text-align: right;\n",
|
| 1327 |
-
" }\n",
|
| 1328 |
-
"</style>\n",
|
| 1329 |
-
"<table border=\"1\" class=\"dataframe\">\n",
|
| 1330 |
-
" <thead>\n",
|
| 1331 |
-
" <tr style=\"text-align: right;\">\n",
|
| 1332 |
-
" <th></th>\n",
|
| 1333 |
-
" <th>Model</th>\n",
|
| 1334 |
-
" <th>Best Params</th>\n",
|
| 1335 |
-
" <th>CV Score</th>\n",
|
| 1336 |
-
" <th>Test Accuracy</th>\n",
|
| 1337 |
-
" <th>Test F1-Score</th>\n",
|
| 1338 |
-
" <th>Improvement</th>\n",
|
| 1339 |
-
" </tr>\n",
|
| 1340 |
-
" </thead>\n",
|
| 1341 |
-
" <tbody>\n",
|
| 1342 |
-
" <tr>\n",
|
| 1343 |
-
" <th>1</th>\n",
|
| 1344 |
-
" <td>LDA (Tuned)</td>\n",
|
| 1345 |
-
" <td>{'solver': 'svd'}</td>\n",
|
| 1346 |
-
" <td>0.843434</td>\n",
|
| 1347 |
-
" <td>0.842482</td>\n",
|
| 1348 |
-
" <td>0.837989</td>\n",
|
| 1349 |
-
" <td>0.00000</td>\n",
|
| 1350 |
-
" </tr>\n",
|
| 1351 |
-
" <tr>\n",
|
| 1352 |
-
" <th>2</th>\n",
|
| 1353 |
-
" <td>KNN (k=10) (Tuned)</td>\n",
|
| 1354 |
-
" <td>{'metric': 'euclidean', 'n_neighbors': 10, 'we...</td>\n",
|
| 1355 |
-
" <td>0.864273</td>\n",
|
| 1356 |
-
" <td>0.844869</td>\n",
|
| 1357 |
-
" <td>0.833524</td>\n",
|
| 1358 |
-
" <td>0.00933</td>\n",
|
| 1359 |
-
" </tr>\n",
|
| 1360 |
-
" <tr>\n",
|
| 1361 |
-
" <th>0</th>\n",
|
| 1362 |
-
" <td>Logistic Regression (Tuned)</td>\n",
|
| 1363 |
-
" <td>{'C': 0.1, 'solver': 'lbfgs'}</td>\n",
|
| 1364 |
-
" <td>0.829037</td>\n",
|
| 1365 |
-
" <td>0.806683</td>\n",
|
| 1366 |
-
" <td>0.813662</td>\n",
|
| 1367 |
-
" <td>-0.00216</td>\n",
|
| 1368 |
-
" </tr>\n",
|
| 1369 |
-
" </tbody>\n",
|
| 1370 |
-
"</table>\n",
|
| 1371 |
-
"</div>"
|
| 1372 |
-
],
|
| 1373 |
-
"text/plain": [
|
| 1374 |
-
" Model \\\n",
|
| 1375 |
-
"1 LDA (Tuned) \n",
|
| 1376 |
-
"2 KNN (k=10) (Tuned) \n",
|
| 1377 |
-
"0 Logistic Regression (Tuned) \n",
|
| 1378 |
-
"\n",
|
| 1379 |
-
" Best Params CV Score Test Accuracy \\\n",
|
| 1380 |
-
"1 {'solver': 'svd'} 0.843434 0.842482 \n",
|
| 1381 |
-
"2 {'metric': 'euclidean', 'n_neighbors': 10, 'we... 0.864273 0.844869 \n",
|
| 1382 |
-
"0 {'C': 0.1, 'solver': 'lbfgs'} 0.829037 0.806683 \n",
|
| 1383 |
-
"\n",
|
| 1384 |
-
" Test F1-Score Improvement \n",
|
| 1385 |
-
"1 0.837989 0.00000 \n",
|
| 1386 |
-
"2 0.833524 0.00933 \n",
|
| 1387 |
-
"0 0.813662 -0.00216 "
|
| 1388 |
-
]
|
| 1389 |
-
},
|
| 1390 |
-
"metadata": {},
|
| 1391 |
-
"output_type": "display_data"
|
| 1392 |
-
}
|
| 1393 |
-
],
|
| 1394 |
"source": [
|
| 1395 |
"tuning_configs_region = {\n",
|
| 1396 |
" 'Logistic Regression': {\n",
|
|
@@ -1473,28 +934,10 @@
|
|
| 1473 |
},
|
| 1474 |
{
|
| 1475 |
"cell_type": "code",
|
| 1476 |
-
"execution_count":
|
| 1477 |
"id": "4080074b-fd20-4ed2-8130-84ee3c45c888",
|
| 1478 |
"metadata": {},
|
| 1479 |
-
"outputs": [
|
| 1480 |
-
{
|
| 1481 |
-
"name": "stdout",
|
| 1482 |
-
"output_type": "stream",
|
| 1483 |
-
"text": [
|
| 1484 |
-
"Original features: 42\n",
|
| 1485 |
-
"After polynomial transformation: 903\n",
|
| 1486 |
-
"New features created: 861\n",
|
| 1487 |
-
"\n",
|
| 1488 |
-
"Training Logistic Regression with polynomial features...\n",
|
| 1489 |
-
"\n",
|
| 1490 |
-
"Polynomial Features Results:\n",
|
| 1491 |
-
"Accuracy: 0.8496\n",
|
| 1492 |
-
"F1-Score: 0.8498\n",
|
| 1493 |
-
"Baseline F1: 0.8380\n",
|
| 1494 |
-
"Improvement: +0.0119\n"
|
| 1495 |
-
]
|
| 1496 |
-
}
|
| 1497 |
-
],
|
| 1498 |
"source": [
|
| 1499 |
"# Create polynomial features\n",
|
| 1500 |
"poly = PolynomialFeatures(degree=2, include_bias=False, interaction_only=True)\n",
|
|
@@ -1528,110 +971,10 @@
|
|
| 1528 |
},
|
| 1529 |
{
|
| 1530 |
"cell_type": "code",
|
| 1531 |
-
"execution_count":
|
| 1532 |
"id": "6aaac401-c2d4-43b9-aba0-45a3315fd932",
|
| 1533 |
"metadata": {},
|
| 1534 |
-
"outputs": [
|
| 1535 |
-
{
|
| 1536 |
-
"name": "stdout",
|
| 1537 |
-
"output_type": "stream",
|
| 1538 |
-
"text": [
|
| 1539 |
-
"\n",
|
| 1540 |
-
"ALL ITERATIONS RANKED BY PERFORMANCE:\n"
|
| 1541 |
-
]
|
| 1542 |
-
},
|
| 1543 |
-
{
|
| 1544 |
-
"data": {
|
| 1545 |
-
"text/html": [
|
| 1546 |
-
"<div>\n",
|
| 1547 |
-
"<style scoped>\n",
|
| 1548 |
-
" .dataframe tbody tr th:only-of-type {\n",
|
| 1549 |
-
" vertical-align: middle;\n",
|
| 1550 |
-
" }\n",
|
| 1551 |
-
"\n",
|
| 1552 |
-
" .dataframe tbody tr th {\n",
|
| 1553 |
-
" vertical-align: top;\n",
|
| 1554 |
-
" }\n",
|
| 1555 |
-
"\n",
|
| 1556 |
-
" .dataframe thead th {\n",
|
| 1557 |
-
" text-align: right;\n",
|
| 1558 |
-
" }\n",
|
| 1559 |
-
"</style>\n",
|
| 1560 |
-
"<table border=\"1\" class=\"dataframe\">\n",
|
| 1561 |
-
" <thead>\n",
|
| 1562 |
-
" <tr style=\"text-align: right;\">\n",
|
| 1563 |
-
" <th></th>\n",
|
| 1564 |
-
" <th>Approach</th>\n",
|
| 1565 |
-
" <th>Iteration</th>\n",
|
| 1566 |
-
" <th>Model</th>\n",
|
| 1567 |
-
" <th>F1-Score</th>\n",
|
| 1568 |
-
" </tr>\n",
|
| 1569 |
-
" </thead>\n",
|
| 1570 |
-
" <tbody>\n",
|
| 1571 |
-
" <tr>\n",
|
| 1572 |
-
" <th>4</th>\n",
|
| 1573 |
-
" <td>Body Regions</td>\n",
|
| 1574 |
-
" <td>Polynomial</td>\n",
|
| 1575 |
-
" <td>LR + Poly Features</td>\n",
|
| 1576 |
-
" <td>0.849847</td>\n",
|
| 1577 |
-
" </tr>\n",
|
| 1578 |
-
" <tr>\n",
|
| 1579 |
-
" <th>3</th>\n",
|
| 1580 |
-
" <td>Body Regions</td>\n",
|
| 1581 |
-
" <td>Tuned</td>\n",
|
| 1582 |
-
" <td>LDA (Tuned)</td>\n",
|
| 1583 |
-
" <td>0.837989</td>\n",
|
| 1584 |
-
" </tr>\n",
|
| 1585 |
-
" <tr>\n",
|
| 1586 |
-
" <th>2</th>\n",
|
| 1587 |
-
" <td>Body Regions</td>\n",
|
| 1588 |
-
" <td>Baseline</td>\n",
|
| 1589 |
-
" <td>LDA</td>\n",
|
| 1590 |
-
" <td>0.837989</td>\n",
|
| 1591 |
-
" </tr>\n",
|
| 1592 |
-
" <tr>\n",
|
| 1593 |
-
" <th>1</th>\n",
|
| 1594 |
-
" <td>14-Class</td>\n",
|
| 1595 |
-
" <td>Tuned</td>\n",
|
| 1596 |
-
" <td>Logistic Regression (Tuned)</td>\n",
|
| 1597 |
-
" <td>0.619470</td>\n",
|
| 1598 |
-
" </tr>\n",
|
| 1599 |
-
" <tr>\n",
|
| 1600 |
-
" <th>0</th>\n",
|
| 1601 |
-
" <td>14-Class</td>\n",
|
| 1602 |
-
" <td>Baseline</td>\n",
|
| 1603 |
-
" <td>LDA</td>\n",
|
| 1604 |
-
" <td>0.580049</td>\n",
|
| 1605 |
-
" </tr>\n",
|
| 1606 |
-
" </tbody>\n",
|
| 1607 |
-
"</table>\n",
|
| 1608 |
-
"</div>"
|
| 1609 |
-
],
|
| 1610 |
-
"text/plain": [
|
| 1611 |
-
" Approach Iteration Model F1-Score\n",
|
| 1612 |
-
"4 Body Regions Polynomial LR + Poly Features 0.849847\n",
|
| 1613 |
-
"3 Body Regions Tuned LDA (Tuned) 0.837989\n",
|
| 1614 |
-
"2 Body Regions Baseline LDA 0.837989\n",
|
| 1615 |
-
"1 14-Class Tuned Logistic Regression (Tuned) 0.619470\n",
|
| 1616 |
-
"0 14-Class Baseline LDA 0.580049"
|
| 1617 |
-
]
|
| 1618 |
-
},
|
| 1619 |
-
"metadata": {},
|
| 1620 |
-
"output_type": "display_data"
|
| 1621 |
-
},
|
| 1622 |
-
{
|
| 1623 |
-
"name": "stdout",
|
| 1624 |
-
"output_type": "stream",
|
| 1625 |
-
"text": [
|
| 1626 |
-
"FINAL CHAMPION MODEL\n",
|
| 1627 |
-
"Approach: Body Regions\n",
|
| 1628 |
-
"Iteration: Polynomial\n",
|
| 1629 |
-
"Model: LR + Poly Features\n",
|
| 1630 |
-
"F1-Score: 0.8498\n",
|
| 1631 |
-
"Improvement over baseline: +0.0119\n"
|
| 1632 |
-
]
|
| 1633 |
-
}
|
| 1634 |
-
],
|
| 1635 |
"source": [
|
| 1636 |
"all_iterations = pd.DataFrame([\n",
|
| 1637 |
" # 14-class approaches\n",
|
|
@@ -1671,39 +1014,10 @@
|
|
| 1671 |
},
|
| 1672 |
{
|
| 1673 |
"cell_type": "code",
|
| 1674 |
-
"execution_count":
|
| 1675 |
"id": "bb170b58-c408-4db5-a262-0fc00b93ba07",
|
| 1676 |
"metadata": {},
|
| 1677 |
-
"outputs": [
|
| 1678 |
-
{
|
| 1679 |
-
"name": "stdout",
|
| 1680 |
-
"output_type": "stream",
|
| 1681 |
-
"text": [
|
| 1682 |
-
"\n",
|
| 1683 |
-
"Classification Report:\n",
|
| 1684 |
-
"----------------------------------------------------------------------------------------------------\n",
|
| 1685 |
-
" precision recall f1-score support\n",
|
| 1686 |
-
"\n",
|
| 1687 |
-
" Lower Body 0.72 0.73 0.72 114\n",
|
| 1688 |
-
" Upper Body 0.90 0.90 0.90 305\n",
|
| 1689 |
-
"\n",
|
| 1690 |
-
" accuracy 0.85 419\n",
|
| 1691 |
-
" macro avg 0.81 0.81 0.81 419\n",
|
| 1692 |
-
"weighted avg 0.85 0.85 0.85 419\n",
|
| 1693 |
-
"\n"
|
| 1694 |
-
]
|
| 1695 |
-
},
|
| 1696 |
-
{
|
| 1697 |
-
"data": {
|
| 1698 |
-
"image/png": "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",
|
| 1699 |
-
"text/plain": [
|
| 1700 |
-
"<Figure size 800x600 with 2 Axes>"
|
| 1701 |
-
]
|
| 1702 |
-
},
|
| 1703 |
-
"metadata": {},
|
| 1704 |
-
"output_type": "display_data"
|
| 1705 |
-
}
|
| 1706 |
-
],
|
| 1707 |
"source": [
|
| 1708 |
"# Determine which champion to use\n",
|
| 1709 |
"if final_champion_row['Approach'] == 'Body Regions':\n",
|
|
@@ -1751,18 +1065,10 @@
|
|
| 1751 |
},
|
| 1752 |
{
|
| 1753 |
"cell_type": "code",
|
| 1754 |
-
"execution_count":
|
| 1755 |
"id": "b894966a-0c41-4d24-83a9-3d9eef777493",
|
| 1756 |
"metadata": {},
|
| 1757 |
-
"outputs": [
|
| 1758 |
-
{
|
| 1759 |
-
"name": "stdout",
|
| 1760 |
-
"output_type": "stream",
|
| 1761 |
-
"text": [
|
| 1762 |
-
"Model saved: final_champion_model_A3.pkl\n"
|
| 1763 |
-
]
|
| 1764 |
-
}
|
| 1765 |
-
],
|
| 1766 |
"source": [
|
| 1767 |
"# Save the champion model\n",
|
| 1768 |
"model_filename = 'final_champion_model_A3.pkl'\n",
|
|
|
|
| 307 |
"name": "stdout",
|
| 308 |
"output_type": "stream",
|
| 309 |
"text": [
|
| 310 |
+
"Features (X) shape: (2094, 41)\n",
|
| 311 |
"Target (y) shape: (2094,)\n",
|
| 312 |
"\n",
|
| 313 |
+
"Number of features: 41\n",
|
| 314 |
"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",
|
| 315 |
"\n",
|
| 316 |
"Number of classes: 14\n",
|
|
|
|
| 320 |
],
|
| 321 |
"source": [
|
| 322 |
"# Drop non-feature columns \n",
|
| 323 |
+
"exclude_from_X = ['ID', 'WeakestLink', 'EstimatedScore']\n",
|
| 324 |
"feature_columns = [col for col in merged_df.columns if col not in exclude_from_X]\n",
|
| 325 |
"\n",
|
| 326 |
"X = merged_df[feature_columns].copy()\n",
|
|
|
|
| 513 |
" <tr>\n",
|
| 514 |
" <th>2</th>\n",
|
| 515 |
" <td>LDA</td>\n",
|
| 516 |
+
" <td>0.565632</td>\n",
|
| 517 |
+
" <td>0.434368</td>\n",
|
| 518 |
+
" <td>0.578220</td>\n",
|
| 519 |
+
" <td>0.565632</td>\n",
|
| 520 |
+
" <td>0.566721</td>\n",
|
| 521 |
" </tr>\n",
|
| 522 |
" <tr>\n",
|
| 523 |
" <th>0</th>\n",
|
| 524 |
" <td>Logistic Regression</td>\n",
|
| 525 |
+
" <td>0.546539</td>\n",
|
| 526 |
+
" <td>0.453461</td>\n",
|
| 527 |
+
" <td>0.614849</td>\n",
|
| 528 |
+
" <td>0.546539</td>\n",
|
| 529 |
+
" <td>0.562310</td>\n",
|
| 530 |
" </tr>\n",
|
| 531 |
" <tr>\n",
|
| 532 |
+
" <th>4</th>\n",
|
| 533 |
+
" <td>KNN (k=7)</td>\n",
|
| 534 |
" <td>0.553699</td>\n",
|
| 535 |
" <td>0.446301</td>\n",
|
| 536 |
+
" <td>0.548231</td>\n",
|
| 537 |
" <td>0.553699</td>\n",
|
| 538 |
+
" <td>0.545808</td>\n",
|
| 539 |
" </tr>\n",
|
| 540 |
" <tr>\n",
|
| 541 |
" <th>5</th>\n",
|
| 542 |
" <td>KNN (k=10)</td>\n",
|
| 543 |
+
" <td>0.556086</td>\n",
|
| 544 |
+
" <td>0.443914</td>\n",
|
| 545 |
+
" <td>0.551704</td>\n",
|
| 546 |
+
" <td>0.556086</td>\n",
|
| 547 |
+
" <td>0.540911</td>\n",
|
| 548 |
" </tr>\n",
|
| 549 |
" <tr>\n",
|
| 550 |
+
" <th>3</th>\n",
|
| 551 |
+
" <td>KNN (k=5)</td>\n",
|
| 552 |
+
" <td>0.539379</td>\n",
|
| 553 |
+
" <td>0.460621</td>\n",
|
| 554 |
+
" <td>0.532738</td>\n",
|
| 555 |
+
" <td>0.539379</td>\n",
|
| 556 |
+
" <td>0.530905</td>\n",
|
| 557 |
" </tr>\n",
|
| 558 |
" <tr>\n",
|
| 559 |
" <th>1</th>\n",
|
| 560 |
" <td>Naive Bayes</td>\n",
|
| 561 |
+
" <td>0.434368</td>\n",
|
| 562 |
+
" <td>0.565632</td>\n",
|
| 563 |
+
" <td>0.511623</td>\n",
|
| 564 |
+
" <td>0.434368</td>\n",
|
| 565 |
+
" <td>0.449053</td>\n",
|
| 566 |
" </tr>\n",
|
| 567 |
" </tbody>\n",
|
| 568 |
"</table>\n",
|
|
|
|
| 570 |
],
|
| 571 |
"text/plain": [
|
| 572 |
" Model Accuracy Error Rate Precision Recall F1-Score\n",
|
| 573 |
+
"2 LDA 0.565632 0.434368 0.578220 0.565632 0.566721\n",
|
| 574 |
+
"0 Logistic Regression 0.546539 0.453461 0.614849 0.546539 0.562310\n",
|
| 575 |
+
"4 KNN (k=7) 0.553699 0.446301 0.548231 0.553699 0.545808\n",
|
| 576 |
+
"5 KNN (k=10) 0.556086 0.443914 0.551704 0.556086 0.540911\n",
|
| 577 |
+
"3 KNN (k=5) 0.539379 0.460621 0.532738 0.539379 0.530905\n",
|
| 578 |
+
"1 Naive Bayes 0.434368 0.565632 0.511623 0.434368 0.449053"
|
| 579 |
]
|
| 580 |
},
|
| 581 |
"metadata": {},
|
|
|
|
| 603 |
"text": [
|
| 604 |
"\n",
|
| 605 |
"CHAMPION: LDA\n",
|
| 606 |
+
"F1-Score: 0.5667\n"
|
| 607 |
]
|
| 608 |
}
|
| 609 |
],
|
|
|
|
| 626 |
},
|
| 627 |
{
|
| 628 |
"cell_type": "code",
|
| 629 |
+
"execution_count": null,
|
| 630 |
"id": "6cecb844-b3b1-448f-b0fa-e917e4f979d7",
|
| 631 |
"metadata": {},
|
| 632 |
"outputs": [
|
|
|
|
| 636 |
"text": [
|
| 637 |
"\n",
|
| 638 |
"Tuning Logistic Regression...\n",
|
| 639 |
+
" Parameters to test: {'C': [0.001, 0.01, 0.1, 1, 10, 100], 'solver': ['lbfgs', 'saga'], 'class_weight': [None, 'balanced']}\n"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 640 |
]
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 641 |
}
|
| 642 |
],
|
| 643 |
"source": [
|
|
|
|
| 729 |
},
|
| 730 |
{
|
| 731 |
"cell_type": "code",
|
| 732 |
+
"execution_count": null,
|
| 733 |
"id": "9a43d212-4268-4921-8926-0ee1a017d771",
|
| 734 |
"metadata": {},
|
| 735 |
"outputs": [],
|
|
|
|
| 740 |
},
|
| 741 |
{
|
| 742 |
"cell_type": "code",
|
| 743 |
+
"execution_count": null,
|
| 744 |
"id": "2256f87c-6d23-4a03-a614-53cfe31916bc",
|
| 745 |
"metadata": {},
|
| 746 |
+
"outputs": [],
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 747 |
"source": [
|
| 748 |
"# Define the groups as mentioned in Slide 6 into 3 distinct regions\n",
|
| 749 |
"def get_region(label):\n",
|
|
|
|
| 770 |
},
|
| 771 |
{
|
| 772 |
"cell_type": "code",
|
| 773 |
+
"execution_count": null,
|
| 774 |
"id": "c556f1ac-552b-4ccb-82a1-6c3b782c3c75",
|
| 775 |
"metadata": {},
|
| 776 |
+
"outputs": [],
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 777 |
"source": [
|
| 778 |
"# Prepare data for region wise classification\n",
|
| 779 |
"\n",
|
| 780 |
+
"exclude_region = ['ID', 'WeakestLink', 'WeakestRegion', 'EstimatedScore']\n",
|
| 781 |
"features_region = [c for c in merged_df.columns if c not in exclude_region]\n",
|
| 782 |
"\n",
|
| 783 |
"X_region = merged_df[features_region].copy()\n",
|
|
|
|
| 798 |
},
|
| 799 |
{
|
| 800 |
"cell_type": "code",
|
| 801 |
+
"execution_count": null,
|
| 802 |
"id": "cc39415b-8dab-4af3-bd1c-830c01735921",
|
| 803 |
"metadata": {},
|
| 804 |
+
"outputs": [],
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 805 |
"source": [
|
| 806 |
"models_region = {\n",
|
| 807 |
" 'Logistic Regression': LogisticRegression(max_iter=1000, random_state=42, class_weight='balanced'),\n",
|
|
|
|
| 827 |
},
|
| 828 |
{
|
| 829 |
"cell_type": "code",
|
| 830 |
+
"execution_count": null,
|
| 831 |
"id": "c291d288-2668-4c28-a731-0ccc845dc4d1",
|
| 832 |
"metadata": {},
|
| 833 |
+
"outputs": [],
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 834 |
"source": [
|
| 835 |
"champion_region_baseline = results_region_baseline.iloc[0]['Model']\n",
|
| 836 |
"champion_region_f1_baseline = results_region_baseline.iloc[0]['F1-Score']\n",
|
|
|
|
| 848 |
},
|
| 849 |
{
|
| 850 |
"cell_type": "code",
|
| 851 |
+
"execution_count": null,
|
| 852 |
"id": "aafe02c6-101b-4494-8679-70c6f8c67563",
|
| 853 |
"metadata": {},
|
| 854 |
+
"outputs": [],
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 855 |
"source": [
|
| 856 |
"tuning_configs_region = {\n",
|
| 857 |
" 'Logistic Regression': {\n",
|
|
|
|
| 934 |
},
|
| 935 |
{
|
| 936 |
"cell_type": "code",
|
| 937 |
+
"execution_count": null,
|
| 938 |
"id": "4080074b-fd20-4ed2-8130-84ee3c45c888",
|
| 939 |
"metadata": {},
|
| 940 |
+
"outputs": [],
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 941 |
"source": [
|
| 942 |
"# Create polynomial features\n",
|
| 943 |
"poly = PolynomialFeatures(degree=2, include_bias=False, interaction_only=True)\n",
|
|
|
|
| 971 |
},
|
| 972 |
{
|
| 973 |
"cell_type": "code",
|
| 974 |
+
"execution_count": null,
|
| 975 |
"id": "6aaac401-c2d4-43b9-aba0-45a3315fd932",
|
| 976 |
"metadata": {},
|
| 977 |
+
"outputs": [],
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 978 |
"source": [
|
| 979 |
"all_iterations = pd.DataFrame([\n",
|
| 980 |
" # 14-class approaches\n",
|
|
|
|
| 1014 |
},
|
| 1015 |
{
|
| 1016 |
"cell_type": "code",
|
| 1017 |
+
"execution_count": null,
|
| 1018 |
"id": "bb170b58-c408-4db5-a262-0fc00b93ba07",
|
| 1019 |
"metadata": {},
|
| 1020 |
+
"outputs": [],
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1021 |
"source": [
|
| 1022 |
"# Determine which champion to use\n",
|
| 1023 |
"if final_champion_row['Approach'] == 'Body Regions':\n",
|
|
|
|
| 1065 |
},
|
| 1066 |
{
|
| 1067 |
"cell_type": "code",
|
| 1068 |
+
"execution_count": null,
|
| 1069 |
"id": "b894966a-0c41-4d24-83a9-3d9eef777493",
|
| 1070 |
"metadata": {},
|
| 1071 |
+
"outputs": [],
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1072 |
"source": [
|
| 1073 |
"# Save the champion model\n",
|
| 1074 |
"model_filename = 'final_champion_model_A3.pkl'\n",
|