{ "cells": [ { "cell_type": "markdown", "id": "c5aaedf3", "metadata": {}, "source": [ "
Lab-7 Supervised Learning
" ] }, { "cell_type": "markdown", "id": "1af90b7a", "metadata": {}, "source": [ "### Objective: build a basic ML pipeline for classification problem:\n", "1. **Data segmentation** is used to split the whole dataset into different portions for different purpose - training, validation, and test. Useful link: Wiki, sklearn.\n", "2. **Usage of classification algorithms using Scikit-learn (sklearn)**: we will use classification algorithms already implemented in sklearn libraries. Useful link: Wiki, examples in sklearn.\n", "3. **Performance evaluation**: we will also refer to sklearn libraries to use different metrics to evaluate trained model performance. Useful link: Wiki, sklearn." ] }, { "cell_type": "code", "execution_count": 3, "id": "6d1fd7be", "metadata": {}, "outputs": [], "source": [ "# import needed python libraries\n", "\n", "%matplotlib inline\n", "\n", "import pandas as pd\n", "import seaborn as sns\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from sklearn.model_selection import train_test_split\n", "from sklearn.preprocessing import StandardScaler\n", "from sklearn.decomposition import PCA\n", "from sklearn.metrics import classification_report, confusion_matrix\n", "from sklearn.neighbors import KNeighborsClassifier\n", "from sklearn.linear_model import LogisticRegression\n", "from sklearn.ensemble import RandomForestClassifier\n", "from sklearn.naive_bayes import GaussianNB\n", "from sklearn.linear_model import LinearRegression\n", "from sklearn.metrics import mean_squared_error, mean_absolute_error\n", "from sklearn.tree import DecisionTreeRegressor" ] }, { "cell_type": "markdown", "id": "6a8c41f0", "metadata": {}, "source": [ "### 1. Tutorial - Classification\n", "Classification is supervised learning, for which you have labeled data to build/tune/evaluate ML models to classify/predict future samples, helping to make decisions, forecast conditions, identify patterns, etc. \n", "\n", "\n", "\n", "Here we use the IRIS dataset as an example to show how you can perform classification. " ] }, { "cell_type": "code", "execution_count": 4, "id": "1c0556ae", "metadata": {}, "outputs": [], "source": [ "# load dataset of IRIS flowers\n", "\n", "from sklearn import datasets\n", "iris_data = datasets.load_iris()\n", "features_iris = ['sepal_length', 'sepal_width', 'petal_length', 'petal_width']\n", "df_iris = pd.DataFrame(iris_data.data, columns = features_iris)\n", "df_iris['type'] = 'setosa'\n", "df_iris.loc[50:99, 'type'] = 'versicolor'\n", "df_iris.loc[100:149, 'type'] = 'virginica'" ] }, { "cell_type": "markdown", "id": "fb59ce2a", "metadata": {}, "source": [ "### 1.1 Data segmentation\n", "\n", "For labeled data in possession, you need to split them into training, validation if needed, and test datasets. Training and validation datasets are involved during model training, where training set is used to build the model (learn the parameters), while validation set is used to evaluate the model performance during/after training, avoiding overfitting/underfitting and chosing hyper-parameters. Test set is out of training phase and used to derive the final model performance. \n", "\n", "For now, we only need training and test datasets. We split data into training and test sets, respectively accounting for 70% and 30% of the sample. Here, we will use **stratified sampling**, which splits the data into two (or more) parts, each having the same proportion of a class labels." ] }, { "cell_type": "code", "execution_count": 6, "id": "ae0ac3d9", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
sepal_lengthsepal_widthpetal_lengthpetal_widthtypelabel
05.13.51.40.2setosa0
14.93.01.40.2setosa0
24.73.21.30.2setosa0
34.63.11.50.2setosa0
45.03.61.40.2setosa0
.....................
1456.73.05.22.3virginica2
1466.32.55.01.9virginica2
1476.53.05.22.0virginica2
1486.23.45.42.3virginica2
1495.93.05.11.8virginica2
\n", "

150 rows × 6 columns

\n", "
" ], "text/plain": [ " sepal_length sepal_width petal_length petal_width type label\n", "0 5.1 3.5 1.4 0.2 setosa 0\n", "1 4.9 3.0 1.4 0.2 setosa 0\n", "2 4.7 3.2 1.3 0.2 setosa 0\n", "3 4.6 3.1 1.5 0.2 setosa 0\n", "4 5.0 3.6 1.4 0.2 setosa 0\n", ".. ... ... ... ... ... ...\n", "145 6.7 3.0 5.2 2.3 virginica 2\n", "146 6.3 2.5 5.0 1.9 virginica 2\n", "147 6.5 3.0 5.2 2.0 virginica 2\n", "148 6.2 3.4 5.4 2.3 virginica 2\n", "149 5.9 3.0 5.1 1.8 virginica 2\n", "\n", "[150 rows x 6 columns]" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# first, we need to convert the type of flowers to numerical labels\n", "df_iris['label'] = pd.Categorical(df_iris['type']).codes\n", "df_iris" ] }, { "cell_type": "code", "execution_count": 21, "id": "7fdc9034", "metadata": {}, "outputs": [], "source": [ "X_train, X_test, y_train, y_test = train_test_split(\n", " df_iris[features_iris], # X\n", " df_iris['label'], # y\n", " stratify = df_iris['label'], # stratify the dataset based on class labels\n", " train_size = 0.7, # percentage of training set\n", " random_state = 15 \n", ")" ] }, { "cell_type": "markdown", "id": "07590f25", "metadata": {}, "source": [ "### 1.2 ML model usage\n", "The way you develop ML models using sklearn is similar for different algorithms, as follows:\n", "```python\n", "# load the model from sklearn\n", "from sklearn.xxx import MODEL\n", "\n", "# initialize the ML model (includes model and loss)\n", "model = MODEL() \n", "\n", "# train the model by fitting the algorithm based on training set\n", "model.fit(X_train, y_train) \n", "\n", "# use the trained model to make predictions for train and test set\n", "preds_train = model.predict(X_train) \n", "preds_test = model.predict(X_test) \n", "```" ] }, { "cell_type": "code", "execution_count": 22, "id": "e60ee760", "metadata": {}, "outputs": [], "source": [ "# here we use Gaussian Naive Bayes classifier as an example\n", "\n", "gnb = GaussianNB()\n", "gnb.fit(X_train, y_train)\n", "y_train_pred = gnb.predict(X_train)\n", "y_test_pred = gnb.predict(X_test)" ] }, { "cell_type": "markdown", "id": "ffc920de", "metadata": {}, "source": [ "### 1.3 Performance evaluation metrics\n", "Instead of building our own functions to evaluate the model performance, we will use sklearn library to do the job. Besides, we can use heatmap to visualize the confusion matrix. These metrics can be evaluated on train/test." ] }, { "cell_type": "code", "execution_count": 23, "id": "143d37ea", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ " precision recall f1-score support\n", "\n", " 0 1.00 1.00 1.00 15\n", " 1 0.83 1.00 0.91 15\n", " 2 1.00 0.80 0.89 15\n", "\n", " accuracy 0.93 45\n", " macro avg 0.94 0.93 0.93 45\n", "weighted avg 0.94 0.93 0.93 45\n", "\n" ] } ], "source": [ "# Classification report includes\n", "# - accuracy\n", "# - precision, recall and F1-score for each class (in this case 3 classes)\n", "# - averages of precision, recall, and f1-score\n", "# - number of samples for each class and in total (support)\n", "\n", "# Here we show results for test data\n", "print(classification_report(y_test, y_test_pred))" ] }, { "cell_type": "code", "execution_count": 24, "id": "b622be52", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# get the confusion matrix of test set\n", "confusion_test = confusion_matrix(y_test, y_test_pred)\n", "\n", "# visualize the confusion matrix\n", "plt.figure(figsize=(5,4))\n", "sns.heatmap(confusion_test, cmap='Blues', annot=True, cbar_kws={'label':'Occurrences'})\n", "plt.xlabel('Prediction')\n", "plt.ylabel('True')\n", "plt.title('Confusion matrix')\n", "plt.show()" ] }, { "cell_type": "markdown", "id": "bbe08206", "metadata": {}, "source": [ "### 2. Exercise - RTP dataset\n", "In this exercise, we employ a different dataset, which contains RTP traffic information. The Real-time Transport Protocol (RTP) is a network protocol for delivering real-time audio and video over IP networks. RTP is used in communication and entertainment systems that involve streaming media, such as telephony, video teleconference applications including WebRTC, television services and web-based push-to-talk features. In this laboratory, you will work on traces referred to Webex conference call to perform a classification task. Specifically, the traffic was collected on client side during video-conferencing. The traffic is basically the traces (records) of RTP packets following chronological order. Afterwards, we define successive time windows and aggregate packets in each time window, calculating certain statistics, which can be considered a statistical representation of the traffic in such time window.\n", "\n", "![](video_conference.png)" ] }, { "cell_type": "markdown", "id": "f9e3948e", "metadata": {}, "source": [ "### 2.1 Loading the dataset\n", "Unzip the RTP_dataset.csv.zip to get the csv dataset describing RTP traffic. Each record describes 1 second of a traffic (packet aggregation) carrying different class of data. Each record reports 95 features including statistics on:\n", "- Packet size\n", "- Interarrival time*\n", "- RTP interarrival time*\n", "- Interlength*\n", "- Label describing the class of data carried by the flow.\n", "
*inter statistics are computed based on the difference between the current and previous packet. For example, if packet 1 is received at 30s and packet 2 is received at 31s, the interarrival time between those two will be 1s.\n", "\n", "Each record (row) belongs to a single class. 3 main classes exist: **Audio, Video, Screen Sharing**. In particular, audio class consists of two sub-classes, **Audio and FEC-Audio**, and video class can be further split in 4 more sub-classes: **High Quality (>=720p), Medium Quality (360p\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
interarrival_stdinterarrival_meaninterarrival_mininterarrival_maxinterarrival_max_min_diffinterarrival_p10interarrival_p20interarrival_p25interarrival_p30interarrival_p40...rtp_interarrival_max_min_Rrtp_interarrival_kurtosisrtp_interarrival_skewrtp_interarrival_moment3rtp_interarrival_moment4rtp_interarrival_len_unique_percentrtp_interarrival_max_value_count_percentrtp_interarrival_min_max_Rrtp_marker_sum_checklabel
00.0019270.0100000.0049510.0144230.0094727.619953e-058.045912e-058.572698e-059.030223e-059.799051e-05...0.500000-3.0000000.0000000.000000e+000.000000e+000.0100001.0000000.5000000Audio
10.0005150.0200090.0192270.0212510.0020241.931565e-041.953020e-041.958430e-041.965890e-041.985469e-04...0.500000-3.0000000.0000000.000000e+000.000000e+000.0200001.0000000.5000000Audio
20.0413150.0199940.0000000.1433930.1433939.536743e-099.536743e-099.536743e-091.907349e-084.053116e-08...0.500000-3.0000000.0000000.000000e+000.000000e+000.0192311.0000000.5000000Audio
30.0081190.0199540.0008730.0444320.0435599.701633e-051.477895e-041.699674e-041.779909e-041.895509e-04...0.500000-3.0000000.0000000.000000e+000.000000e+000.0200001.0000000.5000000Audio
40.0186830.0201170.0000010.1210930.1210921.023531e-057.453918e-051.209468e-041.324451e-041.531601e-04...0.500000-3.0000000.0000000.000000e+000.000000e+000.0217391.0000000.5000000Audio
..................................................................
1399950.0007990.3376980.3368120.3383650.0015533.370330e-033.372540e-033.373646e-033.374751e-033.376961e-03...0.511905-1.500000-0.707107-2.211840e+083.185050e+110.6666670.6666670.4880953ScreenSharing
1399960.1598920.2399460.0001080.3201630.3200559.596729e-041.918266e-032.397562e-032.876859e-033.196862e-03...1.000000-0.671026-1.148811-2.524719e+126.654528e+161.0000000.2500000.0000003ScreenSharing
1399970.0455740.0401760.0000120.1518140.1518021.705837e-053.843689e-056.171942e-051.125135e-042.727780e-04...0.500000-3.0000000.0000000.000000e+000.000000e+000.0434781.0000000.50000023ScreenSharing
1399980.0287280.3254100.2997450.3564440.0566993.038041e-033.078630e-033.098925e-033.119220e-033.159810e-03...0.511144-1.500000-0.695813-1.628640e+082.163721e+111.0000000.3333330.4888563ScreenSharing
1399990.0041890.0402220.0325110.0494010.0168903.474479e-043.678946e-043.826904e-043.873811e-043.936524e-04...0.500000-3.0000000.0000000.000000e+000.000000e+000.0400001.0000000.50000025ScreenSharing
\n", "

140000 rows × 96 columns

\n", "" ], "text/plain": [ " interarrival_std interarrival_mean interarrival_min \\\n", "0 0.001927 0.010000 0.004951 \n", "1 0.000515 0.020009 0.019227 \n", "2 0.041315 0.019994 0.000000 \n", "3 0.008119 0.019954 0.000873 \n", "4 0.018683 0.020117 0.000001 \n", "... ... ... ... \n", "139995 0.000799 0.337698 0.336812 \n", "139996 0.159892 0.239946 0.000108 \n", "139997 0.045574 0.040176 0.000012 \n", "139998 0.028728 0.325410 0.299745 \n", "139999 0.004189 0.040222 0.032511 \n", "\n", " interarrival_max interarrival_max_min_diff interarrival_p10 \\\n", "0 0.014423 0.009472 7.619953e-05 \n", "1 0.021251 0.002024 1.931565e-04 \n", "2 0.143393 0.143393 9.536743e-09 \n", "3 0.044432 0.043559 9.701633e-05 \n", "4 0.121093 0.121092 1.023531e-05 \n", "... ... ... ... \n", "139995 0.338365 0.001553 3.370330e-03 \n", "139996 0.320163 0.320055 9.596729e-04 \n", "139997 0.151814 0.151802 1.705837e-05 \n", "139998 0.356444 0.056699 3.038041e-03 \n", "139999 0.049401 0.016890 3.474479e-04 \n", "\n", " interarrival_p20 interarrival_p25 interarrival_p30 \\\n", "0 8.045912e-05 8.572698e-05 9.030223e-05 \n", "1 1.953020e-04 1.958430e-04 1.965890e-04 \n", "2 9.536743e-09 9.536743e-09 1.907349e-08 \n", "3 1.477895e-04 1.699674e-04 1.779909e-04 \n", "4 7.453918e-05 1.209468e-04 1.324451e-04 \n", "... ... ... ... \n", "139995 3.372540e-03 3.373646e-03 3.374751e-03 \n", "139996 1.918266e-03 2.397562e-03 2.876859e-03 \n", "139997 3.843689e-05 6.171942e-05 1.125135e-04 \n", "139998 3.078630e-03 3.098925e-03 3.119220e-03 \n", "139999 3.678946e-04 3.826904e-04 3.873811e-04 \n", "\n", " interarrival_p40 ... rtp_interarrival_max_min_R \\\n", "0 9.799051e-05 ... 0.500000 \n", "1 1.985469e-04 ... 0.500000 \n", "2 4.053116e-08 ... 0.500000 \n", "3 1.895509e-04 ... 0.500000 \n", "4 1.531601e-04 ... 0.500000 \n", "... ... ... ... \n", "139995 3.376961e-03 ... 0.511905 \n", "139996 3.196862e-03 ... 1.000000 \n", "139997 2.727780e-04 ... 0.500000 \n", "139998 3.159810e-03 ... 0.511144 \n", "139999 3.936524e-04 ... 0.500000 \n", "\n", " rtp_interarrival_kurtosis rtp_interarrival_skew \\\n", "0 -3.000000 0.000000 \n", "1 -3.000000 0.000000 \n", "2 -3.000000 0.000000 \n", "3 -3.000000 0.000000 \n", "4 -3.000000 0.000000 \n", "... ... ... \n", "139995 -1.500000 -0.707107 \n", "139996 -0.671026 -1.148811 \n", "139997 -3.000000 0.000000 \n", "139998 -1.500000 -0.695813 \n", "139999 -3.000000 0.000000 \n", "\n", " rtp_interarrival_moment3 rtp_interarrival_moment4 \\\n", "0 0.000000e+00 0.000000e+00 \n", "1 0.000000e+00 0.000000e+00 \n", "2 0.000000e+00 0.000000e+00 \n", "3 0.000000e+00 0.000000e+00 \n", "4 0.000000e+00 0.000000e+00 \n", "... ... ... \n", "139995 -2.211840e+08 3.185050e+11 \n", "139996 -2.524719e+12 6.654528e+16 \n", "139997 0.000000e+00 0.000000e+00 \n", "139998 -1.628640e+08 2.163721e+11 \n", "139999 0.000000e+00 0.000000e+00 \n", "\n", " rtp_interarrival_len_unique_percent \\\n", "0 0.010000 \n", "1 0.020000 \n", "2 0.019231 \n", "3 0.020000 \n", "4 0.021739 \n", "... ... \n", "139995 0.666667 \n", "139996 1.000000 \n", "139997 0.043478 \n", "139998 1.000000 \n", "139999 0.040000 \n", "\n", " rtp_interarrival_max_value_count_percent rtp_interarrival_min_max_R \\\n", "0 1.000000 0.500000 \n", "1 1.000000 0.500000 \n", "2 1.000000 0.500000 \n", "3 1.000000 0.500000 \n", "4 1.000000 0.500000 \n", "... ... ... \n", "139995 0.666667 0.488095 \n", "139996 0.250000 0.000000 \n", "139997 1.000000 0.500000 \n", "139998 0.333333 0.488856 \n", "139999 1.000000 0.500000 \n", "\n", " rtp_marker_sum_check label \n", "0 0 Audio \n", "1 0 Audio \n", "2 0 Audio \n", "3 0 Audio \n", "4 0 Audio \n", "... ... ... \n", "139995 3 ScreenSharing \n", "139996 3 ScreenSharing \n", "139997 23 ScreenSharing \n", "139998 3 ScreenSharing \n", "139999 25 ScreenSharing \n", "\n", "[140000 rows x 96 columns]" ] }, "execution_count": 25, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df = pd.read_csv(\"RTP_dataset.csv\")\n", "df" ] }, { "cell_type": "markdown", "id": "0ac3650a", "metadata": {}, "source": [ "### 2.2 Binary classification\n", "From now on, we focus on two major classes, **Video** and **Audio**, and you need to develop ML pipeline to classify the traffic based on statistical features. Specifically, you will perform the following steps:\n", "- Data preprocessing\n", "- Model development (perform ERM with an algorithm)\n", "- Performance evaluation" ] }, { "cell_type": "markdown", "id": "bb0eab26", "metadata": {}, "source": [ "### 2.2.1 Dataset preprocessing - Data split and standardization\n", "- Extract data only associated to the aforementioned classes.\n", "- For an individual class, assign a numerical label (0 to Video and 1 to Audio).\n", "- Split the whole dataset into training and test. Stratify the split, keeping the 70/30 proportion (i.e., the training dataset contains the 70% of the sample per label, the test contains the remaining 30% per label).\n", "- After the splitting, standardize the data (features). Fit the StandardScaler only on the training set and then transform both the training and test sets. From now on, you will use the same standardize datasets for all the experiments." ] }, { "cell_type": "code", "execution_count": null, "id": "9ff3ad91", "metadata": {}, "outputs": [], "source": [ "# This part is provided\n", "# You can simply run this cell\n", "\n", "# extract data from Video and Audio\n", "# we have to perform a copy of the dataset otherwise we will modify the original dataset\n", "\n", "video = ['FEC-Video', 'HighQ', 'LowQ', 'MediumQ']\n", "audio = ['Audio', 'FEC-Audio']\n", "screen = ['ScreenSharing']\n", "\n", "video_data = df[df[\"label\"].isin(video)].copy()\n", "audio_data = df[df[\"label\"].isin(audio)].copy()\n", "\n", "video_data[\"binary_label\"]=0\n", "audio_data[\"binary_label\"]=1\n", "\n", "video_data = video_data.drop(\"label\",axis=1)\n", "audio_data = audio_data.drop(\"label\",axis=1)\n", "\n", "binary_dataset = pd.concat([video_data, audio_data])\n", "\n", "# prepare the new dataset\n", "# get the X and y from the dataset\n", "X = binary_dataset.drop(columns=['binary_label']).to_numpy()\n", "y = binary_dataset[['binary_label']].to_numpy()" ] }, { "cell_type": "code", "execution_count": null, "id": "7e1cf5e9", "metadata": {}, "outputs": [], "source": [ "# your answer here\n", "\n", "# run stratified training-test splitting using train_test_split\n", "X_train, X_test, y_train, y_test = train_test_split(\n", " X,\n", " y,\n", " stratify = y, # stratify the dataset based on class labels\n", " train_size = 0.7, # percentage of training set\n", " random_state = 42\n", ")\n", "\n", "# standardize data using StandardScaler\n", "scaler = StandardScaler()\n", "X_train_s = scaler.fit_transform(X_train, y_train)\n", "X_test_s = scaler.transform(X_test)" ] }, { "cell_type": "markdown", "id": "2ff6a273", "metadata": {}, "source": [ "### 2.2.2 Dataset preprocessing - Removal of correlated features\n", "- For the training set, compute and display the correlation matrix between the features (refer to lab 2 for details).\n", "- Remove strongly correlated features from both training and test sets, i.e., features having a correlation > 0.8. Note that a feature may be strongly correlated with many others.\n", " - How many correlated features you have to remove?" ] }, { "cell_type": "code", "execution_count": 56, "id": "280530a5", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Here everything is provided\n", "# The input here is the output required from previous steps\n", "# Just execute this and the following cells to check correlation matrix and remove correlated features\n", "\n", "# compute the correlation matrix\n", "columns= [i for i in range(X_train_s.shape[1])]\n", "df_tmp = pd.DataFrame(X_train_s, columns=columns)\n", "correlation_matrix = df_tmp.corr().abs()\n", "\n", "# display the heatmap\n", "plt.figure()\n", "sns.heatmap(correlation_matrix, cmap='Blues', vmin=0.8, vmax=1, cbar_kws={'label':'Correlation'})\n", "plt.xlabel('Feature')\n", "plt.ylabel('Feature')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 57, "id": "918ec8f4", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "58 features are removed\n" ] } ], "source": [ "# extract features having a correlation > 0.8\n", "c = correlation_matrix[correlation_matrix>0.8]\n", "s = c.unstack()\n", "so = s.sort_values(ascending=False).reset_index()\n", "\n", "# get strongly correlatead features removing pairs having correlation = 1 because of the diagonal, i.e., correlation between one feature and itself\n", "so = so[(so[0].isnull()==False) & (so[\"level_0\"] != so[\"level_1\"])]\n", "\n", "to_be_deleted = []\n", "candidates = list(so[\"level_0\"])\n", "\n", "# get the unique set of features to be deleted. Notice that we discard one feature per time considering the case where a feature is strongly correlated with multiple features\n", "subset_so = so\n", "for candidate in candidates:\n", " if (candidate in list(subset_so[\"level_0\"])): \n", " to_be_deleted.append(candidate)\n", " subset_so = subset_so[(subset_so[\"level_0\"] != candidate) & (subset_so[\"level_1\"] != candidate)]\n", "\n", "# to_be_deleted contains the index of columns that you need to remove from both training and test sets\n", "print(len(to_be_deleted), 'features are removed')\n", "\n", "# remove the correlated features from bot sets\n", "\n", "# Create a mask for the columns to keep\n", "columns_to_keep = np.ones(X_train_s.shape[1], dtype=bool)\n", "columns_to_keep[to_be_deleted] = False\n", "\n", "# Use the mask to select only the columns to keep\n", "X_train_s = X_train_s[:, columns_to_keep]\n", "X_test_s = X_test_s[:, columns_to_keep]" ] }, { "cell_type": "markdown", "id": "a0d2ea79", "metadata": {}, "source": [ "### 2.2.3 Model development\n", "- Refer to the following 3 algorithms and train the models with predefined parameters:\n", " - k-Nearest Neighbors (k-NN) (sklearn), with parameters of ``n_neighbors=3``.\n", " - Logistic Regression (LR) (sklearn), with parameters of ``max_iter=150``.\n", " - Random Forest (RF) (sklearn), with parameters of ``n_estimators=30``.\n", " \n", " Explain how each parameter will affect the algorithm\n", "- After the model training, use the obtained hypothesis to obtain predictions not only for test set but also for training set." ] }, { "cell_type": "code", "execution_count": 85, "id": "3d79fc71", "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/usr/lib64/python3.13/site-packages/sklearn/neighbors/_classification.py:238: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples,), for example using ravel().\n", " return self._fit(X, y)\n", "/usr/lib64/python3.13/site-packages/sklearn/utils/validation.py:1300: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples, ), for example using ravel().\n", " y = column_or_1d(y, warn=True)\n", "/usr/lib64/python3.13/site-packages/sklearn/base.py:1474: DataConversionWarning: A column-vector y was passed when a 1d array was expected. Please change the shape of y to (n_samples,), for example using ravel().\n", " return fit_method(estimator, *args, **kwargs)\n" ] }, { "data": { "text/html": [ "
RandomForestClassifier(n_estimators=30)
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" ], "text/plain": [ "RandomForestClassifier(n_estimators=30)" ] }, "execution_count": 85, "metadata": {}, "output_type": "execute_result" } ], "source": [ "knn = KNeighborsClassifier(n_neighbors=3)\n", "knn.fit(X_train_s, y_train)\n", "\n", "lr = LogisticRegression(max_iter=150)\n", "lr.fit(X_train_s, y_train)\n", "\n", "rf = RandomForestClassifier(n_estimators=30)\n", "rf.fit(X_train_s, y_train)" ] }, { "cell_type": "markdown", "id": "8404d16e", "metadata": {}, "source": [ "### 2.2.4 Performance evaluation\n", "- Now you should have derived 3 sets of predictions for both training and test sets for all models. Evaluate all the 6 predictions, computing and displaying numerical metrics (classification report) and confusion matrix.\n", "- Answering the following questions:\n", " - Which model produces the best performance? Why do you think so?\n", " - For each model, which class is better classified? Are they different among models?\n", " - For each model, do you observe the phenomenon of overfitting or underfitting? Why do you think so?" ] }, { "cell_type": "code", "execution_count": 86, "id": "4439fe5a", "metadata": {}, "outputs": [], "source": [ "y_knn_test = knn.predict(X_test_s)\n", "y_lr_test = lr.predict(X_test_s)\n", "y_rf_test = rf.predict(X_test_s)\n", "\n", "y_knn_train = knn.predict(X_train_s)\n", "y_lr_train = lr.predict(X_train_s)\n", "y_rf_train = rf.predict(X_train_s)" ] }, { "cell_type": "code", "execution_count": null, "id": "d1483ecb", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "KNN test\n", " precision recall f1-score support\n", "\n", " 0 1.00 1.00 1.00 24000\n", " 1 1.00 1.00 1.00 12000\n", "\n", " accuracy 1.00 36000\n", " macro avg 1.00 1.00 1.00 36000\n", "weighted avg 1.00 1.00 1.00 36000\n", "\n", "KNN train\n", " precision recall f1-score support\n", "\n", " 0 1.00 1.00 1.00 56000\n", " 1 1.00 1.00 1.00 28000\n", "\n", " accuracy 1.00 84000\n", " macro avg 1.00 1.00 1.00 84000\n", "weighted avg 1.00 1.00 1.00 84000\n", "\n" ] } ], "source": [ "print(\"KNN test\")\n", "print(classification_report(y_test, y_knn_test))\n", "print(\"KNN train\")\n", "print(classification_report(y_train, y_knn_train))" ] }, { "cell_type": "code", "execution_count": 83, "id": "3ae4595d", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "LR test\n", " precision recall f1-score support\n", "\n", " 0 0.99 0.83 0.90 24000\n", " 1 0.74 0.99 0.85 12000\n", "\n", " accuracy 0.88 36000\n", " macro avg 0.87 0.91 0.88 36000\n", "weighted avg 0.91 0.88 0.89 36000\n", "\n", "LR train\n", " precision recall f1-score support\n", "\n", " 0 0.99 0.84 0.91 56000\n", " 1 0.75 0.99 0.85 28000\n", "\n", " accuracy 0.89 84000\n", " macro avg 0.87 0.91 0.88 84000\n", "weighted avg 0.91 0.89 0.89 84000\n", "\n" ] } ], "source": [ "print(\"LR test\")\n", "print(classification_report(y_test, y_lr_test))\n", "print(\"LR train\")\n", "print(classification_report(y_train, y_lr_train))" ] }, { "cell_type": "code", "execution_count": 69, "id": "f3d981fa", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "RF test\n", " precision recall f1-score support\n", "\n", " 0 1.00 1.00 1.00 24000\n", " 1 1.00 1.00 1.00 12000\n", "\n", " accuracy 1.00 36000\n", " macro avg 1.00 1.00 1.00 36000\n", "weighted avg 1.00 1.00 1.00 36000\n", "\n", "RF train\n", " precision recall f1-score support\n", "\n", " 0 1.00 1.00 1.00 56000\n", " 1 1.00 1.00 1.00 28000\n", "\n", " accuracy 1.00 84000\n", " macro avg 1.00 1.00 1.00 84000\n", "weighted avg 1.00 1.00 1.00 84000\n", "\n" ] } ], "source": [ "print(\"RF test\")\n", "print(classification_report(y_test, y_rf_test))\n", "print(\"RF train\")\n", "print(classification_report(y_train, y_rf_train))" ] }, { "cell_type": "code", "execution_count": 91, "id": "000c9a7a", "metadata": {}, "outputs": [ { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" }, { "data": { "image/png": "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0/nNzMx0Ou5+9x7pLZPJqm1/cNv9n+/evqqqqnqPgYj0g5UwPdEsLCzg7u6Oli1bPnL18wsvvICcnBwYGRnB3d1d42VnZwcAaNOmDY4dO6Zx3IPv7+fh4QEzMzMcOnSoxv0mJiYAgMrKylr7cHd3h4mJCRISEtTbVCoVTp48iTZt2jz0MxHRk42VMElGv3794Ovri+DgYCxevBienp64evUq9u7di+DgYPj4+OD999/HiBEj4OPjg+7du2PTpk04c+YMWrduXWOfpqammD59OqZNmwYTExN069YNeXl5OHPmDEaNGgUHBweYmZkhLi4OzZs3h6mpabWvJ1lYWGDs2LGYOnUqbGxs0KJFC8TExOD27dsYNWpUI/10iEgfGMIkGTKZDHv37kVUVBRGjhyJvLw8ODk5oWfPnurVzMOGDcOFCxcwffp0lJWV4bXXXsPYsWPx888/19rvzJkzYWRkhFmzZuHq1atwdnbGmDFjAABGRkb47LPPMHfuXMyaNQs9evSocTp80aJFqKqqQmhoKG7dugUfHx/8/PPPsLa2fow/ESLSN5lw74IUERERNSpeEyYiItIThjAREZGeMISJiIj0hCFMRESkJwxhIiIiPWEIExER6QlDmIiISE8YwkRERHrCECYiItIThjAREZGeMISJiIj05P8BQhcd8zMjaUoAAAAASUVORK5CYII=", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "confusion_test_knn = confusion_matrix(y_knn_test, y_test)\n", "confusion_test_lr = confusion_matrix(y_lr_test, y_test)\n", "confusion_test_rf = confusion_matrix(y_rf_test, y_test)\n", "\n", "for type, conf in [(\"KNN\", confusion_test_knn), (\"LR\", confusion_test_lr), (\"RF\", confusion_test_rf)]:\n", " # visualize the confusion matrix\n", " plt.figure(figsize=(5,4))\n", " sns.heatmap(conf, cmap='Blues', annot=True, cbar_kws={'label':'Occurrences'})\n", " plt.xlabel('Prediction')\n", " plt.ylabel('True')\n", " plt.title(f'Confusion matrix {type}')\n", " plt.show()" ] }, { "cell_type": "markdown", "id": "abe29141", "metadata": {}, "source": [ "### 2.3 Regression analysis\n", "Here we intend to investigate the possibility of representing a certain feature through other features by performing a regression analysis. In other words, we may find a relationship between a feature and the others. Specifically, we focus on `interarrival_std`, and you need to do the following:\n", "- Refer to the original dataset and remove the correlated features as you have done previously.\n", "- Randomly split the dataset into training and test set (70/30 and no need of stratification), and standardize the dataset as you have done previously.\n", "- Refer to linear regression and decision tree regressor, by training scikit-learn models with default configuration. Documentations: Linear regression and Decision tree regressor.\n", "- Make predictions for both of training and test sets.\n", "- Output performance metrics for both sets and for both models by calculating Mean Squared Error (MSE) and the Mean Absolute Error (MAE). There're also scikit-learn library doing the job. Answer the following:\n", " - Do you observe overfitting or under-fitting?\n", " - Which model performs better?" ] }, { "cell_type": "code", "execution_count": 96, "id": "3b3c4c1f", "metadata": {}, "outputs": [], "source": [ "# run stratified training-test splitting using train_test_split\n", "X_train, X_test, y_train, y_test = train_test_split(\n", " X,\n", " y,\n", " train_size = 0.7, # percentage of training set\n", " random_state = 69\n", ")\n", "\n", "# standardize data using StandardScaler\n", "scaler = StandardScaler()\n", "X_train_s = scaler.fit_transform(X_train, y_train)\n", "X_test_s = scaler.transform(X_test)" ] }, { "cell_type": "code", "execution_count": 97, "id": "7954095c", "metadata": {}, "outputs": [ { "data": { "text/html": [ "
DecisionTreeRegressor()
In a Jupyter environment, please rerun this cell to show the HTML representation or trust the notebook.
On GitHub, the HTML representation is unable to render, please try loading this page with nbviewer.org.
" ], "text/plain": [ "DecisionTreeRegressor()" ] }, "execution_count": 97, "metadata": {}, "output_type": "execute_result" } ], "source": [ "lr = LinearRegression()\n", "lr.fit(X_train_s, y_train)\n", "\n", "dtr = DecisionTreeRegressor()\n", "dtr.fit(X_train_s, y_train)" ] }, { "cell_type": "code", "execution_count": 100, "id": "bb4eda39", "metadata": {}, "outputs": [], "source": [ "y_lr_test = lr.predict(X_test_s)\n", "y_dtr_test = dtr.predict(X_test_s)" ] }, { "cell_type": "code", "execution_count": 102, "id": "9087622d", "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "MSE\n", "LR: 0.015691082997851952\n", "DTR: 0.0003333333333333333\n", "MAE\n", "LR: 0.08678245172383924\n", "DTR: 0.0003333333333333333\n" ] } ], "source": [ "print(\"MSE\")\n", "print(f\"LR: {mean_squared_error(y_test, y_lr_test)}\")\n", "print(f\"DTR: {mean_squared_error(y_test, y_dtr_test)}\")\n", "\n", "print(\"MAE\")\n", "print(f\"LR: {mean_absolute_error(y_test, y_lr_test)}\")\n", "print(f\"DTR: {mean_absolute_error(y_test, y_dtr_test)}\")" ] } ], "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.13.0" }, "varInspector": { "cols": { "lenName": 16, "lenType": 16, "lenVar": 40 }, "kernels_config": { "python": { "delete_cmd_postfix": "", "delete_cmd_prefix": "del ", "library": "var_list.py", "varRefreshCmd": "print(var_dic_list())" }, "r": { "delete_cmd_postfix": ") ", "delete_cmd_prefix": "rm(", "library": "var_list.r", "varRefreshCmd": "cat(var_dic_list()) " } }, "types_to_exclude": [ "module", "function", "builtin_function_or_method", "instance", "_Feature" ], "window_display": false } }, "nbformat": 4, "nbformat_minor": 5 }