Permalink
Cannot retrieve contributors at this time
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
6001CEM/6001Test.ipynb
Go to fileThis commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
1583 lines (1583 sloc)
65 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
{ | |
"cells": [ | |
{ | |
"cell_type": "code", | |
"execution_count": 57, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"'''numpy'''\n", | |
"import numpy as np\n", | |
"\n", | |
"'''pandas'''\n", | |
"import pandas as pd \n", | |
"\n", | |
"'''time'''\n", | |
"import time\n", | |
"\n", | |
"'''seaborn'''\n", | |
"import seaborn as sn\n", | |
"\n", | |
"'''sklearn'''\n", | |
"from sklearn import neighbors, metrics \n", | |
"from sklearn.model_selection import train_test_split, cross_val_score, GridSearchCV, RandomizedSearchCV, RepeatedStratifiedKFold\n", | |
"from sklearn.preprocessing import LabelEncoder, StandardScaler\n", | |
"from sklearn.linear_model import LogisticRegression\n", | |
"from sklearn.neighbors import KNeighborsClassifier\n", | |
"from sklearn.metrics import classification_report, confusion_matrix\n", | |
"from sklearn.impute import SimpleImputer\n", | |
"\n", | |
"'''matplotlib'''\n", | |
"import matplotlib.pyplot as plt\n", | |
"%matplotlib inline" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 58, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
" Report ID Arrest Date Time Area ID Area Name \\\n", | |
"0 5666847 2019-06-22T00:00:00.000 1630.0 14 Pacific \n", | |
"1 5666688 2019-06-22T00:00:00.000 1010.0 10 West Valley \n", | |
"2 5666570 2019-06-22T00:00:00.000 400.0 15 N Hollywood \n", | |
"3 5666529 2019-06-22T00:00:00.000 302.0 17 Devonshire \n", | |
"4 5666742 2019-06-22T00:00:00.000 1240.0 14 Pacific \n", | |
"... ... ... ... ... ... \n", | |
"1276155 100504416 2010-01-01T00:00:00.000 1430.0 5 Harbor \n", | |
"1276156 101104731 2010-01-01T00:00:00.000 2215.0 11 Northeast \n", | |
"1276157 101104211 2010-01-01T00:00:00.000 1310.0 11 Northeast \n", | |
"1276158 2179817 2010-01-01T00:00:00.000 319.0 14 Pacific \n", | |
"1276159 2180332 2010-01-01T00:00:00.000 1815.0 19 Mission \n", | |
"\n", | |
" Reporting District Age Sex Code Descent Code Charge Group Code \\\n", | |
"0 1457 44 M W 24.0 \n", | |
"1 1061 8 M O NaN \n", | |
"2 1543 31 F O 22.0 \n", | |
"3 1738 23 F W 22.0 \n", | |
"4 1472 28 M W 8.0 \n", | |
"... ... ... ... ... ... \n", | |
"1276155 521 17 M H 24.0 \n", | |
"1276156 1118 12 M H 24.0 \n", | |
"1276157 1128 52 M H 18.0 \n", | |
"1276158 1408 24 M H 22.0 \n", | |
"1276159 1994 25 M W 16.0 \n", | |
"\n", | |
" ... Charge Description \\\n", | |
"0 ... VANDALISM \n", | |
"1 ... NaN \n", | |
"2 ... DRUNK DRIVING ALCOHOL/DRUGS \n", | |
"3 ... DRUNK DRIVING ALCOHOL/DRUGS \n", | |
"4 ... OBSTRUCT/RESIST EXECUTIVE OFFICER \n", | |
"... ... ... \n", | |
"1276155 ... MINOR BUY/ETC TOBACCO/ETC \n", | |
"1276156 ... CURFEW - JUV ONLY \n", | |
"1276157 ... DRINKING IN PUBLIC \n", | |
"1276158 ... DRUNK DRIVING ALCOHOL/DRUGS \n", | |
"1276159 ... POSSESSION CONTROLLED SUBSTANCE \n", | |
"\n", | |
" Address \\\n", | |
"0 12300 CULVER BL \n", | |
"1 19000 VANOWEN ST \n", | |
"2 MAGNOLIA AV \n", | |
"3 HAYVENHURST ST \n", | |
"4 6600 ESPLANADE ST \n", | |
"... ... \n", | |
"1276155 4TH \n", | |
"1276156 AVENUE 58 \n", | |
"1276157 YORK BL \n", | |
"1276158 NATIONAL BL \n", | |
"1276159 ROSCOE \n", | |
"\n", | |
" Cross Street \\\n", | |
"0 NaN \n", | |
"1 NaN \n", | |
"2 LAUREL CANYON BL \n", | |
"3 N REGAN FY \n", | |
"4 NaN \n", | |
"... ... \n", | |
"1276155 GAFFEY \n", | |
"1276156 FIGUEROA ST \n", | |
"1276157 AVENUE 63 \n", | |
"1276158 MANNING AV \n", | |
"1276159 WILLIS \n", | |
"\n", | |
" Location Zip Codes \\\n", | |
"0 {'latitude': '33.992', 'human_address': '{\"add... 24031.0 \n", | |
"1 {'latitude': '34.1687', 'human_address': '{\"ad... 19339.0 \n", | |
"2 {'latitude': '34.1649', 'human_address': '{\"ad... 8890.0 \n", | |
"3 {'latitude': '34.2692', 'human_address': '{\"ad... 19329.0 \n", | |
"4 {'latitude': '33.9609', 'human_address': '{\"ad... 25075.0 \n", | |
"... ... ... \n", | |
"1276155 {'latitude': '33.7406', 'human_address': '{\"ad... 3342.0 \n", | |
"1276156 {'latitude': '34.1101', 'human_address': '{\"ad... 23673.0 \n", | |
"1276157 {'latitude': '34.1148', 'human_address': '{\"ad... 23673.0 \n", | |
"1276158 {'latitude': '34.0301', 'human_address': '{\"ad... 23451.0 \n", | |
"1276159 {'latitude': '34.2215', 'human_address': '{\"ad... 19730.0 \n", | |
"\n", | |
" Census Tracts Precinct Boundaries LA Specific Plans \\\n", | |
"0 918.0 1137.0 10.0 \n", | |
"1 321.0 1494.0 NaN \n", | |
"2 205.0 1332.0 17.0 \n", | |
"3 69.0 388.0 NaN \n", | |
"4 937.0 241.0 10.0 \n", | |
"... ... ... ... \n", | |
"1276155 975.0 1205.0 NaN \n", | |
"1276156 370.0 477.0 28.0 \n", | |
"1276157 359.0 575.0 NaN \n", | |
"1276158 872.0 1124.0 9.0 \n", | |
"1276159 147.0 418.0 NaN \n", | |
"\n", | |
" Council Districts Neighborhood Councils (Certified) \n", | |
"0 10.0 85.0 \n", | |
"1 4.0 10.0 \n", | |
"2 5.0 39.0 \n", | |
"3 2.0 78.0 \n", | |
"4 10.0 16.0 \n", | |
"... ... ... \n", | |
"1276155 15.0 36.0 \n", | |
"1276156 11.0 93.0 \n", | |
"1276157 9.0 93.0 \n", | |
"1276158 6.0 75.0 \n", | |
"1276159 3.0 59.0 \n", | |
"\n", | |
"[1276160 rows x 23 columns]\n" | |
] | |
} | |
], | |
"source": [ | |
"'''Read and display data'''\n", | |
"data = pd.read_csv(\"Datasets/LA Crime Data/arrest-data-from-2010-to-present.csv\") #Load in the arrest data\n", | |
"print(data) #Display the data" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 185, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"'''Assigning attributes to use'''\n", | |
"data = data.head(n=100000)\n", | |
"\n", | |
"selectedData = data[[ #Here I am assigning all the values to see if any make a signifciant difference\n", | |
" 'Sex Code',\n", | |
" 'Descent Code',\n", | |
" 'Charge Description'\n", | |
"]].values" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 186, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
" Sex Code Decent Code Charge Description\n", | |
"0 M W VANDALISM\n", | |
"2 F O DRUNK DRIVING ALCOHOL/DRUGS\n", | |
"3 F W DRUNK DRIVING ALCOHOL/DRUGS\n", | |
"4 M W OBSTRUCT/RESIST EXECUTIVE OFFICER\n", | |
"5 M H PARENT IN CUSTODY, NO CARETAKER AVAILABLE\n", | |
".. ... ... ...\n", | |
"994 M H PAROLE WARRANT\n", | |
"995 M H WARRANT-PETITION TO REVOKE COMMUNITY SUPVN\n", | |
"996 M B DRINKING IN PUBLIC\n", | |
"998 M H BURGLARY\n", | |
"999 F H CORPORAL INJURY ON SPOUSE/COHABITANT/ETC\n", | |
"\n", | |
"[938 rows x 3 columns]\n" | |
] | |
} | |
], | |
"source": [ | |
"selectedData = pd.DataFrame(selectedData, columns = ['Sex Code','Decent Code','Charge Description'])\n", | |
"selectedData = selectedData.dropna()\n", | |
"print(selectedData)\n" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 187, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"(938, 1) (938, 1)\n" | |
] | |
} | |
], | |
"source": [ | |
"X = selectedData[[ #Here I am assigning all the values to see if any make a signifciant difference\n", | |
" #'Sex Code',\n", | |
" 'Charge Description'\n", | |
"]].values\n", | |
"\n", | |
"\n", | |
"#Set the class\n", | |
"y = selectedData[[\n", | |
" 'Decent Code'\n", | |
"]]\n", | |
"\n", | |
"#X = selectedData.to_numpy()\n", | |
"\n", | |
"print(X.shape, y.shape)\n", | |
"\n", | |
"y = np.ravel(y)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 188, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"{'A', 'B', 'F', 'O', 'W', 'H'}\n", | |
"[[186]\n", | |
" [56]\n", | |
" [56]\n", | |
" [115]\n", | |
" [122]\n", | |
" [135]\n", | |
" [56]\n", | |
" [111]\n", | |
" [56]\n", | |
" [112]\n", | |
" [49]\n", | |
" [56]\n", | |
" [149]\n", | |
" [143]\n", | |
" [4]\n", | |
" [182]\n", | |
" [103]\n", | |
" [77]\n", | |
" [39]\n", | |
" [146]\n", | |
" [56]\n", | |
" [56]\n", | |
" [56]\n", | |
" [182]\n", | |
" [122]\n", | |
" [143]\n", | |
" [48]\n", | |
" [165]\n", | |
" [20]\n", | |
" [183]\n", | |
" [56]\n", | |
" [142]\n", | |
" [175]\n", | |
" [165]\n", | |
" [58]\n", | |
" [140]\n", | |
" [56]\n", | |
" [185]\n", | |
" [103]\n", | |
" [56]\n", | |
" [56]\n", | |
" [169]\n", | |
" [59]\n", | |
" [132]\n", | |
" [56]\n", | |
" [59]\n", | |
" [151]\n", | |
" [165]\n", | |
" [139]\n", | |
" [59]\n", | |
" [95]\n", | |
" [84]\n", | |
" [192]\n", | |
" [165]\n", | |
" [120]\n", | |
" [20]\n", | |
" [151]\n", | |
" [48]\n", | |
" [56]\n", | |
" [91]\n", | |
" [56]\n", | |
" [165]\n", | |
" [105]\n", | |
" [59]\n", | |
" [143]\n", | |
" [151]\n", | |
" [56]\n", | |
" [142]\n", | |
" [55]\n", | |
" [163]\n", | |
" [143]\n", | |
" [143]\n", | |
" [37]\n", | |
" [151]\n", | |
" [80]\n", | |
" [17]\n", | |
" [59]\n", | |
" [165]\n", | |
" [123]\n", | |
" [119]\n", | |
" [189]\n", | |
" [51]\n", | |
" [102]\n", | |
" [165]\n", | |
" [56]\n", | |
" [70]\n", | |
" [59]\n", | |
" [56]\n", | |
" [123]\n", | |
" [18]\n", | |
" [20]\n", | |
" [20]\n", | |
" [16]\n", | |
" [56]\n", | |
" [143]\n", | |
" [158]\n", | |
" [142]\n", | |
" [103]\n", | |
" [56]\n", | |
" [56]\n", | |
" [17]\n", | |
" [59]\n", | |
" [50]\n", | |
" [158]\n", | |
" [18]\n", | |
" [59]\n", | |
" [56]\n", | |
" [107]\n", | |
" [159]\n", | |
" [35]\n", | |
" [183]\n", | |
" [34]\n", | |
" [143]\n", | |
" [59]\n", | |
" [143]\n", | |
" [58]\n", | |
" [17]\n", | |
" [105]\n", | |
" [171]\n", | |
" [58]\n", | |
" [20]\n", | |
" [143]\n", | |
" [189]\n", | |
" [56]\n", | |
" [185]\n", | |
" [143]\n", | |
" [56]\n", | |
" [7]\n", | |
" [91]\n", | |
" [165]\n", | |
" [56]\n", | |
" [56]\n", | |
" [161]\n", | |
" [56]\n", | |
" [143]\n", | |
" [21]\n", | |
" [139]\n", | |
" [56]\n", | |
" [151]\n", | |
" [78]\n", | |
" [143]\n", | |
" [59]\n", | |
" [188]\n", | |
" [56]\n", | |
" [147]\n", | |
" [56]\n", | |
" [139]\n", | |
" [165]\n", | |
" [48]\n", | |
" [84]\n", | |
" [56]\n", | |
" [56]\n", | |
" [151]\n", | |
" [56]\n", | |
" [139]\n", | |
" [165]\n", | |
" [55]\n", | |
" [123]\n", | |
" [58]\n", | |
" [56]\n", | |
" [151]\n", | |
" [140]\n", | |
" [59]\n", | |
" [17]\n", | |
" [143]\n", | |
" [175]\n", | |
" [62]\n", | |
" [98]\n", | |
" [56]\n", | |
" [132]\n", | |
" [131]\n", | |
" [139]\n", | |
" [111]\n", | |
" [146]\n", | |
" [36]\n", | |
" [136]\n", | |
" [192]\n", | |
" [178]\n", | |
" [15]\n", | |
" [143]\n", | |
" [151]\n", | |
" [192]\n", | |
" [137]\n", | |
" [101]\n", | |
" [117]\n", | |
" [151]\n", | |
" [142]\n", | |
" [151]\n", | |
" [167]\n", | |
" [25]\n", | |
" [114]\n", | |
" [59]\n", | |
" [114]\n", | |
" [131]\n", | |
" [56]\n", | |
" [77]\n", | |
" [166]\n", | |
" [13]\n", | |
" [180]\n", | |
" [191]\n", | |
" [17]\n", | |
" [20]\n", | |
" [151]\n", | |
" [146]\n", | |
" [126]\n", | |
" [154]\n", | |
" [46]\n", | |
" [56]\n", | |
" [34]\n", | |
" [36]\n", | |
" [50]\n", | |
" [146]\n", | |
" [169]\n", | |
" [94]\n", | |
" [186]\n", | |
" [45]\n", | |
" [154]\n", | |
" [44]\n", | |
" [130]\n", | |
" [55]\n", | |
" [103]\n", | |
" [123]\n", | |
" [116]\n", | |
" [56]\n", | |
" [55]\n", | |
" [13]\n", | |
" [34]\n", | |
" [6]\n", | |
" [159]\n", | |
" [143]\n", | |
" [6]\n", | |
" [6]\n", | |
" [138]\n", | |
" [178]\n", | |
" [142]\n", | |
" [143]\n", | |
" [192]\n", | |
" [86]\n", | |
" [144]\n", | |
" [37]\n", | |
" [58]\n", | |
" [6]\n", | |
" [42]\n", | |
" [159]\n", | |
" [74]\n", | |
" [191]\n", | |
" [25]\n", | |
" [84]\n", | |
" [142]\n", | |
" [50]\n", | |
" [143]\n", | |
" [56]\n", | |
" [126]\n", | |
" [28]\n", | |
" [84]\n", | |
" [101]\n", | |
" [141]\n", | |
" [71]\n", | |
" [126]\n", | |
" [5]\n", | |
" [165]\n", | |
" [91]\n", | |
" [28]\n", | |
" [45]\n", | |
" [17]\n", | |
" [143]\n", | |
" [182]\n", | |
" [192]\n", | |
" [65]\n", | |
" [143]\n", | |
" [35]\n", | |
" [56]\n", | |
" [56]\n", | |
" [178]\n", | |
" [131]\n", | |
" [169]\n", | |
" [114]\n", | |
" [55]\n", | |
" [178]\n", | |
" [30]\n", | |
" [105]\n", | |
" [152]\n", | |
" [131]\n", | |
" [17]\n", | |
" [126]\n", | |
" [43]\n", | |
" [10]\n", | |
" [192]\n", | |
" [132]\n", | |
" [56]\n", | |
" [143]\n", | |
" [6]\n", | |
" [61]\n", | |
" [175]\n", | |
" [123]\n", | |
" [51]\n", | |
" [84]\n", | |
" [73]\n", | |
" [86]\n", | |
" [192]\n", | |
" [18]\n", | |
" [123]\n", | |
" [36]\n", | |
" [178]\n", | |
" [186]\n", | |
" [191]\n", | |
" [186]\n", | |
" [142]\n", | |
" [123]\n", | |
" [100]\n", | |
" [159]\n", | |
" [123]\n", | |
" [56]\n", | |
" [178]\n", | |
" [124]\n", | |
" [94]\n", | |
" [34]\n", | |
" [186]\n", | |
" [70]\n", | |
" [191]\n", | |
" [34]\n", | |
" [20]\n", | |
" [191]\n", | |
" [156]\n", | |
" [192]\n", | |
" [165]\n", | |
" [23]\n", | |
" [84]\n", | |
" [96]\n", | |
" [20]\n", | |
" [12]\n", | |
" [141]\n", | |
" [165]\n", | |
" [192]\n", | |
" [55]\n", | |
" [103]\n", | |
" [130]\n", | |
" [131]\n", | |
" [165]\n", | |
" [178]\n", | |
" [169]\n", | |
" [20]\n", | |
" [77]\n", | |
" [191]\n", | |
" [139]\n", | |
" [51]\n", | |
" [186]\n", | |
" [188]\n", | |
" [34]\n", | |
" [165]\n", | |
" [123]\n", | |
" [25]\n", | |
" [149]\n", | |
" [89]\n", | |
" [114]\n", | |
" [45]\n", | |
" [46]\n", | |
" [164]\n", | |
" [171]\n", | |
" [143]\n", | |
" [56]\n", | |
" [59]\n", | |
" [10]\n", | |
" [2]\n", | |
" [18]\n", | |
" [143]\n", | |
" [11]\n", | |
" [56]\n", | |
" [103]\n", | |
" [143]\n", | |
" [58]\n", | |
" [47]\n", | |
" [115]\n", | |
" [192]\n", | |
" [22]\n", | |
" [34]\n", | |
" [20]\n", | |
" [162]\n", | |
" [90]\n", | |
" [36]\n", | |
" [187]\n", | |
" [144]\n", | |
" [143]\n", | |
" [25]\n", | |
" [46]\n", | |
" [20]\n", | |
" [15]\n", | |
" [56]\n", | |
" [99]\n", | |
" [143]\n", | |
" [104]\n", | |
" [175]\n", | |
" [46]\n", | |
" [175]\n", | |
" [123]\n", | |
" [77]\n", | |
" [33]\n", | |
" [79]\n", | |
" [46]\n", | |
" [6]\n", | |
" [58]\n", | |
" [154]\n", | |
" [60]\n", | |
" [159]\n", | |
" [151]\n", | |
" [36]\n", | |
" [137]\n", | |
" [56]\n", | |
" [56]\n", | |
" [101]\n", | |
" [56]\n", | |
" [183]\n", | |
" [17]\n", | |
" [110]\n", | |
" [155]\n", | |
" [6]\n", | |
" [165]\n", | |
" [17]\n", | |
" [19]\n", | |
" [126]\n", | |
" [46]\n", | |
" [34]\n", | |
" [6]\n", | |
" [118]\n", | |
" [20]\n", | |
" [132]\n", | |
" [37]\n", | |
" [180]\n", | |
" [124]\n", | |
" [18]\n", | |
" [155]\n", | |
" [51]\n", | |
" [6]\n", | |
" [186]\n", | |
" [165]\n", | |
" [85]\n", | |
" [53]\n", | |
" [72]\n", | |
" [34]\n", | |
" [34]\n", | |
" [35]\n", | |
" [77]\n", | |
" [47]\n", | |
" [56]\n", | |
" [103]\n", | |
" [85]\n", | |
" [50]\n", | |
" [143]\n", | |
" [24]\n", | |
" [46]\n", | |
" [79]\n", | |
" [118]\n", | |
" [17]\n", | |
" [145]\n", | |
" [192]\n", | |
" [46]\n", | |
" [64]\n", | |
" [143]\n", | |
" [192]\n", | |
" [25]\n", | |
" [25]\n", | |
" [56]\n", | |
" [6]\n", | |
" [34]\n", | |
" [19]\n", | |
" [25]\n", | |
" [59]\n", | |
" [36]\n", | |
" [77]\n", | |
" [50]\n", | |
" [137]\n", | |
" [79]\n", | |
" [191]\n", | |
" [34]\n", | |
" [158]\n", | |
" [173]\n", | |
" [150]\n", | |
" [6]\n", | |
" [159]\n", | |
" [34]\n", | |
" [17]\n", | |
" [29]\n", | |
" [57]\n", | |
" [143]\n", | |
" [20]\n", | |
" [191]\n", | |
" [177]\n", | |
" [77]\n", | |
" [17]\n", | |
" [171]\n", | |
" [31]\n", | |
" [42]\n", | |
" [17]\n", | |
" [86]\n", | |
" [190]\n", | |
" [85]\n", | |
" [171]\n", | |
" [193]\n", | |
" [56]\n", | |
" [46]\n", | |
" [36]\n", | |
" [171]\n", | |
" [20]\n", | |
" [6]\n", | |
" [50]\n", | |
" [6]\n", | |
" [20]\n", | |
" [36]\n", | |
" [159]\n", | |
" [180]\n", | |
" [14]\n", | |
" [32]\n", | |
" [85]\n", | |
" [114]\n", | |
" [7]\n", | |
" [25]\n", | |
" [171]\n", | |
" [187]\n", | |
" [55]\n", | |
" [143]\n", | |
" [55]\n", | |
" [34]\n", | |
" [41]\n", | |
" [171]\n", | |
" [25]\n", | |
" [55]\n", | |
" [159]\n", | |
" [171]\n", | |
" [146]\n", | |
" [85]\n", | |
" [20]\n", | |
" [123]\n", | |
" [34]\n", | |
" [143]\n", | |
" [169]\n", | |
" [171]\n", | |
" [34]\n", | |
" [6]\n", | |
" [192]\n", | |
" [182]\n", | |
" [159]\n", | |
" [131]\n", | |
" [10]\n", | |
" [56]\n", | |
" [97]\n", | |
" [46]\n", | |
" [143]\n", | |
" [131]\n", | |
" [179]\n", | |
" [142]\n", | |
" [128]\n", | |
" [176]\n", | |
" [17]\n", | |
" [56]\n", | |
" [56]\n", | |
" [57]\n", | |
" [86]\n", | |
" [6]\n", | |
" [56]\n", | |
" [158]\n", | |
" [114]\n", | |
" [69]\n", | |
" [56]\n", | |
" [56]\n", | |
" [144]\n", | |
" [46]\n", | |
" [174]\n", | |
" [10]\n", | |
" [143]\n", | |
" [56]\n", | |
" [109]\n", | |
" [34]\n", | |
" [149]\n", | |
" [51]\n", | |
" [123]\n", | |
" [134]\n", | |
" [191]\n", | |
" [55]\n", | |
" [52]\n", | |
" [8]\n", | |
" [151]\n", | |
" [159]\n", | |
" [129]\n", | |
" [6]\n", | |
" [46]\n", | |
" [50]\n", | |
" [22]\n", | |
" [115]\n", | |
" [146]\n", | |
" [144]\n", | |
" [77]\n", | |
" [56]\n", | |
" [85]\n", | |
" [190]\n", | |
" [165]\n", | |
" [143]\n", | |
" [143]\n", | |
" [158]\n", | |
" [34]\n", | |
" [6]\n", | |
" [157]\n", | |
" [136]\n", | |
" [25]\n", | |
" [143]\n", | |
" [56]\n", | |
" [123]\n", | |
" [6]\n", | |
" [20]\n", | |
" [29]\n", | |
" [56]\n", | |
" [143]\n", | |
" [10]\n", | |
" [192]\n", | |
" [36]\n", | |
" [165]\n", | |
" [37]\n", | |
" [51]\n", | |
" [192]\n", | |
" [159]\n", | |
" [135]\n", | |
" [59]\n", | |
" [34]\n", | |
" [29]\n", | |
" [34]\n", | |
" [83]\n", | |
" [56]\n", | |
" [95]\n", | |
" [172]\n", | |
" [184]\n", | |
" [159]\n", | |
" [34]\n", | |
" [25]\n", | |
" [87]\n", | |
" [140]\n", | |
" [35]\n", | |
" [166]\n", | |
" [151]\n", | |
" [137]\n", | |
" [94]\n", | |
" [191]\n", | |
" [126]\n", | |
" [146]\n", | |
" [15]\n", | |
" [56]\n", | |
" [175]\n", | |
" [86]\n", | |
" [6]\n", | |
" [143]\n", | |
" [113]\n", | |
" [24]\n", | |
" [6]\n", | |
" [131]\n", | |
" [143]\n", | |
" [50]\n", | |
" [41]\n", | |
" [126]\n", | |
" [153]\n", | |
" [112]\n", | |
" [45]\n", | |
" [144]\n", | |
" [36]\n", | |
" [77]\n", | |
" [165]\n", | |
" [46]\n", | |
" [159]\n", | |
" [25]\n", | |
" [169]\n", | |
" [41]\n", | |
" [183]\n", | |
" [41]\n", | |
" [153]\n", | |
" [88]\n", | |
" [171]\n", | |
" [155]\n", | |
" [123]\n", | |
" [143]\n", | |
" [176]\n", | |
" [165]\n", | |
" [20]\n", | |
" [57]\n", | |
" [86]\n", | |
" [56]\n", | |
" [5]\n", | |
" [115]\n", | |
" [181]\n", | |
" [56]\n", | |
" [143]\n", | |
" [56]\n", | |
" [165]\n", | |
" [56]\n", | |
" [85]\n", | |
" [131]\n", | |
" [86]\n", | |
" [6]\n", | |
" [75]\n", | |
" [95]\n", | |
" [126]\n", | |
" [151]\n", | |
" [148]\n", | |
" [142]\n", | |
" [176]\n", | |
" [58]\n", | |
" [143]\n", | |
" [76]\n", | |
" [142]\n", | |
" [40]\n", | |
" [6]\n", | |
" [160]\n", | |
" [3]\n", | |
" [165]\n", | |
" [118]\n", | |
" [51]\n", | |
" [169]\n", | |
" [25]\n", | |
" [17]\n", | |
" [45]\n", | |
" [100]\n", | |
" [157]\n", | |
" [56]\n", | |
" [34]\n", | |
" [6]\n", | |
" [170]\n", | |
" [29]\n", | |
" [192]\n", | |
" [44]\n", | |
" [126]\n", | |
" [20]\n", | |
" [183]\n", | |
" [189]\n", | |
" [126]\n", | |
" [63]\n", | |
" [77]\n", | |
" [79]\n", | |
" [28]\n", | |
" [51]\n", | |
" [159]\n", | |
" [157]\n", | |
" [84]\n", | |
" [41]\n", | |
" [56]\n", | |
" [56]\n", | |
" [0]\n", | |
" [34]\n", | |
" [17]\n", | |
" [20]\n", | |
" [137]\n", | |
" [9]\n", | |
" [86]\n", | |
" [34]\n", | |
" [154]\n", | |
" [27]\n", | |
" [10]\n", | |
" [86]\n", | |
" [30]\n", | |
" [51]\n", | |
" [123]\n", | |
" [52]\n", | |
" [29]\n", | |
" [149]\n", | |
" [169]\n", | |
" [101]\n", | |
" [85]\n", | |
" [20]\n", | |
" [166]\n", | |
" [181]\n", | |
" [51]\n", | |
" [191]\n", | |
" [143]\n", | |
" [67]\n", | |
" [155]\n", | |
" [20]\n", | |
" [20]\n", | |
" [151]\n", | |
" [81]\n", | |
" [56]\n", | |
" [20]\n", | |
" [165]\n", | |
" [94]\n", | |
" [17]\n", | |
" [6]\n", | |
" [46]\n", | |
" [34]\n", | |
" [176]\n", | |
" [17]\n", | |
" [57]\n", | |
" [143]\n", | |
" [159]\n", | |
" [73]\n", | |
" [66]\n", | |
" [106]\n", | |
" [30]\n", | |
" [25]\n", | |
" [93]\n", | |
" [26]\n", | |
" [86]\n", | |
" [18]\n", | |
" [10]\n", | |
" [54]\n", | |
" [149]\n", | |
" [159]\n", | |
" [144]\n", | |
" [191]\n", | |
" [189]\n", | |
" [171]\n", | |
" [44]\n", | |
" [82]\n", | |
" [171]\n", | |
" [56]\n", | |
" [190]\n", | |
" [169]\n", | |
" [20]\n", | |
" [169]\n", | |
" [95]\n", | |
" [171]\n", | |
" [131]\n", | |
" [126]\n", | |
" [85]\n", | |
" [56]\n", | |
" [151]\n", | |
" [47]\n", | |
" [77]\n", | |
" [34]\n", | |
" [124]\n", | |
" [144]\n", | |
" [25]\n", | |
" [36]\n", | |
" [168]\n", | |
" [17]\n", | |
" [189]\n", | |
" [34]\n", | |
" [56]\n", | |
" [56]\n", | |
" [132]\n", | |
" [146]\n", | |
" [134]\n", | |
" [171]\n", | |
" [159]\n", | |
" [92]\n", | |
" [1]\n", | |
" [29]\n", | |
" [140]\n", | |
" [27]\n", | |
" [86]\n", | |
" [68]\n", | |
" [5]\n", | |
" [144]\n", | |
" [159]\n", | |
" [86]\n", | |
" [38]\n", | |
" [56]\n", | |
" [84]\n", | |
" [132]\n", | |
" [52]\n", | |
" [137]\n", | |
" [46]\n", | |
" [143]\n", | |
" [34]\n", | |
" [20]\n", | |
" [165]\n", | |
" [123]\n", | |
" [51]\n", | |
" [181]\n", | |
" [151]\n", | |
" [10]\n", | |
" [10]\n", | |
" [17]\n", | |
" [192]\n", | |
" [100]\n", | |
" [55]\n", | |
" [126]\n", | |
" [192]\n", | |
" [27]\n", | |
" [190]\n", | |
" [84]\n", | |
" [123]\n", | |
" [35]\n", | |
" [20]\n", | |
" [34]\n", | |
" [90]\n", | |
" [27]\n", | |
" [22]\n", | |
" [108]\n", | |
" [56]\n", | |
" [86]\n", | |
" [166]\n", | |
" [169]\n", | |
" [169]\n", | |
" [20]\n", | |
" [165]\n", | |
" [73]\n", | |
" [86]\n", | |
" [36]\n", | |
" [133]\n", | |
" [6]\n", | |
" [56]\n", | |
" [123]\n", | |
" [6]\n", | |
" [182]\n", | |
" [189]\n", | |
" [126]\n", | |
" [126]\n", | |
" [34]\n", | |
" [56]\n", | |
" [115]\n", | |
" [56]\n", | |
" [2]\n", | |
" [143]\n", | |
" [51]\n", | |
" [168]\n", | |
" [143]\n", | |
" [169]\n", | |
" [20]\n", | |
" [34]\n", | |
" [20]\n", | |
" [6]\n", | |
" [34]\n", | |
" [34]\n", | |
" [103]\n", | |
" [125]\n", | |
" [27]\n", | |
" [22]\n", | |
" [121]\n", | |
" [127]\n", | |
" [171]\n", | |
" [151]\n", | |
" [143]\n", | |
" [25]\n", | |
" [85]\n", | |
" [82]\n", | |
" [34]\n", | |
" [125]\n", | |
" [165]\n", | |
" [20]\n", | |
" [123]\n", | |
" [192]\n", | |
" [46]\n", | |
" [25]\n", | |
" [34]] [5 4 5 5 3 1 3 1 3 3 1 3 5 5 5 1 5 3 5 5 5 1 4 3 3 3 3 4 3 3 1 3 1 5 1 4 3\n", | |
" 5 3 3 1 3 1 1 1 3 1 3 3 1 1 1 3 3 5 1 3 3 5 1 3 1 3 3 3 3 1 4 3 5 5 1 3 3\n", | |
" 1 3 1 4 3 1 3 5 1 1 3 1 1 1 3 3 5 3 3 3 3 5 5 1 5 3 5 3 1 1 3 4 3 4 1 5 5\n", | |
" 5 1 3 1 3 4 3 1 3 1 1 3 5 1 3 4 5 3 3 3 3 1 3 4 1 3 3 4 3 5 1 5 1 3 3 3 1\n", | |
" 1 3 3 3 3 3 3 3 3 1 3 5 3 3 3 3 1 5 3 3 3 3 3 3 3 5 3 5 1 1 1 5 1 3 3 2 1\n", | |
" 3 3 3 3 1 3 1 5 5 3 1 5 3 1 1 1 1 3 1 4 3 5 3 3 3 3 1 1 3 1 1 5 5 3 1 3 1\n", | |
" 5 3 5 3 3 1 1 5 3 3 3 1 1 3 1 1 1 3 3 1 3 1 3 5 3 3 3 1 3 1 1 3 5 3 3 1 5\n", | |
" 3 5 1 1 1 5 3 5 5 3 5 3 3 3 1 5 1 3 5 1 1 5 3 3 1 1 3 5 1 3 3 5 3 3 3 3 3\n", | |
" 5 5 5 3 1 5 4 1 1 3 3 4 4 3 3 3 3 1 3 1 3 3 4 3 1 1 3 5 3 5 1 5 5 1 1 3 5\n", | |
" 3 1 3 3 5 1 1 5 1 5 1 4 3 3 3 1 3 1 5 3 5 1 1 1 1 3 5 3 3 1 1 4 3 3 3 3 1\n", | |
" 3 3 1 3 1 3 3 5 3 3 3 3 3 1 3 1 1 3 3 3 1 1 1 3 5 1 1 1 3 4 5 3 3 5 3 1 5\n", | |
" 3 3 1 3 3 3 3 3 4 3 3 1 1 3 3 3 1 1 1 3 3 3 5 3 3 3 5 3 1 3 3 1 1 3 1 3 1\n", | |
" 4 5 3 1 3 3 1 3 4 3 1 3 1 1 3 1 3 5 1 3 5 3 3 1 3 3 5 5 3 3 5 3 1 1 1 5 3\n", | |
" 3 3 3 3 1 1 1 3 3 5 1 3 3 1 3 3 3 3 5 5 5 1 5 3 5 1 1 1 5 3 5 5 3 3 3 1 3\n", | |
" 1 5 3 3 3 3 3 5 3 3 3 1 3 3 3 5 3 3 3 3 1 5 1 5 1 3 1 3 1 5 4 3 3 1 3 5 1\n", | |
" 3 3 3 3 3 3 1 1 1 1 3 1 1 1 3 5 5 4 3 1 3 5 3 3 3 1 1 1 1 3 3 3 5 5 3 1 3\n", | |
" 3 1 3 5 3 4 1 3 1 4 3 1 3 3 1 5 3 5 1 3 1 3 1 4 3 5 1 1 5 4 3 3 5 3 3 3 1\n", | |
" 1 3 3 5 1 3 1 1 5 3 1 1 1 1 3 1 5 1 3 5 3 1 1 3 3 5 5 1 1 5 3 3 1 1 3 1 3\n", | |
" 3 3 1 3 1 3 3 5 5 1 1 3 1 3 4 3 3 3 1 3 1 5 5 3 3 3 1 1 1 1 1 5 4 5 1 3 3\n", | |
" 3 1 3 3 3 3 3 3 1 3 1 5 1 5 1 3 1 1 3 1 3 5 1 1 3 3 5 3 1 1 1 1 3 1 0 3 5\n", | |
" 3 1 3 5 5 1 3 4 3 3 3 3 5 3 3 3 3 3 1 1 5 3 3 3 3 3 1 3 1 3 3 1 4 3 3 1 5\n", | |
" 3 3 3 3 4 1 1 5 5 1 1 1 5 1 3 1 5 3 4 3 3 3 1 5 3 1 3 1 3 1 5 3 1 1 3 1 3\n", | |
" 4 5 3 3 5 3 5 3 3 3 1 1 1 5 3 3 3 1 1 1 5 3 3 5 5 3 3 3 5 3 3 3 3 3 3 3 5\n", | |
" 5 3 4 3 3 3 4 5 1 3 4 0 1 3 3 5 1 3 5 3 3 3 3 1 3 3 3 3 3 4 1 3 1 5 3 5 1\n", | |
" 3 1 3 3 1 1 3 1 1 3 3 1 1 4 3 1 3 5 3 1 1 3 1 5 1 5 3 3 3 4 3 3 1 1 3 5 5\n", | |
" 5 3 3 0 3 3 3 4 3 3 1 3 3]\n" | |
] | |
} | |
], | |
"source": [ | |
"'''Translate classification values into numerical values'''\n", | |
"Le = LabelEncoder() #Use the LabelEncoder library\n", | |
"for i in range(len(X[0])): #Iterate over instances of the data\n", | |
" X[:, i] = Le.fit_transform(X[:, i]) #Use fit_transform to convert values \n", | |
"\n", | |
"print(set(y))\n", | |
"yRealValues, y = np.unique(y, return_inverse=True)\n", | |
"\n", | |
"y = np.ravel(y) #Put the classification into a single 1D array to avoid future warning and error messages\n", | |
"print(X, y) #Ensure that the transformations have taken place correctly" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 189, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"'''Simple function to train the models from the data'''\n", | |
"def trainModel(model):\n", | |
" model.fit(X_train, y_train) #Fit the model\n", | |
" prediction = model.predict(X_test) #Give the predictions for the y values\n", | |
" return round(metrics.accuracy_score(y_test, prediction), 3), classification_report(y_test, prediction) #Return the accuracy value and the report for the data" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 190, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"knn = neighbors.KNeighborsClassifier(n_neighbors=11, weights='uniform') #Define the KNN algorithm" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 191, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2) #Split the dataset" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 192, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"def trainData(model):\n", | |
" start_time = time.time() #Set the starting execution time\n", | |
" acc, rep = trainModel(model) #set knn accuracy and report values on uncleaned data\n", | |
" finish_time = round(time.time() - start_time, 3)\n", | |
" print(\"{} seconds to run for {}\".format(finish_time, model)) #Display the runtime\n", | |
" return acc, rep" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 193, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"0.011 seconds to run for KNeighborsClassifier(n_neighbors=11)\n" | |
] | |
}, | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"C:\\Users\\2011h\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\_classification.py:1221: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", | |
" _warn_prf(average, modifier, msg_start, len(result))\n" | |
] | |
} | |
], | |
"source": [ | |
"knn_acc, knn_rep = trainData(knn)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 194, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"0.059 seconds to run for LogisticRegression()\n" | |
] | |
}, | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"C:\\Users\\2011h\\anaconda3\\lib\\site-packages\\sklearn\\linear_model\\_logistic.py:762: ConvergenceWarning: lbfgs failed to converge (status=1):\n", | |
"STOP: TOTAL NO. of ITERATIONS REACHED LIMIT.\n", | |
"\n", | |
"Increase the number of iterations (max_iter) or scale the data as shown in:\n", | |
" https://scikit-learn.org/stable/modules/preprocessing.html\n", | |
"Please also refer to the documentation for alternative solver options:\n", | |
" https://scikit-learn.org/stable/modules/linear_model.html#logistic-regression\n", | |
" n_iter_i = _check_optimize_result(\n", | |
"C:\\Users\\2011h\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\_classification.py:1221: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", | |
" _warn_prf(average, modifier, msg_start, len(result))\n" | |
] | |
} | |
], | |
"source": [ | |
"log_acc, log_rep = trainData(LogisticRegression())" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 195, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Accuracy = 0.463\n", | |
" precision recall f1-score support\n", | |
"\n", | |
" 0 0.00 0.00 0.00 1\n", | |
" 1 0.46 0.44 0.45 64\n", | |
" 3 0.49 0.73 0.58 81\n", | |
" 4 0.00 0.00 0.00 9\n", | |
" 5 0.00 0.00 0.00 33\n", | |
"\n", | |
" accuracy 0.46 188\n", | |
" macro avg 0.19 0.23 0.21 188\n", | |
"weighted avg 0.37 0.46 0.40 188\n", | |
"\n", | |
"Accuracy = 0.431\n", | |
" precision recall f1-score support\n", | |
"\n", | |
" 0 0.00 0.00 0.00 1\n", | |
" 1 0.00 0.00 0.00 64\n", | |
" 3 0.43 1.00 0.60 81\n", | |
" 4 0.00 0.00 0.00 9\n", | |
" 5 0.00 0.00 0.00 33\n", | |
"\n", | |
" accuracy 0.43 188\n", | |
" macro avg 0.09 0.20 0.12 188\n", | |
"weighted avg 0.19 0.43 0.26 188\n", | |
"\n" | |
] | |
} | |
], | |
"source": [ | |
"print(\"Accuracy = {}\\n{}\".format(knn_acc, knn_rep)) #Display the accuracy and report for the entire dataset for knn\n", | |
"print(\"Accuracy = {}\\n{}\".format(log_acc, log_rep)) #Display the accuracy and report for the entire dataset for logistic regression" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 196, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"scaler = StandardScaler() #Define which scaler to use\n", | |
"scale_X = scaler.fit_transform(X) #Scale the entire dataset\n", | |
"X_train, X_test, y_train, y_test = train_test_split(scale_X, y, test_size=0.2) #Split the dataset" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 197, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"0.01 seconds to run for KNeighborsClassifier(n_neighbors=11)\n" | |
] | |
}, | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"C:\\Users\\2011h\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\_classification.py:1221: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", | |
" _warn_prf(average, modifier, msg_start, len(result))\n" | |
] | |
} | |
], | |
"source": [ | |
"knn_acc, knn_rep = trainData(knn)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 198, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"0.025 seconds to run for LogisticRegression()\n" | |
] | |
}, | |
{ | |
"name": "stderr", | |
"output_type": "stream", | |
"text": [ | |
"C:\\Users\\2011h\\anaconda3\\lib\\site-packages\\sklearn\\metrics\\_classification.py:1221: UndefinedMetricWarning: Precision and F-score are ill-defined and being set to 0.0 in labels with no predicted samples. Use `zero_division` parameter to control this behavior.\n", | |
" _warn_prf(average, modifier, msg_start, len(result))\n" | |
] | |
} | |
], | |
"source": [ | |
"log_acc, log_rep = trainData(LogisticRegression())" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 199, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"Accuracy = 0.394\n", | |
" precision recall f1-score support\n", | |
"\n", | |
" 0 0.00 0.00 0.00 1\n", | |
" 1 0.36 0.31 0.33 59\n", | |
" 3 0.47 0.62 0.54 88\n", | |
" 4 0.00 0.00 0.00 6\n", | |
" 5 0.05 0.03 0.04 34\n", | |
"\n", | |
" accuracy 0.39 188\n", | |
" macro avg 0.18 0.19 0.18 188\n", | |
"weighted avg 0.34 0.39 0.36 188\n", | |
"\n", | |
"Accuracy = 0.468\n", | |
" precision recall f1-score support\n", | |
"\n", | |
" 0 0.00 0.00 0.00 1\n", | |
" 1 0.00 0.00 0.00 59\n", | |
" 3 0.47 1.00 0.64 88\n", | |
" 4 0.00 0.00 0.00 6\n", | |
" 5 0.00 0.00 0.00 34\n", | |
"\n", | |
" accuracy 0.47 188\n", | |
" macro avg 0.09 0.20 0.13 188\n", | |
"weighted avg 0.22 0.47 0.30 188\n", | |
"\n" | |
] | |
} | |
], | |
"source": [ | |
"print(\"Accuracy = {}\\n{}\".format(knn_acc, knn_rep)) #Display the accuracy and report for the entire dataset for knn\n", | |
"print(\"Accuracy = {}\\n{}\".format(log_acc, log_rep)) #Display the accuracy and report for the entire dataset for logistic regression" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 203, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"'''Plot a confusion matrix'''\n", | |
"def c_m():\n", | |
" start_time = time.time() #Set the starting execution time\n", | |
" y_pred = accpred() #Get the predicted values for y\n", | |
" matrix = confusion_matrix(y_test, y_pred) #Build a confusion matrix for the predicted and actual values\n", | |
" #real_vals = ['K', 'P', 'S', 'D', 'F', 'G', 'C', 'H', 'L', 'A', 'I', 'X', 'W', 'Z', 'U', 'B', 'J', 'V', 'O'] #Set the prediction values back to diagnosis\n", | |
" real_vals = ['A', 'B', 'C', 'D', 'E']\n", | |
" df_cm = pd.DataFrame(matrix, columns=np.unique(real_vals), index = np.unique(real_vals)) #Set the columns as the real values\n", | |
" df_cm.index.name = 'Actual' #Label the x axis as Actual\n", | |
" df_cm.columns.name = 'Predicted' #Label the y axis as Predicted\n", | |
" plt.figure(figsize = (10,7)) #Set the size\n", | |
" sn.set(font_scale=1.4) #Label size\n", | |
" sn.heatmap(df_cm, cmap=\"Blues\", annot=True,annot_kws={\"size\": 16}) #Font size\n", | |
" finish_time = round(time.time() - start_time, 3)\n", | |
" print(\"{} seconds to run\".format(finish_time)) #Display the runtime" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 204, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"def accpred():\n", | |
" model.fit(X_train, y_train) #Fit the model\n", | |
" return model.predict(X_test)" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": 205, | |
"metadata": {}, | |
"outputs": [ | |
{ | |
"name": "stdout", | |
"output_type": "stream", | |
"text": [ | |
"KNN\n", | |
"0.07 seconds to run\n" | |
] | |
}, | |
{ | |
"data": { | |
"image/png": "iVBORw0KGgoAAAANSUhEUgAAAkAAAAG1CAYAAAARLUsBAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4yLjIsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy+WH4yJAAAgAElEQVR4nOzdd3gU5drH8d9uCukIBAg1QYSEJkUQpAZUFBA1IChyIkhHQFSs2FDwePRYMKAgEqRKpAZRwY4iR1AQKQIi0kILNYSQnuz7By/RJZANsNnJzn4/XHuds8/sPrl3XCY39z3zjMVms9kEAADgQaxGBwAAAOBqJEAAAMDjkAABAACPQwIEAAA8DgkQAADwOCRAAADA43gbHYCzZOYaHQFw9fLyWZWipHlZLUaHADiFn4t/g/s3Hem0uTI2TnbaXFeKChAAAPA4pqkAAQCAEmQxV82EBAgAADhmMVf72FzpHAAAQDFQAQIAAI7RAgMAAB6HFhgAAIB7owIEAAAcowUGAAA8Di0wAAAA90YFCAAAOEYLDAAAeBxaYAAAAO6NChAAAHCMFhgAAPA4tMAAAADcGxUgAADgGC0wAADgcWiBAQAAuDcqQAAAwDFaYAAAwOOYLAEy16cBAAAoBipAAADAMau5ToImAQIAAI7RAgMAAHBvVIAAAIBjJlsHiAQIAAA4RgsMAADAvZEAAQAAxywW5z0uw+7duxUZGVnosXDhQknS9u3bFRsbqyZNmig6Olrx8fHFmpcWGAAAcMygFtgff/yhoKAgrVy50m48ODhYJ0+eVP/+/XXrrbdq3Lhx2rx5s8aNG6fg4GD17t27yHmpABlg8cIF6t6ls25sdr1i779Xm37baHRIpsM+dp3vv/tWbVs2MzoMU+J77Brs52IyqAK0c+dO1a5dWxUrVrR7+Pn5acGCBfLx8dG4ceNUu3ZtxcTE6MEHH9S0adMczluqEqATJ04YHUKJW74sURNeflHdut+pNydOUnBwsIYPGagDB5KMDs002Meus+m3X/XcM0/IZjM6EvPhe+wa7OfS748//lDt2rUvum39+vVq3ry5vL3/bmi1bNlSSUlJSk5OLnLeUpEA/fzzz3r00UcVHR1tdCglymaz6b3JcerZq7eGPTRS7dp30DuTp+iacuU0d/Yso8MzBfaxa2RnZ2vmjOkaMqCfvLzopDsb32PXYD9fJovVaY/U1FQdOHCg0CM1NbXQj925c6eOHj2q++67T61bt9b999+vH3/8UZKUnJyssLAwu9dXqlRJknT48OEiP45hR64zZ85o6dKlSkhI0J49e+Tr66uYmBijwnGJ/fv36dChg4ru2KlgzMfHR+3aR2vNj6sNjMw82MeusWb1D/pw+jQ9MuYJpaSkaO6smUaHZCp8j12D/XyZnLgO0KxZszR58uRC4yNHjtSoUaMKnqenp+vAgQMqX768xowZo8DAQH3yyScaNGiQZsyYoczMTPn6+trNcf55VlZWkTG4PAHasmWLEhIS9PnnnysjI0MWi0UPPPCAhg4dqvLly7s6HJfat3evJKlGzXC78erVa+hA0n7l5eXJy8vLgMjMg33sGg0aNtKnK79WcEiIpr43yehwTIfvsWuwn43Tr1+/ixY9QkJC7J4HBARow4YN8vHxKUhsGjZsqL/++kvTp0+Xn5+fsrOz7d5z/nlAQECRMbgkAcrMzNSnn36q+fPn6/fff1dgYKA6d+6srl27asSIEerVq5fpkx9JOpuWJkkKDAi0Gw8MDFR+fr4yMjIUFBRkRGimwT52jUqVKxsdgqnxPXYN9vNlcuJVYCEhIYWSnUsJDAwsNFa3bl199913qlGjho4ePWq37fzzC1tjF3JJAtS+fXvl5+erffv2Gjp0qKKjowsyOZsHnT15/rNaLigjnh+3mmyZcSOwj2EGfI9dg/18mQzYHxs3btSAAQM0a9YsXX/99QXjW7duVZ06ddSoUSPNmzdPubm5BSdCr127VhEREapYsWKRc7vkJOjc3FwFBgbKz89POTk5ys3NdcWPLXWCgoMlSWfPnrUbT09Pl9Vqlb+Dch0cYx/DDPgeuwb7ufRr2LChqlevrueff14bNmzQX3/9pQkTJmjjxo0aPny4evbsqYyMDI0dO1a7du1SYmKiZs6cqaFDhzqc2yUVoDVr1mjlypVatGiRlixZIj8/P3Xo0EFdu3YtlHmbWc3wc33mAweSCv7/+ecREbU8al+UFPYxzIDvsWuwny+TAQsh+vj4aPr06XrzzTf18MMPKzU1VQ0aNNCMGTNUv359SVJ8fLxeeeUVxcTEqGLFihozZox69OjhcG6XJED+/v6KiYlRTEyM9u7dq0WLFmnZsmX64osvZLFYFB8fr0GDBl3yOn+zCA+PUFhYFX33zddq3aatJCknJ0erf1ildu2jjQ3OJNjHMAO+x67Bfr5MBq0EXblyZb3++uuX3N6oUSMlJCRc9rwuvwosIiJCjz/+uB577DGtWrVKS5Ys0fLly5WYmKhWrVrpww8/dHVILmOxWDRg0GC9+sp4hZQtqyZNmynho7lKOXVKsQ/0Nzo8U2Afwwz4HrsG+9mzGbYOkNVqVadOndSpUyedPHlSS5cu1ZIlS4wKx2Xu7dNXmVlZ+mjObM2dPVORUfU0ZVq8qteoYXRopsE+hhnwPXYN9vNlMFlL0GIzyWVYmZ55XjVMJi/fFH8dSzUvq7kO4vBcfi4uYfjf9b7T5spY5vgk5ZJWKm6FAQAA4ErcxAcAADhmshYYCRAAAHDMoKvASoq5Pg0AAEAxUAECAACO0QIDAACexmwrY9MCAwAAHocKEAAAcMhsFSASIAAA4Ji58h9aYAAAwPNQAQIAAA7RAgMAAB7HbAkQLTAAAOBxqAABAACHzFYBIgECAAAOmS0BogUGAAA8DhUgAADgmLkKQCRAAADAMVpgAAAAbo4KEAAAcMhsFSASIAAA4JDZEiBaYAAAwONQAQIAAA6ZrQJEAgQAABwzV/5DCwwAAHgeKkAAAMAhWmAAAMDjmC0BogUGAAA8DhUgAADgkNkqQCRAAADAMXPlP7TAAACA56EChGJbse2I0SGY3ns/7DU6BNNbPqyV0SGY3uGUTKND8Ai1Qv1c+vNogcEjkfwAgGczWwJECwwAAHgcKkAAAMAhs1WASIAAAIBDZkuAaIEBAACPQwUIAAA4Zq4CEAkQAABwjBYYAACAm6MCBAAAHDJbBYgECAAAOEQCBAAAPI+58h/OAQIAAJ6HChAAAHCIFhgAAPA4ZkuAaIEBAACPQwUIAAA4ZLYKEAkQAABwyGwJEC0wAADgcagAAQAAx8xVACIBAgAAjtECAwAAcHNUgAAAgENUgAAAgMexWJz3uFJ79uxR06ZNtXDhwoKx7du3KzY2Vk2aNFF0dLTi4+OLNRcJEAAAKPVycnL0+OOPKz09vWDs5MmT6t+/v8LDw7V48WKNHj1acXFxWrBggcP5aIEBAACHjG6BTZo0SYGBgXZjCxYskI+Pj8aNGydvb2/Vrl1b+/bt07Rp09S7d+8i56MCBAAAHDKyBfbLL7/o448/1muvvWY3vn79ejVv3lze3n/Xc1q2bKmkpCQlJycXOScJEAAAKLVSU1P15JNP6rnnnlOVKlXstiUnJyssLMxurFKlSpKkw4cPFzkvLTAAAOCQM1tgqampSk1NLTQeEhKikJAQu7Fx48apSZMm6t69e6HXZ2ZmytfX127s/POsrKwiYyABAgAADjnzFKBZs2Zp8uTJhcZHjhypUaNGFTxPTEzU+vXrtXz58ovO4+fnp+zsbLux888DAgKKjIEECAAAuFS/fv0UExNTaPzC6s/ixYt14sQJRUdH242//PLLmjlzpqpWraqjR4/abTv//MLW2IVIgAAAgENWq/NKQBdrdV3MG2+8oczMTLuxzp07a+TIkbrjjjv02Wefad68ecrNzS04EXrt2rWKiIhQxYoVi5ybBMgAixcu0MwZ05WcfESRUfX0+JNPq3GTpkaH5fa2/bJGCXHj9fKclQVjOVlZ+nrhh9q05ltlnE1TtWvrqlu/h1StVl0DI3U/3laL/tWimm6JrKgQf2/tSE7TtDX7tOtYeqHXhvh5K75vY32yJVlzfj5gQLTmwbGiZG369Rc9NWrQJbfPWrxClcOqujCi0s2Iq+ArV6580fHy5curWrVq6tmzp6ZPn66xY8dqyJAh2rp1q2bOnKkXX3zR4dxcBeZiy5clasLLL6pb9zv15sRJCg4O1vAhA3XgQJLRobm1fX9s1ceTJkg2+/FPZ03WTysT1eGuPur72DhZrVZ98NKjOn3i6MUnwkUNbxuuuxuHKeHXQ3rp853Kys3XG3fXV6Vg30KvHdE+Qtf4+xgQpblwrCh510XW09vvz7F7vDZpukLKXqNmLVqpYqWiWygwXoUKFRQfH6/9+/crJiZGcXFxGjNmjHr06OHwvVSAXMhms+m9yXHq2au3hj00UpLU6qbWuuuO2zV39iw9PfY5gyN0P7k52Vrz+SJ9mTBDvmX8lJefW7AtPz9fG3/4Sm3v6KWbbj/Xaw6PbKjxA+/SpjXfqv2d9xkVtlsJ8PVSlwaVFP/Tfn269dy6GlsOpWrxoOa6JbKiPlp/sOC1rSKu0Q01yiorN9+ocE2BY4VrBAYGqV7D6+3Gpk58XRaLRU+++KqsVmoE/2T0Qojn/fHHH3bPGzVqpISEhMueh/+6LrR//z4dOnRQ0R07FYz5+PioXftorflxtYGRua8/Nq7Td0vnqWvsMLXuYp/x22z5ysvNkV/A3yuH+pTxk5e3j9LTCl9+iYvLzMnTqIVb9cX2YwVjufk22ST5eP19QAzw9dLD0bX0/pp9yskjAboaHCuMsW/PX/pkSYIeGDxC15Qrb3Q4pU5puBeYMxmeAJ05c0bz58/XvHnzCp3JbTb79u6VJNWoGW43Xr16DR1I2q+8vDwDonJv1WtH6al3E9Sm6z2F/lZ5eXnrxlu7638rlihp13alp53RyrnvKzc7Sw1bdjAoYveTb5P+Op6utKw8WSSFBZfR4zfXlmzSN38cL3jd0DY1tf9khr7acfzSk6FYOFYYY9a0SapeI1xd7uxpdChwAZe2wObNm6dFixZJknr37q2uXbuqR48eOnjwXAn9rbfe0pw5c1S/fn1XhuUyZ9PSJEmBAfb3MgkMDFR+fr4yMjIUFBRkRGhuq2yFos/yv6VXfyX9uU3vPjNM0rkSbq8Rz6h67UhXhGc6fVtUU7+WNSRJM9cm6UDKuaszmlQLUcc6oRoyf7OR4ZkGxwrXO3LogNb++L0efvJ5Wl+XUFpaYM7isgRo2rRpmjJliu688075+flp8uTJWrp0qcLCwvTRRx8pLy9Pzz77rKZOnaq4uDhXheVSNtu5M3Qv/BKdH7ea7MtltOysTE15boRyc3LUe+RYhZSvqK3rvtfiKa+rTECgGrRoa3SIbmfN7lPafDBVjauX1b9aVJO3l0UJGw7p0U7XavbPB3TkTNErr6J4OFa43opPligoOESdbrvD6FBKLRKgK7R48WL9+9//VpcuXSRJ3bp1U+/evRUfH19wmdujjz6qoUOHuioklwsKDpYknT17VhVCQwvG09PTZbVa5e9g1Upcnt/X/aDjhw9oxKtTVeO6epKk6xo1U/qZVH0S/w4J0BXYc+LcZe+bD51RgI9VvZtWlb+Pl85m5WnZ5iP65zIhVklWy7kWGi4PxwrX+2n1d7qpXcdCt1WAebmsznfo0CFdf/3fZ9tff/318vb2truxWZUqVS56bxCzqBl+rp9/4WWsBw4kKSKilumya6OlnDgqq9VL1WtH2Y1HRDXS6RNHlZVReA0bFFYuwEe31asofx/7w8WuY+ny9baqe8PKqlMpUJ8/1FJfjGilL0a0UlAZb/3rxur6YkQrg6J2bxwrXOvokcPav3e32nS42ehQSjWznQTtsgpQTk6O/Pz87MZ8fHzk4/P3eiEWi0X5+ea9eiQ8PEJhYVX03Tdfq3Wbc9WHnJwcrf5hldq1jzY2OBMKrVJD+fl5Svpzm2rWbVAwnvTnNgWGXCNfP38Do3MfQb5e5056luyuBLuhZlmdSs/W08t2yNvL/oj237vr67s/j+vz3819YUNJ4VjhWn9s3ypJimrQyOBISjezJd6sA+RCFotFAwYN1quvjFdI2bJq0rSZEj6aq5RTpxT7QH+jwzOd+s3bqErEdZr31jh17jNQIeVCtX39/7Rx9Ve6c8Bo0/1lLilJKZn6YdcJDWkTLm+rRYdTs9T22vK6Naqi3vjmL+0+UbiSlm+z6cTZHO08etaAiN0fxwrX2rt7l8peU04hZa8xOhS4kEsToOnTp9tVgXJzczVz5syC+4FkZGS4MhxD3NunrzKzsvTRnNmaO3umIqPqacq0eFWvUcPo0EzHy9tbg154SyvmTNXns95TTna2KlWvqb6PvaRGN0UbHZ5bef3rvxTborruu6Gaygf6aP/JDL28YqdW/3XS6NBMi2OF65w+dVKBQcFGh1Hqme3fjBbb+csKSlinTp0cv+j/ffvtt5c9f2au49fgyq3YdsToEDzCez/sNToE01s+jPOSStrhlEzHL8JVqxXq5/hFTnTD+O+cNteG5zs6ba4r5bIK0JUkNQAAACWBc4AAAIBDZmuBkQABAACHzHbhCOt9AwAAj0MFCAAAOGSyAhAJEAAAcIwWGAAAgJujAgQAABwyWQGIBAgAADhGCwwAAMDNUQECAAAOmawARAIEAAAcowUGAADg5qgAAQAAh0xWACIBAgAAjtECAwAAcHNUgAAAgENmqwCRAAEAAIdMlv/QAgMAAJ6HChAAAHCIFhgAAPA4Jst/SIAAAIBjZqsAcQ4QAADwOFSAAACAQyYrAJEAAQAAx6wmy4BogQEAAI9DBQgAADhksgIQCRAAAHCMq8AAAADcHBUgAADgkNVcBSASIAAA4JjZWmAkQCiWLvXDtGzLQaPDML0f4+caHYL5DWtldASmV+UaP23Yc8roMEyvVqif0SG4NRIgFAvJD4DiIvkxJ5MVgEiAAACAYxaZKwPiKjAAAOBxqAABAACHuAoMAAB4HLNdBUYLDAAAeBwqQAAAwCGTFYBIgAAAgGNWk2VAtMAAAIDHoQIEAAAcMlkBiAQIAAA4xlVgAAAAbo4KEAAAcMhkBSASIAAA4BhXgQEAALg5KkAAAMAhc9V/qAABAIBisFgsTntcjuTkZD322GNq2bKlmjZtqiFDhujPP/8s2L59+3bFxsaqSZMmio6OVnx8fLHmvWQFqG/fvsUOzmKxaO7cucV+PQAAgCM2m02DBw9WUFCQ4uPj5e/vr3feeUf9+/fXl19+qaysLPXv31+33nqrxo0bp82bN2vcuHEKDg5W7969i5z7kgmQ1UpxCAAAnGM1oAd2/Phx1a5dWw8//LBq1aolSXrooYd01113aefOnVq3bp18fHw0btw4eXt7q3bt2tq3b5+mTZt25QnQnDlznPspAACA2zJiIcSKFSvq7bffLnh+/PhxxcfHq1KlSqpbt67effddNW/eXN7ef6czLVu21JQpU5ScnKzKlStfcm6nnAS9c+dO1a1b1xlTAQAAk0tNTVVqamqh8ZCQEIWEhFz0PU8//bSWLl0qX19fTZkyRYGBgUpOTtZ1111n97pKlSpJkg4fPnz1CdCpU6f01ltv6eeff1Z2drZsNpskKT8/XxkZGUpLS9P27duLMxUAAHBDziwAzZo1S5MnTy40PnLkSI0aNeqi7xk4cKD69u2rjz76SCNGjNC8efOUmZkpX19fu9edf56VlVVkDMVKgP7zn//o008/Vbt27bRnzx75+/srIiJCGzZs0NmzZzV+/PjiTAMAANyUM1tg/fr1U0xMTKHxS1V/JKlOnTqSpFdeeUWbNm3SnDlz5Ofnp+zsbLvXnX8eEBBQZAzFSoBWr16thx56SCNGjNDMmTO1du1aTZw4UWlpaerbt6927txZnGkAAACKbHX909GjR7Vu3TrdcccdBQmY1WrVddddp+TkZIWFheno0aOF3iNJYWFhRc5drEu9UlNT1axZM0nnMrCtW7dKkoKCgvTggw/q+++/L840AADATVktznsU1+HDh/X4449rw4YNBWM5OTnatm2bateurRYtWmjDhg3Kzc0t2L527VpFRESoYsWKRX+e4gRQrly5gpOVwsPDdeLECZ06dUqSVLlyZSUnJxf/0wAAALdjxEKIjRo1UsuWLfXCCy9o/fr12rlzp5566imlpKSof//+6tmzpzIyMjR27Fjt2rVLiYmJmjlzpoYOHepw7mIlQDfddJPef/997du3T9WrV1f58uWVmJgoSfr2229Vrly5Yn8YAACA4rBarZo0aZJuuOEGPfLII+rVq5dOnz6tefPmqUaN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\n", | |
"text/plain": [ | |
"<Figure size 720x504 with 2 Axes>" | |
] | |
}, | |
"metadata": {}, | |
"output_type": "display_data" | |
} | |
], | |
"source": [ | |
"'''Display the confusion matrix for knn'''\n", | |
"model = knn #Set the model as knn\n", | |
"print(\"KNN\")\n", | |
"c_m()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [ | |
"'''Display the confusion matrix for logistic regession'''\n", | |
"model = LogisticRegression() #Set the model as logistic regression\n", | |
"print(\"Logistic Regression\")\n", | |
"c_m()" | |
] | |
}, | |
{ | |
"cell_type": "code", | |
"execution_count": null, | |
"metadata": {}, | |
"outputs": [], | |
"source": [] | |
} | |
], | |
"metadata": { | |
"kernelspec": { | |
"display_name": "Python 3", | |
"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.8.3" | |
} | |
}, | |
"nbformat": 4, | |
"nbformat_minor": 4 | |
} |