{ "nbformat": 4, "nbformat_minor": 0, "metadata": { "colab": { "provenance": [] }, "kernelspec": { "name": "python3", "display_name": "Python 3" }, "language_info": { "name": "python" } }, "cells": [ { "cell_type": "markdown", "source": [ "

PA4 Machine Learning

\n", "

Instructions:

\n", "\n" ], "metadata": { "id": "a69MLCTxWcbh" } }, { "cell_type": "code", "source": [ "# All the necessary imports are made here if you want to include any of the other imports of your choice please do it in this cell\n", "import numpy as np \n", "import pandas as pd \n", "import matplotlib.pyplot as plt \n", "import seaborn as sns" ], "metadata": { "id": "wy12gAowXyxL" }, "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "source": [ "
First upload the dataset on your google drive and then run the cell below to mount your drive with the path for it.
" ], "metadata": { "id": "pbqXnx6xZH4L" } }, { "cell_type": "code", "source": [ "from google.colab import drive\n", "drive.mount('/content/drive')" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "J7WWBLEKYu01", "outputId": "d2b682a0-2315-4d3f-e6b7-7373e7aaa180" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "Drive already mounted at /content/drive; to attempt to forcibly remount, call drive.mount(\"/content/drive\", force_remount=True).\n" ] } ] }, { "cell_type": "markdown", "source": [ "
We will first read the dataset from our drive and then print its shape.
" ], "metadata": { "id": "Uwwp5f0jazHC" } }, { "cell_type": "code", "source": [ "#Start by importing the dataset and printing its shape\n", "dataset_pulstar = pd.read_csv(\"/content/drive/MyDrive/pulsar_data_train.csv\")\n", "dataset_pulstar.shape" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "EWjGrHVlXogk", "outputId": "26dc4260-cd86-429e-c6db-5f6d87546b26" }, "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "(12528, 9)" ] }, "metadata": {}, "execution_count": 4 } ] }, { "cell_type": "markdown", "source": [ "
Visualize the dataset by printing the first 10 rows of it in the cell below.
" ], "metadata": { "id": "-CSjo9hja7-8" } }, { "cell_type": "code", "source": [ "#Please write your code below\n", "dataset_pulstar.head(10)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 424 }, "id": "WCTYnBSEbOd3", "outputId": "4e92f860-cae3-4263-f3c3-6e4e7d41ffc9" }, "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ " Mean of the integrated profile \\\n", "0 121.156250 \n", "1 76.968750 \n", "2 130.585938 \n", "3 156.398438 \n", "4 84.804688 \n", "5 121.007812 \n", "6 79.343750 \n", "7 109.406250 \n", "8 95.007812 \n", "9 109.156250 \n", "\n", " Standard deviation of the integrated profile \\\n", "0 48.372971 \n", "1 36.175557 \n", "2 53.229534 \n", "3 48.865942 \n", "4 36.117659 \n", "5 47.176944 \n", "6 42.402174 \n", "7 55.912521 \n", "8 40.219805 \n", "9 47.002234 \n", "\n", " Excess kurtosis of the integrated profile \\\n", "0 0.375485 \n", "1 0.712898 \n", "2 0.133408 \n", "3 -0.215989 \n", "4 0.825013 \n", "5 0.229708 \n", "6 1.063413 \n", "7 0.565106 \n", "8 0.347578 \n", "9 0.394182 \n", "\n", " Skewness of the integrated profile Mean of the DM-SNR curve \\\n", "0 -0.013165 3.168896 \n", "1 3.388719 2.399666 \n", "2 -0.297242 2.743311 \n", "3 -0.171294 17.471572 \n", "4 3.274125 2.790134 \n", "5 0.091336 2.036789 \n", "6 2.244377 141.641304 \n", "7 0.056247 2.797659 \n", "8 1.153164 2.770067 \n", "9 0.190296 4.578595 \n", "\n", " Standard deviation of the DM-SNR curve \\\n", "0 18.399367 \n", "1 17.570997 \n", "2 22.362553 \n", "3 NaN \n", "4 20.618009 \n", "5 NaN \n", "6 NaN \n", "7 19.496527 \n", "8 18.217741 \n", "9 NaN \n", "\n", " Excess kurtosis of the DM-SNR curve Skewness of the DM-SNR curve \\\n", "0 7.449874 65.159298 \n", "1 9.414652 102.722975 \n", "2 8.508364 74.031324 \n", "3 2.958066 7.197842 \n", "4 8.405008 76.291128 \n", "5 9.546051 112.131721 \n", "6 -0.700809 -1.200653 \n", "7 9.443282 97.374578 \n", "8 7.851205 70.801938 \n", "9 5.702532 36.342493 \n", "\n", " target_class \n", "0 0.0 \n", "1 0.0 \n", "2 0.0 \n", "3 0.0 \n", "4 0.0 \n", "5 0.0 \n", "6 0.0 \n", "7 0.0 \n", "8 0.0 \n", "9 0.0 " ], "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", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
Mean of the integrated profileStandard deviation of the integrated profileExcess kurtosis of the integrated profileSkewness of the integrated profileMean of the DM-SNR curveStandard deviation of the DM-SNR curveExcess kurtosis of the DM-SNR curveSkewness of the DM-SNR curvetarget_class
0121.15625048.3729710.375485-0.0131653.16889618.3993677.44987465.1592980.0
176.96875036.1755570.7128983.3887192.39966617.5709979.414652102.7229750.0
2130.58593853.2295340.133408-0.2972422.74331122.3625538.50836474.0313240.0
3156.39843848.865942-0.215989-0.17129417.471572NaN2.9580667.1978420.0
484.80468836.1176590.8250133.2741252.79013420.6180098.40500876.2911280.0
5121.00781247.1769440.2297080.0913362.036789NaN9.546051112.1317210.0
679.34375042.4021741.0634132.244377141.641304NaN-0.700809-1.2006530.0
7109.40625055.9125210.5651060.0562472.79765919.4965279.44328297.3745780.0
895.00781240.2198050.3475781.1531642.77006718.2177417.85120570.8019380.0
9109.15625047.0022340.3941820.1902964.578595NaN5.70253236.3424930.0
\n", "
\n", " \n", " \n", " \n", "\n", " \n", "
\n", "
\n", " " ] }, "metadata": {}, "execution_count": 5 } ] }, { "cell_type": "markdown", "source": [ "
Now after examining the dataset you have seen that the column names are too long and to cater for this run the code cell below to rename the column names to the standard column names.
" ], "metadata": { "id": "xnuz6ginbZQO" } }, { "cell_type": "code", "source": [ "#renaming the column names to more readable column names\n", "dataset_pulstar.columns = ['IP Mean', 'IP Sd', 'IP Kurtosis', 'IP Skewness', \n", " 'DM-SNR Mean', 'DM-SNR Sd', 'DM-SNR Kurtosis', 'DM-SNR Skewness', 'target_class']\n", "dataset_pulstar.columns" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "kpO2TkvPbR1z", "outputId": "239ee5f3-3109-4178-f5da-952c69d11230" }, "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "Index(['IP Mean', 'IP Sd', 'IP Kurtosis', 'IP Skewness', 'DM-SNR Mean',\n", " 'DM-SNR Sd', 'DM-SNR Kurtosis', 'DM-SNR Skewness', 'target_class'],\n", " dtype='object')" ] }, "metadata": {}, "execution_count": 6 } ] }, { "cell_type": "markdown", "source": [ "
Now we will see if our dataset contains null values and if it contains the null values you are to drop them. Please write appropriate code below to check for null values in the dataset and drop them if necessary.
" ], "metadata": { "id": "lzNudJ7ccBlR" } }, { "cell_type": "code", "source": [ "#Please write your code below\n", "dataset_pulstar.dropna(inplace=True)\n", "dataset_pulstar.isna().sum()" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "saOarebKb09c", "outputId": "4edfb5e1-08ed-432e-ad16-1df179ba2bd7" }, "execution_count": null, "outputs": [ { "output_type": "execute_result", "data": { "text/plain": [ "IP Mean 0\n", "IP Sd 0\n", "IP Kurtosis 0\n", "IP Skewness 0\n", "DM-SNR Mean 0\n", "DM-SNR Sd 0\n", "DM-SNR Kurtosis 0\n", "DM-SNR Skewness 0\n", "target_class 0\n", "dtype: int64" ] }, "metadata": {}, "execution_count": 7 } ] }, { "cell_type": "markdown", "source": [ "
Now we will use a suitable visualization to visualize the outliers if present in the dataset. Remember to not include the column with the name of `target_class` in the visualizations you create.
" ], "metadata": { "id": "-zUr5ySndY1V" } }, { "cell_type": "code", "source": [ "#Please write your code below\n", "fig, axes = plt.subplots(nrows=len(dataset_pulstar.columns)-1, figsize=(10, 50))\n", "\n", "for i, column in enumerate(dataset_pulstar.columns):\n", " if column == \"target_class\":\n", " continue\n", " axes[i].boxplot(dataset_pulstar[column])\n", " axes[i].set_title('')\n", " axes[i].set_ylabel(f\"{column}\")\n", " axes[i].set_xlabel(f\"{column}\")\n", "\n", "plt.subplots_adjust(hspace=0.5)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 1000 }, "id": "7ywYuyKwdYHs", "outputId": "7e13aa7c-99f6-4a20-ff1f-ae55f6fda268" }, "execution_count": null, "outputs": [ { "output_type": "display_data", "data": { "text/plain": [ "
" ], "image/png": "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\n" }, "metadata": { "needs_background": "light" } } ] }, { "cell_type": "markdown", "source": [ "

Task 1:

\n", "

Now, we will use the SVM classifier to classify the outliers correctly and to the classes as we can see there are two unique values in target variable mapping to 0 and 1. So in this part you have to implement the linear SVM from scratch and follow the following steps.

" ], "metadata": { "id": "VVYNVkPyhMWY" } }, { "cell_type": "markdown", "source": [ "Step 1: First drop the target variable named as `target_class` and store it seperately from the dataset. You would have to store the rest of the dataset in another variable." ], "metadata": { "id": "GUsLX8hlsKSj" } }, { "cell_type": "code", "source": [ " # Store the target class column in the variable 'y' and the rest of the dataset in the variable 'X'.\n", " y = dataset_pulstar['target_class']\n", " X = dataset_pulstar.drop(['target_class'],axis=1)\n", " print(y.shape,X.shape)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "6WC5naIRhLtQ", "outputId": "1c8b758b-3969-4de8-cb12-7ca2b05d0dc8" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "(9273,) (9273, 8)\n" ] } ] }, { "cell_type": "markdown", "source": [ "Step 2: Now you will split the datasets into test and train (80-20 or 70-30). So use the code cell below to make appropriate splits." ], "metadata": { "id": "ABfb4XGmticO" } }, { "cell_type": "code", "source": [ "#Please write your code below\n", "rows = X.shape[0]\n", "#Performing an 80-20 Split\n", "X_train = X[:int(0.8*(rows))]\n", "X_test = X[int(0.8*(rows)):]\n", "y_train = y[:int(0.8*(rows))]\n", "y_test = y[int(0.8*(rows)):]\n", "\n", "print(X_train.shape,X_test.shape,y_train.shape,y_test.shape)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "GE6qBTQhthtn", "outputId": "537c435f-9efe-46ab-a579-16050eb58c0a" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "(7418, 8) (1855, 8) (7418,) (1855,)\n" ] } ] }, { "cell_type": "markdown", "source": [ "Step 3: Now you have to standardize the columns in the dataset (X_train) and the columns in the dataset (X_test) so that the values are centered." ], "metadata": { "id": "68Tel-0FvQIn" } }, { "cell_type": "code", "source": [ "X_train_std = (abs(X_train-np.mean(X_train,axis=0)))/np.std(X_train,axis=0)\n", "X_test_std = (abs(X_test-np.mean(X_test,axis=0)))/np.std(X_test,axis=0)" ], "metadata": { "id": "iL-cnYkLvPOw" }, "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "source": [ "Step 4: You have to now implement the Linear SVM model and you are provided with the boiler plate code in the cell below:\n", "Some formulas for the derivatives that might be useful are attached as snippets for your information." ], "metadata": { "id": "KUTL3jiF8WJa" } }, { "cell_type": "markdown", "source": [ "The equation that we will follow for calculating the hyperplane that best fits our model is given below:" ], "metadata": { "id": "PC2oAHmH7y3F" } }, { "cell_type": "markdown", "source": [ "![image.png](data:image/png;base64,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)" ], "metadata": { "id": "el_6no5q7wEz" } }, { "cell_type": "markdown", "source": [ "We can break the equation above into two steps which is potrayed by the step function below:" ], "metadata": { "id": "48X-bnro77yU" } }, { "cell_type": "markdown", "source": [ "![image.png](data:image/png;base64,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)" ], "metadata": { "id": "WiT0xh7977rV" } }, { "cell_type": "markdown", "source": [ "Now the derivatives for the step function are specified as follows:" ], "metadata": { "id": "ejEKyklq8Qqu" } }, { "cell_type": "markdown", "source": [ "Case 1:
\n", "![image.png](data:image/png;base64,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)" ], "metadata": { "id": "Pe82zIsX8b96" } }, { "cell_type": "markdown", "source": [ "Case 2:\n", "
\n", "![image.png](data:image/png;base64,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)" ], "metadata": { "id": "37hIqk_48oqI" } }, { "cell_type": "code", "source": [ "class SVM:\n", " def __init__(self, learning_rate=1e-3, lambda_param=1e-2, n_iters=1000):\n", " '''\n", " This is the constructor for our SVM class and its passed 3 parameters which are defined as follows:\n", " -> Learning_rate: This is the step_size that you would take in order for your algorithm to converge\n", " -> lambda_param: This specifies the constant which is used for regularization as taught to you in class\n", " -> n_iters: This specifies the epochs that you would take for the algorithm to converge.\n", " '''\n", " self.lr = learning_rate\n", " self.lambda_param = lambda_param\n", " self.n_iters = n_iters\n", " self.w = None\n", " self.b = None\n", "\n", " def initialize_weights_and_bias(self, X):\n", " '''\n", " In this function you are to initialize the weights initally to zero. The variables passed as arguments are as follows:\n", " -> X: This is the original dataset X which will help you specify the n_features that you should have. \n", " \n", " TODO: You have to initialize the weights of the model and the bias variable to zero.\n", " '''\n", " n_features = X.shape[1]\n", " self.w = np.zeros(n_features)\n", " self.b = 0\n", "\n", " def get_classfication_map(self, y):\n", " '''\n", " In this function you will map you binary target variables to either -1 and 1 as taught \n", " to you in class forming the two margins to your actual hyperplane. You are given with the variable y as the parameter which is defined below:\n", " -> y: Here y, represents a single target value corresponding to a datapoint in your train dataset.\n", " \n", " TODO: You would have to return a value -1 or 1 if the value of the variable y is less than or equal to zero and 1 otherwise.\n", " '''\n", " return np.where(y <= 0, -1, 1)\n", "\n", " def constraint_satisfaction(self, x, idx):\n", " '''\n", " In this function you are given with the following arguments:\n", " -> x: Here x, represents the datapoint from your train dataset.\n", " -> idx: This idx variable represents an index that maps to the current datapoint x that you are processing.\n", " \n", " TODO: \n", " -> You have to make up a linear model by multiplying the weights \n", " and adding the bias term to it.\n", " -> Make up a predicate which returns true if product of the linear_model \n", " value with the class label is greater than or equal to 1 and otherwise false.\n", " '''\n", " linear_model = np.dot(x, self.w) + self.b \n", " return self.cls_map[idx] * linear_model >= 1\n", " \n", " def cal_gradients(self, constrain, x, idx):\n", " '''\n", " In this function you are given the following parameters:\n", " -> constrain: This is a bool which will help you calculate the derviatives \n", " of the two cases where the datapoint either lies above the hyperplane or below the hyperplane.\n", " -> x: Here x, represents an individual datapoint from your train dataset.\n", " -> idx: This idx variable represents an index that maps to the current datapoint x that you are processing.\n", "\n", " TODO: \n", " -> Here you will handle the two cases where your datapoint lies above \n", " the hyperplane or below it with the help of the constrain (boolean).\n", " -> if the datapoint lies above the hyperplane:\n", " * Then calculate variables dw & db by using the equations specified above.\n", " Otherwise:\n", " * Use the formulas specified above to calcualte dw & db.\n", " '''\n", " if constrain:\n", " dw = self.lambda_param * self.w\n", " db = 0\n", " return dw, db\n", " dw = self.lambda_param * self.w - np.dot(self.cls_map[idx], x)\n", " db = - self.cls_map[idx]\n", " return dw, db\n", " \n", " def update_weights_and_bias(self, dw, db):\n", " '''\n", " In this function you are provided with the following parameters:\n", " -> dw: This represents the derivatives for your weights as calculated by the cal_gradients function.\n", " -> db: This represnets the derivatives for your biases as calcuated by the cal_graidents function.\n", "\n", " TODO:\n", " You have to simply update the weights by multiplying it with the learning rate as you do in gradient descent.\n", " '''\n", " self.w -= self.lr * dw\n", " self.b -= self.lr * db\n", " \n", " def fit(self, X, y):\n", " '''\n", " This is the fit function in which you are provided with the following parameters:\n", " X: The complete train dataset.\n", " y: Your target values associated with the train dataset.\n", "\n", " TODO:\n", " -> First you would need to initialize your weights and biases by calling your implementation of the following functions:\n", " * initialize_weights_and_bias()\n", " * get_classfication_map -> store the return value in the variable self.cls_map for future reference.\n", " -> Now you would have to run a loop for your number of epochs and \n", " for each epoch you would have to check every datapoint for the constraint \n", " and then calculate the gradients and update them accordingly\n", " '''\n", " self.initialize_weights_and_bias(X)\n", " self.cls_map = self.get_classfication_map(y)\n", "\n", " for _ in range(self.n_iters):\n", " for idx, x in enumerate(X):\n", " constrain = self.constraint_satisfaction(x, idx)\n", " dw, db = self.cal_gradients(constrain, x, idx)\n", " self.update_weights_and_bias(dw, db)\n", " \n", " def predict(self, X):\n", " '''\n", " In this function you would have to predict whether your hyperplane that you have fitted on the data is correct or not.\n", " The parameters to the function are the following:\n", " -> X: Reperesents your train dataset.\n", "\n", " TODO: After running the fit function take the dot product of X with your updated weights and up the biases.\n", " Make use of the np.sign function and np.where function to map your -1 labels to 0 and 1.\n", "\n", " Rember: You mapped the values to -1 and 1 in the constraint_satsifaction function so you have to map them back to 0 and 1 respectively.\n", " '''\n", " estimate = np.dot(X, self.w) + self.b\n", " prediction = np.sign(estimate)\n", " return np.where(prediction == -1, 0, 1)" ], "metadata": { "id": "wgZFm2Zyx59C" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "# Convert your datasets to numpy arrays here. Please write your code below:\n", "X_dataset_numpy = np.array(X_train)\n", "y_dataset_numpy = np.array(y_train)\n", "X_test_numpy = np.array(X_test)" ], "metadata": { "id": "IEgXqeHNzQqw" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "# Make a call to the class by initliazing the n_iters or the epochs and then call the fit function passing them the appropriate arguments. \n", "# After doing this you are to call the predict function by passing in the appropriate arguments as well\n", "clf = SVM(n_iters=300)\n", "clf.fit(X_dataset_numpy, y_dataset_numpy)\n", "predictions = clf.predict(X_test_numpy)" ], "metadata": { "id": "lnOcahc2yK5e" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "# Define your manual accuracy function here. Please write the code below:\n", "def accuracy(y_true, y_pred):\n", " accuracy = np.sum(y_true==y_pred) / len(y_true)\n", " return accuracy" ], "metadata": { "id": "dqN3Q6qW0MBd" }, "execution_count": null, "outputs": [] }, { "cell_type": "code", "source": [ "# Print the accuracy you are getting from the linear model below:\n", "print(\"SVM Accuracy: \", accuracy(y_test, predictions)*100)" ], "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "6GzXPen-0Q_-", "outputId": "668b6d84-fa57-439e-de61-cb83a247d82d" }, "execution_count": null, "outputs": [ { "output_type": "stream", "name": "stdout", "text": [ "SVM Accuracy: 97.25067385444744\n" ] } ] }, { "cell_type": "markdown", "source": [ "### Problem with dispersed datasets\n", "\n", "\n", "Sometimes, the sample data points are so dispersed that it is not possible to separate them using a linear hyperplane. \n", "In such a situation, SVMs uses a `kernel trick` to transform the input space to a higher dimensional space as shown in the diagram below. It uses a mapping function to transform the 2-D input space into the 3-D input space. Now, we can easily segregate the data points using linear separation.\n", "\n", "\n", "### Kernel trick - transformation of input space to higher dimensional space\n", "\n", "![Kernel trick](http://www.aionlinecourse.com/uploads/tutorials/2019/07/11_21_kernel_svm_3.png)" ], "metadata": { "id": "GqlC0jr-6aj6" } }, { "cell_type": "markdown", "source": [ "# **Kernel trick** \n", "\n", "[Table of Contents](#0.1)\n", "\n", "\n", "In practice, SVM algorithm is implemented using a `kernel`. It uses a technique called the `kernel trick`. In simple words, a `kernel` is just a function that maps the data to a higher dimension where data is separable. A kernel transforms a low-dimensional input data space into a higher dimensional space. So, it converts non-linear separable problems to linear separable problems by adding more dimensions to it. Thus, the kernel trick helps us to build a more accurate classifier. Hence, it is useful in non-linear separation problems." ], "metadata": { "id": "pv4oOx0b6jzN" } }, { "cell_type": "markdown", "source": [ "In the context of SVMs, there are 4 popular kernels – `Linear kernel`,`Polynomial kernel`,`Radial Basis Function (RBF) kernel` (also called Gaussian kernel) and `Sigmoid kernel`. We will be focussing on the polynomial kernel." ], "metadata": { "id": "qfPvlJ4X69mO" } }, { "cell_type": "markdown", "source": [ "# **Polynomial Kernel**\n", "\n", "Polynomial kernel represents the similarity of vectors (training samples) in a feature space over polynomials of the original variables. The polynomial kernel looks not only at the given features of input samples to determine their similarity, but also combinations of the input samples.\n", "\n", "For degree-d polynomials, the polynomial kernel is defined as follows –\n", "\n", "**Polynomial kernel : K(xi , xj ) = (γxiT xj + r)d , γ > 0**\n", "\n", "Polynomial kernel is very popular in Natural Language Processing. The most common degree is d = 2 (quadratic), since larger degrees tend to overfit on NLP problems. It can be visualized with the following diagram.\n", "\n", "### Polynomial Kernel\n", "\n", "![Polynomial Kernel](https://www.researchgate.net/profile/Cheng_Soon_Ong/publication/23442384/figure/fig12/AS:341444054274063@1458418014823/The-effect-of-the-degree-of-a-polynomial-kernel-The-polynomial-kernel-of-degree-1-leads.png)" ], "metadata": { "id": "KVb9BxLM7HTi" } }, { "cell_type": "markdown", "source": [ "# Use a Non-linear SVM model to classify your dataset.\n", "Write a function, which takes among its parameters, the coefficient C and generates an SVM classifier. Then it trains the classifier using the training data and then runs the classifier on the test data.
\n", "Using these results predict the accuracy and F1-score for each value of C.
\n", "Note: Remember to generalize this function so that it may run for different values of C. " ], "metadata": { "id": "ifB-fmTp-vd_" } }, { "cell_type": "markdown", "source": [ "## Run SVM with polynomial kernel and C=1.0" ], "metadata": { "id": "WakRGa6a72RG" } }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "0GgdNabd5nlh" }, "outputs": [], "source": [ "### Code Here\n", "\n", "### ----------" ] }, { "cell_type": "markdown", "source": [ "## Run SVM with polynomial kernel and C=100.0" ], "metadata": { "id": "DSLTPxj58VvK" } }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "g8LzoYlzMjh3" }, "outputs": [], "source": [ "### Code Here\n", "\n", "### ----------" ] }, { "cell_type": "markdown", "source": [ "## Run SVM with polynomial kernel and C=1000.0" ], "metadata": { "id": "k12vJHBQ8X6z" } }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "UjTERVxmMjqP" }, "outputs": [], "source": [ "### Code Here\n", "\n", "### ----------" ] }, { "cell_type": "markdown", "source": [ "#Results\n", "Plot the confusion matrix for each of the above three instances. You may use any libraries you may wish to.\n" ], "metadata": { "id": "Kfyst51Q96GK" } }, { "cell_type": "code", "source": [ "### Code Here\n", "\n", "### ----------" ], "metadata": { "id": "_ILueeNj-my8" }, "execution_count": null, "outputs": [] }, { "cell_type": "markdown", "source": [ "# Analysis\n", "a) For which value of C did the polynomial kernel give the best results?
\n", "b) Compare the results of your linear and your best polynomial kernel model, in part (a)?" ], "metadata": { "id": "RzBjwGmg8aoh" } }, { "cell_type": "markdown", "source": [ "Write your answer here." ], "metadata": { "id": "STvNS9bI9DOI" } } ] }