[c1ec9e]: / code / Classifier_SVM_Personal.ipynb

Download this file

1 lines (1 with data), 33.4 kB

{"nbformat":4,"nbformat_minor":0,"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.7.4"},"colab":{"name":"Classifier_SVM_Personal.ipynb","provenance":[]}},"cells":[{"cell_type":"markdown","metadata":{"id":"iA15njZLZAC7"},"source":["# SVM Personal"]},{"cell_type":"code","metadata":{"id":"eCjn8SE3ZAC7"},"source":["import os\n","import numpy as np\n","import pandas as pd\n","from matplotlib import pyplot as plt\n","import scipy\n","import scipy.sparse as sp\n","\n","from sklearn.model_selection import train_test_split\n","from sklearn import preprocessing\n","import sklearn.metrics\n","from sklearn.model_selection import GridSearchCV, StratifiedKFold, cross_val_score\n","from sklearn.ensemble import RandomForestClassifier\n","import sklearn.svm\n","from sklearn import svm\n","from sklearn.model_selection import KFold\n","from sklearn.preprocessing import StandardScaler\n","from sklearn.metrics import f1_score, accuracy_score\n","from sklearn.model_selection import cross_validate\n","from sklearn.metrics import confusion_matrix\n","from sklearn.metrics import classification_report\n","from sklearn.metrics import make_scorer\n","\n","from os import listdir, walk\n","from os.path import isfile, join, relpath\n","\n","import scipy\n","from scipy.io import arff\n","import arff\n","from io import StringIO\n","import math\n","\n","import warnings\n","#warnings.filterwarnings('always')  # \"error\", \"ignore\", \"always\", \"default\", \"module\" or \"once\"\n","from prettytable import PrettyTable"],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"gpLWv5wBZAC8"},"source":["svm_feature_imp and svm_feature function is used to plot the feature importance graph. Note: Only linear kernel can be used for this.\n","Link Reference: https://stackoverflow.com/questions/41592661/determining-the-most-contributing-features-for-svm-classifier-in-sklearn"]},{"cell_type":"code","metadata":{"id":"dEi2j8BZZAC8"},"source":["def svm_feature_imp(coef, names):\n","    imp = coef\n","    imp,names = zip(*sorted(zip(imp,names)))\n","    #print(imp + names)\n","    #print(names[-10:])\n","    plt.barh(range(len(names)), imp, align='center')\n","    plt.yticks(range(len(names)), names)\n","    plt.show()"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"foxoPePyZAC8"},"source":["def svm_feature(X,y):\n","    features_names = [\"X0\",\"X1\",\"X2\",\"X3\",\"X4\",\"X5\",\"X6\",\"X7\",\"X8\",\"X9\",\"Y0\",\"Y1\",\"Y2\",\"Y3\",\"Y4\",\"Y5\",\"Y6\",\"Y7\",\"Y8\",\"Y9\",\"Z0\",\"Z1\",\"Z2\",\"Z3\",\"Z4\",\"Z5\",\"Z6\",\"Z7\",\"Z8\",\"Z9\",\"XAVG\",\"YAVG\",\"ZAVG\",\"XPEAK\",\"YPEAK\",\"ZPEAK\",\"XABSOLDEV\",\"YABSOLDEV\",\"ZABSOLDEV\",\"XSTANDDEV\",\"YSTANDDEV\",\"ZSTANDDEV\",\"RESULTANT\"] \n","    svm = sklearn.svm.SVC(kernel='linear')\n","    svm.fit(X, y.ravel())\n","    plt.figure(figsize=(20,10))\n","    names = svm_feature_imp(svm.coef_[0], features_names)"],"execution_count":null,"outputs":[]},{"cell_type":"markdown","metadata":{"id":"tLPCRqOUZAC8"},"source":["Read all the files"]},{"cell_type":"code","metadata":{"id":"vAQ-jzJlZAC8"},"source":["file_dict = {0 : \"Phone Accel\" , 1:\"Watch Accel\", 2:\"Phone Gyro\", 3:\"Watch Gyro\"}"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"4XphWjHQZADN","outputId":"1497f248-ee20-4497-b3fa-ae818c6959cf"},"source":["file1 = [\"./data/transformed_data/phone/accel/\" + f for f in listdir(\"./data/transformed_data/phone/accel/\") if f.endswith('.csv')]\n","file2 = [\"./data/transformed_data/watch/accel/\" + f for f in listdir(\"./data/transformed_data/watch/accel/\") if f.endswith('.csv')]\n","file3 = [\"./data/transformed_data/phone/gyro/\" + f for f in listdir(\"./data/transformed_data/phone/gyro/\") if f.endswith('.csv')]\n","file4 = [\"./data/transformed_data/watch/gyro/\" + f for f in listdir(\"./data/transformed_data/watch/gyro/\") if f.endswith('.csv')]\n","files = [file1] + [file2] + [file3] + [file4]\n","print (files)"],"execution_count":null,"outputs":[{"output_type":"stream","text":["[['./data/transformed_data/phone/accel/data_1600_accel_phone.csv', './data/transformed_data/phone/accel/data_1601_accel_phone.csv', './data/transformed_data/phone/accel/data_1602_accel_phone.csv', './data/transformed_data/phone/accel/data_1603_accel_phone.csv', './data/transformed_data/phone/accel/data_1604_accel_phone.csv', './data/transformed_data/phone/accel/data_1605_accel_phone.csv', './data/transformed_data/phone/accel/data_1606_accel_phone.csv', './data/transformed_data/phone/accel/data_1607_accel_phone.csv', './data/transformed_data/phone/accel/data_1608_accel_phone.csv', './data/transformed_data/phone/accel/data_1609_accel_phone.csv', './data/transformed_data/phone/accel/data_1610_accel_phone.csv', './data/transformed_data/phone/accel/data_1611_accel_phone.csv', './data/transformed_data/phone/accel/data_1612_accel_phone.csv', './data/transformed_data/phone/accel/data_1613_accel_phone.csv', './data/transformed_data/phone/accel/data_1615_accel_phone.csv', './data/transformed_data/phone/accel/data_1616_accel_phone.csv', './data/transformed_data/phone/accel/data_1617_accel_phone.csv', './data/transformed_data/phone/accel/data_1618_accel_phone.csv', './data/transformed_data/phone/accel/data_1619_accel_phone.csv', './data/transformed_data/phone/accel/data_1620_accel_phone.csv', './data/transformed_data/phone/accel/data_1621_accel_phone.csv', './data/transformed_data/phone/accel/data_1622_accel_phone.csv', './data/transformed_data/phone/accel/data_1623_accel_phone.csv', './data/transformed_data/phone/accel/data_1624_accel_phone.csv', './data/transformed_data/phone/accel/data_1625_accel_phone.csv', './data/transformed_data/phone/accel/data_1626_accel_phone.csv', './data/transformed_data/phone/accel/data_1627_accel_phone.csv', './data/transformed_data/phone/accel/data_1628_accel_phone.csv', './data/transformed_data/phone/accel/data_1629_accel_phone.csv', './data/transformed_data/phone/accel/data_1630_accel_phone.csv', './data/transformed_data/phone/accel/data_1631_accel_phone.csv', './data/transformed_data/phone/accel/data_1632_accel_phone.csv', './data/transformed_data/phone/accel/data_1633_accel_phone.csv', './data/transformed_data/phone/accel/data_1634_accel_phone.csv', './data/transformed_data/phone/accel/data_1635_accel_phone.csv', './data/transformed_data/phone/accel/data_1636_accel_phone.csv', './data/transformed_data/phone/accel/data_1637_accel_phone.csv', './data/transformed_data/phone/accel/data_1638_accel_phone.csv', './data/transformed_data/phone/accel/data_1639_accel_phone.csv', './data/transformed_data/phone/accel/data_1640_accel_phone.csv', './data/transformed_data/phone/accel/data_1641_accel_phone.csv', './data/transformed_data/phone/accel/data_1642_accel_phone.csv', './data/transformed_data/phone/accel/data_1643_accel_phone.csv', './data/transformed_data/phone/accel/data_1644_accel_phone.csv', './data/transformed_data/phone/accel/data_1645_accel_phone.csv', './data/transformed_data/phone/accel/data_1646_accel_phone.csv', './data/transformed_data/phone/accel/data_1647_accel_phone.csv', './data/transformed_data/phone/accel/data_1648_accel_phone.csv', './data/transformed_data/phone/accel/data_1649_accel_phone.csv', './data/transformed_data/phone/accel/data_1650_accel_phone.csv'], ['./data/transformed_data/watch/accel/data_1600_accel_watch.csv', './data/transformed_data/watch/accel/data_1601_accel_watch.csv', './data/transformed_data/watch/accel/data_1602_accel_watch.csv', './data/transformed_data/watch/accel/data_1603_accel_watch.csv', './data/transformed_data/watch/accel/data_1604_accel_watch.csv', './data/transformed_data/watch/accel/data_1605_accel_watch.csv', './data/transformed_data/watch/accel/data_1606_accel_watch.csv', './data/transformed_data/watch/accel/data_1607_accel_watch.csv', './data/transformed_data/watch/accel/data_1608_accel_watch.csv', './data/transformed_data/watch/accel/data_1609_accel_watch.csv', './data/transformed_data/watch/accel/data_1610_accel_watch.csv', './data/transformed_data/watch/accel/data_1611_accel_watch.csv', './data/transformed_data/watch/accel/data_1612_accel_watch.csv', './data/transformed_data/watch/accel/data_1613_accel_watch.csv', './data/transformed_data/watch/accel/data_1615_accel_watch.csv', './data/transformed_data/watch/accel/data_1616_accel_watch.csv', './data/transformed_data/watch/accel/data_1617_accel_watch.csv', './data/transformed_data/watch/accel/data_1618_accel_watch.csv', './data/transformed_data/watch/accel/data_1619_accel_watch.csv', './data/transformed_data/watch/accel/data_1620_accel_watch.csv', './data/transformed_data/watch/accel/data_1621_accel_watch.csv', './data/transformed_data/watch/accel/data_1622_accel_watch.csv', './data/transformed_data/watch/accel/data_1623_accel_watch.csv', './data/transformed_data/watch/accel/data_1624_accel_watch.csv', './data/transformed_data/watch/accel/data_1625_accel_watch.csv', './data/transformed_data/watch/accel/data_1626_accel_watch.csv', './data/transformed_data/watch/accel/data_1627_accel_watch.csv', './data/transformed_data/watch/accel/data_1628_accel_watch.csv', './data/transformed_data/watch/accel/data_1629_accel_watch.csv', './data/transformed_data/watch/accel/data_1630_accel_watch.csv', './data/transformed_data/watch/accel/data_1631_accel_watch.csv', './data/transformed_data/watch/accel/data_1632_accel_watch.csv', './data/transformed_data/watch/accel/data_1633_accel_watch.csv', './data/transformed_data/watch/accel/data_1634_accel_watch.csv', './data/transformed_data/watch/accel/data_1635_accel_watch.csv', './data/transformed_data/watch/accel/data_1636_accel_watch.csv', './data/transformed_data/watch/accel/data_1637_accel_watch.csv', './data/transformed_data/watch/accel/data_1638_accel_watch.csv', './data/transformed_data/watch/accel/data_1639_accel_watch.csv', './data/transformed_data/watch/accel/data_1640_accel_watch.csv', './data/transformed_data/watch/accel/data_1641_accel_watch.csv', './data/transformed_data/watch/accel/data_1642_accel_watch.csv', './data/transformed_data/watch/accel/data_1643_accel_watch.csv', './data/transformed_data/watch/accel/data_1644_accel_watch.csv', './data/transformed_data/watch/accel/data_1645_accel_watch.csv', './data/transformed_data/watch/accel/data_1646_accel_watch.csv', './data/transformed_data/watch/accel/data_1647_accel_watch.csv', './data/transformed_data/watch/accel/data_1648_accel_watch.csv', './data/transformed_data/watch/accel/data_1649_accel_watch.csv', './data/transformed_data/watch/accel/data_1650_accel_watch.csv'], ['./data/transformed_data/phone/gyro/data_1600_gyro_phone.csv', './data/transformed_data/phone/gyro/data_1601_gyro_phone.csv', './data/transformed_data/phone/gyro/data_1602_gyro_phone.csv', './data/transformed_data/phone/gyro/data_1603_gyro_phone.csv', './data/transformed_data/phone/gyro/data_1604_gyro_phone.csv', './data/transformed_data/phone/gyro/data_1605_gyro_phone.csv', './data/transformed_data/phone/gyro/data_1606_gyro_phone.csv', './data/transformed_data/phone/gyro/data_1607_gyro_phone.csv', './data/transformed_data/phone/gyro/data_1608_gyro_phone.csv', './data/transformed_data/phone/gyro/data_1609_gyro_phone.csv', './data/transformed_data/phone/gyro/data_1610_gyro_phone.csv', './data/transformed_data/phone/gyro/data_1611_gyro_phone.csv', './data/transformed_data/phone/gyro/data_1612_gyro_phone.csv', './data/transformed_data/phone/gyro/data_1613_gyro_phone.csv', './data/transformed_data/phone/gyro/data_1615_gyro_phone.csv', './data/transformed_data/phone/gyro/data_1616_gyro_phone.csv', './data/transformed_data/phone/gyro/data_1617_gyro_phone.csv', './data/transformed_data/phone/gyro/data_1618_gyro_phone.csv', './data/transformed_data/phone/gyro/data_1619_gyro_phone.csv', './data/transformed_data/phone/gyro/data_1620_gyro_phone.csv', './data/transformed_data/phone/gyro/data_1621_gyro_phone.csv', './data/transformed_data/phone/gyro/data_1622_gyro_phone.csv', './data/transformed_data/phone/gyro/data_1623_gyro_phone.csv', './data/transformed_data/phone/gyro/data_1624_gyro_phone.csv', './data/transformed_data/phone/gyro/data_1625_gyro_phone.csv', './data/transformed_data/phone/gyro/data_1626_gyro_phone.csv', './data/transformed_data/phone/gyro/data_1627_gyro_phone.csv', './data/transformed_data/phone/gyro/data_1628_gyro_phone.csv', './data/transformed_data/phone/gyro/data_1629_gyro_phone.csv', './data/transformed_data/phone/gyro/data_1630_gyro_phone.csv', './data/transformed_data/phone/gyro/data_1631_gyro_phone.csv', './data/transformed_data/phone/gyro/data_1632_gyro_phone.csv', './data/transformed_data/phone/gyro/data_1633_gyro_phone.csv', './data/transformed_data/phone/gyro/data_1634_gyro_phone.csv', './data/transformed_data/phone/gyro/data_1635_gyro_phone.csv', './data/transformed_data/phone/gyro/data_1636_gyro_phone.csv', './data/transformed_data/phone/gyro/data_1637_gyro_phone.csv', './data/transformed_data/phone/gyro/data_1638_gyro_phone.csv', './data/transformed_data/phone/gyro/data_1639_gyro_phone.csv', './data/transformed_data/phone/gyro/data_1640_gyro_phone.csv', './data/transformed_data/phone/gyro/data_1641_gyro_phone.csv', './data/transformed_data/phone/gyro/data_1642_gyro_phone.csv', './data/transformed_data/phone/gyro/data_1643_gyro_phone.csv', './data/transformed_data/phone/gyro/data_1644_gyro_phone.csv', './data/transformed_data/phone/gyro/data_1645_gyro_phone.csv', './data/transformed_data/phone/gyro/data_1646_gyro_phone.csv', './data/transformed_data/phone/gyro/data_1647_gyro_phone.csv', './data/transformed_data/phone/gyro/data_1648_gyro_phone.csv', './data/transformed_data/phone/gyro/data_1649_gyro_phone.csv', './data/transformed_data/phone/gyro/data_1650_gyro_phone.csv'], ['./data/transformed_data/watch/gyro/data_1600_gyro_watch.csv', './data/transformed_data/watch/gyro/data_1601_gyro_watch.csv', './data/transformed_data/watch/gyro/data_1602_gyro_watch.csv', './data/transformed_data/watch/gyro/data_1603_gyro_watch.csv', './data/transformed_data/watch/gyro/data_1604_gyro_watch.csv', './data/transformed_data/watch/gyro/data_1605_gyro_watch.csv', './data/transformed_data/watch/gyro/data_1606_gyro_watch.csv', './data/transformed_data/watch/gyro/data_1607_gyro_watch.csv', './data/transformed_data/watch/gyro/data_1608_gyro_watch.csv', './data/transformed_data/watch/gyro/data_1609_gyro_watch.csv', './data/transformed_data/watch/gyro/data_1610_gyro_watch.csv', './data/transformed_data/watch/gyro/data_1611_gyro_watch.csv', './data/transformed_data/watch/gyro/data_1612_gyro_watch.csv', './data/transformed_data/watch/gyro/data_1613_gyro_watch.csv', './data/transformed_data/watch/gyro/data_1615_gyro_watch.csv', './data/transformed_data/watch/gyro/data_1616_gyro_watch.csv', './data/transformed_data/watch/gyro/data_1617_gyro_watch.csv', './data/transformed_data/watch/gyro/data_1618_gyro_watch.csv', './data/transformed_data/watch/gyro/data_1619_gyro_watch.csv', './data/transformed_data/watch/gyro/data_1620_gyro_watch.csv', './data/transformed_data/watch/gyro/data_1621_gyro_watch.csv', './data/transformed_data/watch/gyro/data_1622_gyro_watch.csv', './data/transformed_data/watch/gyro/data_1623_gyro_watch.csv', './data/transformed_data/watch/gyro/data_1624_gyro_watch.csv', './data/transformed_data/watch/gyro/data_1625_gyro_watch.csv', './data/transformed_data/watch/gyro/data_1626_gyro_watch.csv', './data/transformed_data/watch/gyro/data_1627_gyro_watch.csv', './data/transformed_data/watch/gyro/data_1628_gyro_watch.csv', './data/transformed_data/watch/gyro/data_1629_gyro_watch.csv', './data/transformed_data/watch/gyro/data_1630_gyro_watch.csv', './data/transformed_data/watch/gyro/data_1631_gyro_watch.csv', './data/transformed_data/watch/gyro/data_1632_gyro_watch.csv', './data/transformed_data/watch/gyro/data_1633_gyro_watch.csv', './data/transformed_data/watch/gyro/data_1634_gyro_watch.csv', './data/transformed_data/watch/gyro/data_1635_gyro_watch.csv', './data/transformed_data/watch/gyro/data_1636_gyro_watch.csv', './data/transformed_data/watch/gyro/data_1637_gyro_watch.csv', './data/transformed_data/watch/gyro/data_1638_gyro_watch.csv', './data/transformed_data/watch/gyro/data_1639_gyro_watch.csv', './data/transformed_data/watch/gyro/data_1640_gyro_watch.csv', './data/transformed_data/watch/gyro/data_1641_gyro_watch.csv', './data/transformed_data/watch/gyro/data_1642_gyro_watch.csv', './data/transformed_data/watch/gyro/data_1643_gyro_watch.csv', './data/transformed_data/watch/gyro/data_1644_gyro_watch.csv', './data/transformed_data/watch/gyro/data_1645_gyro_watch.csv', './data/transformed_data/watch/gyro/data_1646_gyro_watch.csv', './data/transformed_data/watch/gyro/data_1647_gyro_watch.csv', './data/transformed_data/watch/gyro/data_1648_gyro_watch.csv', './data/transformed_data/watch/gyro/data_1649_gyro_watch.csv', './data/transformed_data/watch/gyro/data_1650_gyro_watch.csv']]\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"_PaldKOYZADN"},"source":["Activity names dictionary for printing the activity specific table"]},{"cell_type":"code","metadata":{"id":"7yl-YZdAZADO"},"source":["activity_names = {\"A\":\"Walking\",\"B\":\"Jogging\",\"C\":\"Stairs\",\"D\":\"Sitting\",\"E\":\"Standing\",\"F\":\"Typing\",\"G\":\"Brushing Teeth\",\"H\":\"Eating Soup\",\"I\":\"Eating Chips\",\"J\":\"Eating Pasta\",\"K\":\"Drinking from Cup\",\"L\":\"Eating Sandwich\",\"M\":\"Kicking Soccer Ball\",\"O\":\"Playing Catch w/Tennis Ball\",\"P\":\"Dribbling (Basketball)\",\"Q\":\"Writing\",\"R\":\"Clapping\",\"S\":\"Folding Clothes\"}"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"aciLx2SRZADO","outputId":"229458b5-7de6-4d9b-a807-8b8cf9665a57"},"source":["print(activity_names)"],"execution_count":null,"outputs":[{"output_type":"stream","text":["{'A': 'Walking', 'B': 'Jogging', 'C': 'Stairs', 'D': 'Sitting', 'E': 'Standing', 'F': 'Typing', 'G': 'Brushing Teeth', 'H': 'Eating Soup', 'I': 'Eating Chips', 'J': 'Eating Pasta', 'K': 'Drinking from Cup', 'L': 'Eating Sandwich', 'M': 'Kicking Soccer Ball', 'O': 'Playing Catch w/Tennis Ball', 'P': 'Dribbling (Basketball)', 'Q': 'Writing', 'R': 'Clapping', 'S': 'Folding Clothes'}\n"],"name":"stdout"}]},{"cell_type":"markdown","metadata":{"id":"_A_1lKkNZADO"},"source":["Calculating the TP, FP, FN, TN from the confusion matrix"]},{"cell_type":"code","metadata":{"id":"4k6IcC1YZADO"},"source":["def calculate_cf(confusion_mat, i=0, to_print=True):\n","    TP = confusion_mat[i,i]  \n","    FP = confusion_mat[:,i].sum() - TP  \n","    FN = confusion_mat[i,:].sum() - TP  \n","    TN = confusion_mat.sum().sum() - TP - FP - FN\n","    return TP, FP, FN, TN"],"execution_count":null,"outputs":[]},{"cell_type":"code","metadata":{"id":"93P1B6G7ZADO"},"source":["kf = KFold(shuffle=True, n_splits=10) #Using 10 cross validation\n","\n","#Loop for taking each dataset in sequence\n","\n","for fileindex,filelist in enumerate(files):\n","    overall_acc_dic = {}\n","    overall_precision_dic = {}\n","    overall_recall_dic = {}\n","    overall_f1_dic = {}\n","    overall_acc_list = []\n","    \n","    #For each list of file under each type of data i.e, Phone accel, Watch accel, Phone gyro and Watch gyro\n","    for csvfile in filelist:\n","        print(csvfile)\n","        \n","        #Using pandas to read the content of the CSV file\n","        data = pd.read_csv(csvfile, verbose=False)\n","\n","        \n","        #Selecting only the 43 features which are mentioned in Weiss paper\n","        X1 = data.loc[:, \"X0\":\"ZSTANDDEV\"]\n","        X2 = data.loc[:, 'RESULTANT']   \n","        y = data.loc[:, \"ACTIVITY\"]\n","\n","        \n","        #This will find the subject id from the file name\n","        if (fileindex == 0 or fileindex == 1):\n","            subject_id = (csvfile.split('accel'))[1].split('_')[1]\n","        else:\n","            subject_id = (csvfile.split('gyro'))[1].split('_')[1]\n","\n","        \n","        #Using scalar to scale the training set and label encoder to encode the value for activity which is string\n","        scaler = StandardScaler()\n","        le = preprocessing.LabelEncoder()\n","\n","        \n","        #Using np.column.stack to stack 43 features\n","        X = np.column_stack((np.array(X1),np.array(X2)))\n","        #X = scaler.fit_transform(X)\n","\n","        #X_raw = np.column_stack((np.array(X1),np.array(X2)))\n","        y = le.fit_transform(y)\n","\n","        \n","        #Finding the encoded labels for each activity and storing the details in dictionary to print the table\n","        le_name_mapping = dict(zip(le.transform(le.classes_),le.classes_))\n","        #name_le_mapping = dict(zip(le.classes_,le.transform(le.classes_)))\n","        #print(le_name_mapping)\n","\n","        \n","        #Function to plot feature importance. Removed the code where we column stack only the features which was out put of this function\n","        svm_feature(X,y)\n","\n","        \n","        #Hyperparameter search for the following paramters to train SVM\n","        param_grid={\n","        \"kernel\":('linear', 'rbf','poly','sigmoid'),\n","              \"C\": np.logspace(0, 3, 4),\n","              \"degree\": np.logspace(-2, 1, 4),\n","              \"coef0\": [0.1, 1],\n","              \"gamma\": (\"auto\", \"scale\")\n","        }\n","\n","        #k_fold_model = sklearn.model_selection.StratifiedKFold(10, random_state=0)\n","        SVC = sklearn.svm.SVC()\n","        grid_search_cv = sklearn.model_selection.GridSearchCV(SVC, param_grid, cv=10, n_jobs=10)\n","        grid_search_cv.fit(X, y)\n","        print(grid_search_cv.best_params_)\n","        C_val = grid_search_cv.best_params_['C']\n","        gamma_val = grid_search_cv.best_params_['gamma']\n","        coef0_val = grid_search_cv.best_params_['coef0']\n","        kernel_val = grid_search_cv.best_params_['kernel']\n","        degree_val = grid_search_cv.best_params_['degree']\n","        \n","        \n","        #Initialising some paramters to calculate average scores for 10 cross iterations\n","        accuracies = []\n","        iteration = 1\n","        label_acc_dic = {}\n","        label_precision_dic = {}\n","        label_recall_dic = {}\n","        label_f1_dic = {}\n","        target_name_list = []\n","        y_labels=list(set(y))\n","        for j in y_labels:\n","            #target_name_list.append(activity_names[le_name_mapping[j]])\n","            target_name_list.append(le_name_mapping[j])\n","        #print(target_name_list)\n","\n","        \n","        #Splitting the data into train and test. Train the training set with SVM classifier. Use the grid search output\n","        for train_index, test_index in kf.split(X):\n","            X_train, X_test = X[train_index], X[test_index] \n","            X_train = scaler.fit_transform(X_train)\n","            X_test = scaler.fit_transform(X_test)\n","            y_train, y_test = y[train_index], y[test_index]\n","            clf = svm.SVC(C=C_val, coef0=coef0_val, degree=degree_val, gamma=gamma_val, kernel=kernel_val)\n","            #clf = svm.SVC(C=0.5, coef0=1, degree=10, gamma='scale', kernel='poly')\n","            clf.fit(X_train,y_train)\n","            y_pred = clf.predict(X_test)\n","            acc = sklearn.metrics.accuracy_score(y_test, y_pred)\n","\n","            labels=list(set(y_pred))\n","            \n","            #Print the confusion matrix for each iteration of 10 cross validation\n","            cf = sklearn.metrics.confusion_matrix(y_test, y_pred,labels=labels)\n","            print(cf)\n","            \n","            #Calculate accuracy, precision, recall and f1 measure for each activity \n","            i = 0\n","            for label in labels:\n","                #print('Calculating 2x2 contigency table for label{}'.format(i))\n","                TP, FP, FN, TN = calculate_cf(cf, i, to_print=True)\n","                i +=1\n","                decode_label = le_name_mapping[label]\n","                #print(decode_label)\n","                #print(label_acc_dic)\n","                if decode_label in label_acc_dic:\n","                    temp_acc_list = label_acc_dic[decode_label]\n","                    temp_precision_list = label_precision_dic[decode_label]\n","                    temp_recall_list = label_recall_dic[decode_label]\n","                    temp_f1_list = label_f1_dic[decode_label]\n","                    label_acc_dic[decode_label] = temp_acc_list + [((TP+TN)/(TP+FP+FN+TN))*100]\n","                    #print(label_acc_dic[decode_label])\n","                    if TP != 0:\n","                        label_precision_dic[decode_label] = temp_precision_list + [(TP)/(TP+FP)]\n","                        label_recall_dic[decode_label] = temp_recall_list + [(TP)/(TP+FN)]\n","                        label_f1_dic[decode_label] = temp_f1_list + [(TP)/(TP+ (0.5 *(FP+FN)))]\n","                    else:\n","                        label_precision_dic[decode_label] = temp_precision_list + [0]\n","                        label_recall_dic[decode_label] = temp_recall_list + [0]\n","                        label_f1_dic[decode_label] = temp_f1_list + [0]\n","                else:\n","                    label_acc_dic[decode_label] = [((TP+TN)/(TP+FP+FN+TN))*100]\n","                    if TP != 0:\n","                        label_precision_dic[decode_label] = [(TP)/(TP+FP)]\n","                        label_recall_dic[decode_label] = [(TP)/(TP+FN)]\n","                        label_f1_dic[decode_label] = [(TP)/(TP+ (0.5 *(FP+FN)))]\n","                    else:\n","                        label_precision_dic[decode_label] = [0]\n","                        label_recall_dic[decode_label] = [0]\n","                        label_f1_dic[decode_label] = [0]\n","\n","\n","            #Print the classification report\n","            print(classification_report(y_test, y_pred))\n","            \n","            #Print the average iteration accuracy\n","            accuracies.append(acc)\n","            print(f\"Iteration {iteration}: {100*acc:.2f} %\")\n","            iteration +=1\n","\n","\n","        #Get the average precision, accuracy, recall and f1-measure for each activity of the iterations\n","        sum_a = 0\n","        for i in accuracies:\n","            sum_a += i\n","        ave_accu = sum_a/len(accuracies)\n","        print(f\"Average accuracy: {(ave_accu*100):.2f} %\")\n","\n","        for key in label_acc_dic:\n","            sum_acc_key = 0\n","            temp_list = label_acc_dic[key]\n","            #print(sum(temp_list))\n","            for i in temp_list:\n","                sum_acc_key += i\n","\n","            if sum_acc_key != 0:\n","                label_acc_dic[key] = round(sum_acc_key/len(temp_list),2)\n","            else:\n","                label_acc_dic[key] = 0\n","            #t = PrettyTable(['Class', 'Accuracy', 'Precision', 'Recall', 'F1-Measure'])\n","\n","\n","        for key in label_precision_dic:\n","            sum_precision_key = 0\n","            temp_list = label_precision_dic[key]\n","            #print(sum(temp_list))\n","            for i in temp_list:\n","                sum_precision_key += i\n","            if sum_precision_key != 0:\n","                label_precision_dic[key] = round(sum_precision_key/len(temp_list),2)\n","            else:\n","                label_precision_dic[key] = 0\n","\n","        for key in label_recall_dic:\n","            sum_recall_key = 0\n","            temp_list = label_recall_dic[key]\n","            #print(temp_list)\n","            for i in temp_list:\n","                sum_recall_key += i\n","            #print(\"sum_recall_key\" + str(sum_recall_key))\n","            #print(\"len(temp_list)\" + str(len(temp_list)))\n","            if sum_recall_key != 0:\n","                label_recall_dic[key] = round(sum_recall_key/len(temp_list),2)\n","            else:\n","                label_recall_dic[key] = 0\n","\n","        #print(label_recall_dic[key])\n","\n","        for key in label_f1_dic:\n","            sum_f1_key = 0\n","            temp_list = label_f1_dic[key]\n","            #print(sum(temp_list))\n","            for i in temp_list:\n","                sum_f1_key += i\n","            if sum_f1_key != 0:\n","                label_f1_dic[key] = round(sum_f1_key/len(temp_list),2)\n","            else:\n","                label_f1_dic[key] = 0\n","\n","        #Print the table with average accuracy for each activity for each subject Id\n","        print(\"Subject ID: \" + subject_id)\n","        t = PrettyTable(['Class', 'Accuracy', 'Precision', 'Recall', 'F1-Measure'])\n","        for activity in dict(sorted(label_acc_dic.items())):\n","            #print(label_recall_dic[activity])\n","            t.add_row([activity_names[activity],str(str(label_acc_dic[activity])+\"%\"),label_precision_dic[activity],label_recall_dic[activity],label_f1_dic[activity]])\n","            #print(type(activity))\n","            #label_code = name_le_mapping[activity]\n","            \n","            #add the scoring values of all the subject to find the overall accuracy\n","            if activity in overall_acc_dic:\n","                temp_acc_list = overall_acc_dic[activity]\n","                temp_pre_list = overall_precision_dic[activity]\n","                temp_re_list = overall_recall_dic[activity]\n","                temp_f1_list = overall_f1_dic[activity]\n","                overall_acc_dic[activity] = temp_acc_list + [round(label_acc_dic[activity],2)]\n","                overall_precision_dic[activity] = temp_pre_list + [round(label_precision_dic[activity],2)]\n","                overall_recall_dic[activity] = temp_re_list + [round(label_recall_dic[activity],2)]\n","                overall_f1_dic[activity] = temp_f1_list + [round(label_f1_dic[activity],2)]\n","            else:\n","                #print(type(overall_acc_dic))\n","                overall_acc_dic[activity] = [round(label_acc_dic[activity],2)]\n","                overall_precision_dic[activity] = [round(label_precision_dic[activity],2)]\n","                overall_recall_dic[activity] = [round(label_recall_dic[activity],2)]\n","                overall_f1_dic[activity] = [round(label_f1_dic[activity],2)]\n","\n","        #print the table for average score details for each subject id\n","        print(t)\n","        \n","        #compute the overall accuracy\n","        overall_acc_list.append((subject_id,(ave_accu*100)))\n","    \n","    #Compute the overall accuracy \n","    avg_accuracy_list=[]\n","    for sub_id,avg_acc in overall_acc_list:\n","        avg_accuracy_list.append(avg_acc)\n","    \n","    overall_accuracy = sum(avg_accuracy_list)/len(overall_acc_list)\n","    \n","    print(\"Overall Accuracy for %s: %.2f%%\"%(file_dict[fileindex],overall_accuracy))\n","    \n","    #Compute overall accuracy for accuracy, precision, recall and f1-measure for each activity\n","    for key in overall_acc_dic:\n","        sum_acc_key = 0\n","        temp_list = overall_acc_dic[key]\n","        for i in temp_list:\n","            sum_acc_key += i\n","        if sum_acc_key != 0:\n","            overall_acc_dic[key] = round(sum_acc_key/len(temp_list),2)\n","        else:\n","            overall_acc_dic[key] = 0\n","    \n","    for key in overall_precision_dic:\n","        sum_precision_key = 0\n","        temp_list = overall_precision_dic[key]\n","        for i in temp_list:\n","            sum_precision_key += i\n","        if sum_precision_key != 0:\n","            overall_precision_dic[key] = round(sum_precision_key/len(temp_list),2)\n","        else:\n","            overall_precision_dic[key] = 0\n","    \n","    \n","    for key in overall_recall_dic:\n","        sum_recall_key = 0\n","        temp_list = overall_recall_dic[key]\n","        #print(temp_list)\n","        for i in temp_list:\n","            sum_recall_key += i\n","        if sum_recall_key != 0:\n","            overall_recall_dic[key] = round(sum_recall_key/len(temp_list),2)\n","        else:\n","            overall_recall_dic[key] = 0\n","    \n","    \n","    for key in overall_f1_dic:\n","        sum_f1_key = 0\n","        temp_list = overall_f1_dic[key]\n","        for i in temp_list:\n","            sum_f1_key += i\n","        if sum_f1_key != 0:\n","            overall_f1_dic[key] = round(sum_f1_key/len(temp_list),2)\n","        else:\n","            overall_f1_dic[key] = 0\n","            \n","    #Print the overall score details for each type of data i.e., Phone accel, watch accel, Phone gyro and watch gyro\n","    print(\"Overall score for %s\"%file_dict[fileindex])\n","    to = PrettyTable(['Class', 'Accuracy', 'Precision', 'Recall', 'F1-Measure'])\n","    for activity in dict(sorted(label_acc_dic.items())):\n","        to.add_row([activity_names[activity],str(str(overall_acc_dic[activity])+\"%\"),overall_precision_dic[activity],overall_recall_dic[activity],overall_f1_dic[activity]])\n","\n","    print(to)\n","    print(\"-----------------------------------------------------------------------------------------\")"],"execution_count":null,"outputs":[]}]}