{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Programming Session Week 3 \n", "\n", "### Full Solutions \n", "\n", "In this session we will continue to work on regression and we will extend our toolbox to include an additional set of classification methods. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercise 1\n", "\n", "#### Exercise 1.a\n", "\n", "The model below was generated using a degree 2 polynomial. Study the evolution of the MSE for various degrees from 1 to 5 and by generating your training and test sets as noisy samples from the true quadratic function. Use $K$-fold cross validation to retrieve the correct model complexity out the possible maximum degrees." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [], "source": [ "num_bins = 5\n", "\n", "points_per_bin = 10\n", "\n", "dataset_size = num_bins*points_per_bin\n", "\n", "bin_list_x = np.zeros((num_bins, 10))\n", "bin_list_t = np.zeros((num_bins, 10))\n", "\n", "from sklearn.linear_model import LinearRegression\n", "from sklearn.preprocessing import PolynomialFeatures\n", "\n", "for b in np.arange(num_bins): \n", "\n", " x_true = np.linspace(0,1,10)\n", " t_true = 0.1 + 0.1*x_true + x_true**2\n", " x_sample = np.linspace(0,1,10)\n", " t_sample = t_true + np.random.normal(0,.1,len(x_sample))\n", "\n", " bin_list_x[b,:] = x_sample\n", " bin_list_t[b,:] = t_sample\n", " \n", " \n", "training_data_x = np.zeros((num_bins, 10*(num_bins-1)))\n", "training_data_t = np.zeros((num_bins, 10*(num_bins-1)))\n", "\n", "for b in np.arange(num_bins):\n", " \n", " training_data_x_b = []\n", " training_data_t_b = []\n", " \n", " for b2 in np.arange(num_bins):\n", " \n", " if b2 != b:\n", " \n", " training_data_x_b = np.hstack((training_data_x_b, bin_list_x[b2, :]))\n", " training_data_t_b = np.hstack((training_data_t_b, bin_list_t[b2, :]))\n", " \n", " \n", " training_data_x[b, :] = training_data_x_b\n", " training_data_t[b, :] = training_data_t_b\n" ] }, { "cell_type": "code", "execution_count": 34, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ " \n", "maxDegree = 5\n", "\n", "MSE = np.zeros((maxDegree,))\n", " \n", "for degrees in np.arange(maxDegree)+1:\n", " \n", " poly = PolynomialFeatures(degrees)\n", " \n", " for b in np.arange(num_bins):\n", " \n", " \n", " feature_mat = poly.fit_transform(training_data_x[b,:].reshape(-1,1))\n", " reg = LinearRegression().fit(feature_mat, training_data_t[b,:])\n", " \n", " Xprediction = poly.fit_transform(bin_list_x[b,:].reshape(-1,1))\n", " \n", " MSE[degrees-1] += (1/dataset_size)*np.sum((reg.predict(Xprediction) - bin_list_t[b,:])**2)\n", "\n", "plt.plot(MSE)\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercise 2\n", "\n", "#### Exercise 2.a\n", "\n", "Using the OLS loss, try to learn a classifier for the dataset given below. " ] }, { "cell_type": "code", "execution_count": 51, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "\n", "import scipy.io\n", "import matplotlib.pyplot as plt\n", "\n", "from matplotlib.colors import ListedColormap\n", "cm_bright = ListedColormap(['#FF0000', '#0000FF'])\n", "\n", "\n", "data_class1 = scipy.io.loadmat('points_class1_Lab2_Ex1.mat')['points_class1_Lab2_Ex1']\n", "data_class2 = scipy.io.loadmat('points_class2_Lab2_Ex1.mat')['points_class2_Lab2_Ex1']\n", "\n", "plt.scatter(data_class1[:,0], data_class1[:,1], c='b')\n", "plt.scatter(data_class2[:,0], data_class2[:,1], c='r')\n", "plt.show()\n", "\n", "target_class1 = np.ones((np.shape(data_class1)[0], ))\n", "target_class2 = -np.ones((np.shape(data_class2)[0], ))\n", "\n", "from sklearn.linear_model import LinearRegression\n", "\n", "my_classification = LinearRegression()\n", "\n", "target = np.vstack((target_class1.reshape(-1,1), target_class2.reshape(-1,1)))\n", "\n", "data = np.vstack((data_class1, data_class2))\n", "\n", "my_classification.fit(data, target)\n", "\n", "\n", "# Generate a grid of points on which I want to compute the prediction\n", "\n", "x1min = np.min(data[:,0])\n", "x1max = np.max(data[:,0])\n", "x2min = np.min(data[:,1])\n", "x2max = np.max(data[:,1])\n", "\n", "# generate set of equispaced points\n", "\n", "x1 = np.linspace(x1min, x1max, 50)\n", "x2 = np.linspace(x2min, x2max, 50)\n", "\n", "# generate all 50*50 coordinates pairs (x1, x2) over the space\n", "# xx1, xx2 are matrices containing the x1 (resp. x2) coordinates of \n", "# all the points on the 50 x 50 grid \n", "\n", "xx1, xx2 = np.meshgrid(x1, x2)\n", "\n", "\n", "Xprediction = np.hstack((xx1.reshape(-1,1), xx2.reshape(-1,1)))\n", "\n", "\n", "prediction_on_grid = my_classification.predict(Xprediction)\n", "# returns a real number\n", "\n", "final_prediction_grid = 2*(prediction_on_grid>0)-1\n", "\n", "\n", "plt.scatter(data_class1[:,0], data_class1[:,1], c='b')\n", "plt.scatter(data_class2[:,0], data_class2[:,1], c='r')\n", "plt.contourf(xx1, xx2, final_prediction_grid.reshape(np.shape(xx1)), levels=0, cmap = cm_bright, alpha=0.2)\n", "plt.show()\n" ] }, { "cell_type": "code", "execution_count": 46, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[[-1]\n", " [-1]\n", " [-1]\n", " ...\n", " [-1]\n", " [-1]\n", " [-1]]\n" ] } ], "source": [ "print(final_prediction_grid)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Exercise 2.b\n", "\n", "How could you extend your classifier to the dataset shown below." ] }, { "cell_type": "code", "execution_count": 53, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "\n", "import scipy.io\n", "import matplotlib.pyplot as plt\n", "\n", "from matplotlib.colors import ListedColormap\n", "cm_bright = ListedColormap(['#FF0000', '#0000FF'])\n", "\n", "data_class1 = scipy.io.loadmat('points_class1_Lab2_Ex2.mat')['points_class1_Lab2_Ex2']\n", "data_class2 = scipy.io.loadmat('points_class2_Lab2_Ex2.mat')['points_class2_Lab2_Ex2']\n", "\n", "plt.scatter(data_class1[:,0], data_class1[:,1], c='b')\n", "plt.scatter(data_class2[:,0], data_class2[:,1], c='r')\n", "plt.show()\n", "\n", "target_class1 = np.ones((np.shape(data_class1)[0], 1))\n", "target_class2 = -np.ones((np.shape(data_class2)[0], 1))\n", "\n", "target = np.vstack((target_class1, target_class2))\n", "\n", "data = np.vstack((data_class1, data_class2))\n", "\n", "from sklearn.preprocessing import PolynomialFeatures\n", "\n", "poly = PolynomialFeatures(5)\n", "data_polynomial = poly.fit_transform(data)\n", "\n", "my_classification = LinearRegression()\n", "\n", "my_classification.fit(data_polynomial, target)\n", "\n", "\n", "x1min = np.min(data[:,0])\n", "x1max = np.max(data[:,0])\n", "x2min = np.min(data[:,1])\n", "x2max = np.max(data[:,1])\n", "\n", "x1 = np.linspace(x1min, x1max, 50)\n", "x2 = np.linspace(x2min, x2max, 50)\n", "\n", "# generate the grid \n", "\n", "xx1, xx2 = np.meshgrid(x1, x2)\n", "\n", "Xprediction = np.hstack((xx1.reshape(-1,1), xx2.reshape(-1,1)))\n", "\n", "Xprediction_polynomial = poly.fit_transform(Xprediction)\n", "\n", "predictions_grid = my_classification.predict(Xprediction_polynomial)\n", "\n", "plt.scatter(data_class1[:,0], data_class1[:,1], c='b')\n", "plt.scatter(data_class2[:,0], data_class2[:,1], c='r')\n", "plt.contourf(xx1, xx2, predictions_grid.reshape(np.shape(xx1)), levels=0, cmap = cm_bright, alpha=0.2)\n", "plt.show()\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Exercise 2.c\n", "\n", "We now want to use the OLS to learn a multi-class classifier for the dataset below. Start by coding the one-vs-one and one-vs-rest classifiers. Then use the a single \n", " discriminant function with one hot encoding of the classes.\n", " " ] }, { "cell_type": "code", "execution_count": 83, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import scipy.io\n", "import matplotlib.pyplot as plt\n", "import numpy as np\n", "\n", "data_class1 = scipy.io.loadmat('points_class1_Lab2_Ex3.mat')['points_class1_Lab2_Ex3']\n", "data_class2 = scipy.io.loadmat('points_class2_Lab2_Ex3.mat')['points_class2_Lab2_Ex3']\n", "data_class3 = scipy.io.loadmat('points_class3_Lab2_Ex3.mat')['points_class3_Lab2_Ex3']\n", "data_class4 = scipy.io.loadmat('points_class4_Lab2_Ex3.mat')['points_class4_Lab2_Ex3']\n", "data_class5 = scipy.io.loadmat('points_class5_Lab2_Ex3.mat')['points_class5_Lab2_Ex3']\n", "\n", "\n", "\n", "plt.scatter(data_class1[:,0], data_class1[:,1])\n", "plt.scatter(data_class2[:,0], data_class2[:,1])\n", "plt.scatter(data_class3[:,0], data_class3[:,1])\n", "plt.scatter(data_class4[:,0], data_class4[:,1])\n", "plt.scatter(data_class5[:,0], data_class5[:,1])\n", "\n", "plt.show()\n", "\n", "\n", "data = np.vstack((data_class1, data_class2))\n", "data = np.vstack((data, data_class3))\n", "data = np.vstack((data, data_class4))\n", "data = np.vstack((data, data_class5))\n", "num_points = np.shape(data)[0]\n", "\n", "# generating polynomial features\n", "\n", "from sklearn.preprocessing import PolynomialFeatures\n", "\n", "poly = PolynomialFeatures(4)\n", "data_poly = poly.fit_transform(data)\n", "\n", "\n", "\n", "\n", "target = np.zeros((num_points, 1))\n", "\n", "num0 = np.shape(data_class1)[0]\n", "num1 = np.shape(data_class2)[0]\n", "num2 = np.shape(data_class3)[0]\n", "num3 = np.shape(data_class4)[0]\n", "num4 = np.shape(data_class5)[0]\n", "\n", "\n", "target[num0:num0+num1+1] = 1\n", "target[num0+num1:num0+num1+num2+1] = 2\n", "target[num0+num1+num2:num0+num1+num2+num3+1] = 3\n", "target[num0+num1+num2+num3:] = 4\n", "\n", "K = 5\n", "\n", "\n", "from sklearn.linear_model import LinearRegression\n", "\n", "\n", "x1min = np.min(data[:,0])\n", "x1max = np.max(data[:,0])\n", "x2min = np.min(data[:,1])\n", "x2max = np.max(data[:,1])\n", "\n", "# generate boundaries of the grid\n", "\n", "x1 = np.linspace(x1min, x1max, 500)\n", "x2 = np.linspace(x2min, x2max, 500)\n", "\n", "xx1, xx2 = np.meshgrid(x1, x2)\n", "\n", "data_prediction = np.vstack((xx1.flatten(), xx2.flatten())).T\n", "\n", "data_prediction_poly = poly.fit_transform(data_prediction)\n", "\n", "\n", "Prediction = np.zeros((len(xx1.flatten()), K-1))\n", "\n", "for k in np.arange(K-1):\n", " \n", " indices_class_k = np.where(target == k)\n", " target_one_vs_rest = np.zeros((len(target), 1))\n", " target_one_vs_rest[indices_class_k] = 1\n", " \n", " reg = LinearRegression()\n", " reg.fit(data_poly, target_one_vs_rest)\n", " \n", " Prediction[:,k] = np.squeeze(reg.predict(data_prediction_poly)>1/2)\n", "\n", " \n", "final_prediction = np.zeros((len(xx1.flatten()), ))\n", "\n", "for i in np.arange(len(final_prediction)):\n", " \n", " \n", " if np.argwhere(Prediction[i,:]==1).size ==1:\n", " \n", " final_prediction[i] = np.argwhere(Prediction[i,:]==1)\n", " \n", " elif np.argwhere(Prediction[i,:]==1).size >1:\n", " \n", " final_prediction[i] = 5\n", " \n", " else:\n", " \n", " final_prediction[i] = 4\n", " \n", " \n" ] }, { "cell_type": "code", "execution_count": 84, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "\n", "from matplotlib.colors import ListedColormap\n", "\n", "\n", "plt.contourf(xx1, xx2, final_prediction.reshape(np.shape(xx1)), cmap=plt.cm.hsv, alpha=.2)\n", "plt.scatter(data[:,0], data[:,1], c = target,cmap=plt.cm.hsv)\n", "\n", "plt.show()\n", "\n", " \n" ] }, { "cell_type": "code", "execution_count": 94, "metadata": {}, "outputs": [], "source": [ "from sklearn.preprocessing import PolynomialFeatures\n", "\n", "mypoly = PolynomialFeatures(6)\n", "\n", "Polynomial_features = mypoly.fit_transform(data)\n", "\n", "targetMatrix = np.zeros((len(target), K))\n", "\n", "\n", "for i in np.arange(len(target)):\n", " \n", " targetMatrix[i,int(target[i])] = 1\n", " \n", " \n", "# for regularization we consider the inverse inv(X^TX + Id)\n", "\n", "XTX = np.matmul(Polynomial_features.T, Polynomial_features)\n", "identity = np.identity(np.shape(XTX)[0])\n", "lbda = .1\n", "mat_tmp = XTX + lbda*identity\n", " \n", "invXTX = np.linalg.inv(mat_tmp) \n", "RHS = np.matmul(Polynomial_features.T, targetMatrix)\n", "\n", "Beta = np.matmul(invXTX,RHS)\n", "\n", "\n", "x1min = np.min(data[:,0])\n", "x1max = np.max(data[:,0])\n", "x2min = np.min(data[:,1])\n", "x2max = np.max(data[:,1])\n", "\n", "# generate boundaries of the grid\n", "\n", "x1 = np.linspace(x1min, x1max, 500)\n", "x2 = np.linspace(x2min, x2max, 500)\n", "\n", "xx1, xx2 = np.meshgrid(x1, x2)\n", "\n", "data_prediction = np.vstack((xx1.flatten(), xx2.flatten())).T\n", "\n", "\n", "Polynomial_features_prediction = mypoly.fit_transform(data_prediction)\n", "\n", "prediction_grid = np.matmul(Polynomial_features_prediction, Beta)\n", "\n", "prediction = np.argmax(prediction_grid, axis=1)\n", "\n" ] }, { "cell_type": "code", "execution_count": 95, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "\n", "from matplotlib.colors import ListedColormap\n", "plt.contourf(xx1, xx2, prediction.reshape(np.shape(xx1)), cmap=plt.cm.hsv, alpha=.2)\n", "plt.scatter(data[:,0], data[:,1], c = target,cmap=plt.cm.hsv)\n", "\n", "plt.show()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercise 3. \n", "\n", "#### Exercise 3.a \n", "\n", "Use the OLS classifier from scikit-learn to classify the flowers from the [iris dataset](https://www.kaggle.com/uciml/iris) into the 3 species. Don't forget to split your dataset into a training and a test part so that you evaluate it properly once it has been trained (you can rely on scikit learn's train_test_split function)\n", " " ] }, { "cell_type": "code", "execution_count": 146, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from sklearn.linear_model import LinearRegression\n", "from sklearn.model_selection import train_test_split\n", "\n", "\n", "from sklearn import datasets\n", "iris = datasets.load_iris()\n", "X = iris.data \n", "y = iris.target\n", "\n", "X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.1, random_state=42)\n", "\n", "# plotting the first two features \n", "plt.scatter(X[:,0], X[:,1],c=y)\n", "plt.title('First two features')\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": 172, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "misclassfication rate is 0.06666666666666667\n" ] } ], "source": [ " from sklearn import linear_model\n", "reg = linear_model.LinearRegression()\n", "\n", "\n", "from sklearn.preprocessing import OneHotEncoder\n", "\n", "enc = OneHotEncoder(handle_unknown='ignore', sparse = False)\n", "targets_trainOH = enc.fit_transform(y_train.reshape(-1,1))\n", "\n", "\n", "# we regularize by adding a lambda*Id\n", "\n", "lbda = .1\n", "\n", "Xtilde_train = np.hstack((np.ones((np.shape(X_train)[0],1)), X_train))\n", "\n", "Identity = np.identity(np.shape(np.matmul(Xtilde_train.T, Xtilde_train))[0])\n", "\n", "\n", "tmp = np.matmul(Xtilde_train.T, Xtilde_train) + lbda*Identity\n", "\n", "RHS = np.matmul(Xtilde_train.T,targets_trainOH)\n", "beta = np.matmul(np.linalg.inv(tmp), RHS)\n", "\n", "# computing the error on the test set as the misclassification rate\n", "\n", "data_prediction = np.hstack((np.ones((np.shape(X_test)[0], 1)), X_test)) \n", "prediction_grid = np.matmul(data_prediction, beta)\n", "\n", "# returning the plane that gives the highest value\n", "prediction_grid_F = np.argmax(prediction_grid, axis=1)\n", "\n", "error_rate = len(np.where(prediction_grid_F!=y_test))/len(y_test)\n", "print('misclassfication rate is %s' %error_rate)\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### Exercise 3.b\n", "Do the same with the [https://www.kaggle.com/c/titanic](titanic dataset) and try to learn a model that can efficiently predict which passengers are going to survive the wreck. " ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import numpy as np\n", "from sklearn.linear_model import LogisticRegression\n", "from sklearn.model_selection import train_test_split\n", "\n", "myModel = LogisticRegression()\n", "\n", "import pandas as pd\n", "data = pd.read_csv('train.csv') \n", "target = data['Survived']\n", "\n", "feature_matrix = data \n", "\n", "# replacing the 'Sex' column with a binary column\n", "featureMatrix = data.iloc[:,2:]\n", "ind = featureMatrix['Sex']=='female'\n", "tmp = np.zeros((len(featureMatrix['Sex']),))\n", "tmp[ind] = 1\n", "featureMatrix['Sex'] = tmp\n", "\n", "# removing the rows containing NANs values and relabelling\n", "\n", "featureMatrix = featureMatrix.dropna(axis=0)\n", "featureMatrix = featureMatrix.reset_index(drop=True)\n", "\n", "# we also remove the name column which is beyond what we want to achieve now \n", "\n", "featureMatrix = featureMatrix.drop('Name', axis=1)\n", "featureMatrix = featureMatrix.reset_index(drop=True)\n", "\n", "\n", "tmp = featureMatrix['Embarked']\n", "# We turn the 'Embarked column' into a numerical column\n", "tmp2 = np.zeros((len(tmp),1))\n", "tmp2[np.where(tmp == 'C')] = 1\n", "tmp2 = np.squeeze(tmp2)\n", "featureMatrix['Embarked'] = tmp2\n", "ls = featureMatrix['Cabin']\n", "\n", "Cabin_number = np.zeros((len(ls), 1))\n", "\n", "# we first create a list of all decks and return the total number of cabins on each deck\n", "\n", "decklist = []\n", "for i in range(len(ls)):\n", " decklist.append(ls[i][0])\n", "y = list(set(decklist))\n", "y = sorted(y)\n", "\n", "max_numCabins = np.zeros((len(y),))\n", "\n", "# simple auxilliary function to deal with char\n", "def char_index(char_list, char):\n", " i=0\n", " for i in range(len(char_list)):\n", " if char_list[i] == char:\n", " return i\n", " \n", " \n", " \n", "for i in range(len(ls)):\n", " ind = char_index(y,ls[i][0])\n", " \n", " # if more than one cabin\n", " tmp = ls[i][1:]\n", " if tmp.count(' ')>0:\n", " cabin_list = []\n", " for j in np.range(tmp.count(' ')):\n", " cabin_list.append(tmp[:tmp.find(' ')])\n", " tmp = tmp[tmp.find(' '):]\n", " \n", " # then check the max over cabins... \n", " \n", " if max_numCabins[i]<= int(tmp[1:]):\n", " max_numCabins[i] = int(tmp[1:])\n", " \n", " # to be done " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercise 4. \n", "\n", "#### Exercise 4.a \n", "\n", "In this 4th exercise, we will study the robustness of the OLS approach for classification. Consider the dataset below. \n", "\n", "- Start by learning a simple binary OLS classifier on that dataset (you can use the linear_regression model from scikit-learn). \n", "- Then try to force misclassification by adding a blue point on the far left of the dataset. \n", "- Once your updated dataset can be used to highlight misclassification by the OLS, replace the OLS classifier with the logistic regression classifier from scikit learn (on the same dataset). What do you notice ?\n" ] }, { "cell_type": "code", "execution_count": 266, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "\n", "import scipy.io\n", "import matplotlib.pyplot as plt\n", "from matplotlib.colors import ListedColormap\n", "import numpy as np\n", "\n", "cm_bright = ListedColormap(['#FF0000', '#0000FF'])\n", "\n", "data_class1 = scipy.io.loadmat('points_class1_Lab2_Ex4.mat')['points_class1_Lab2_Ex4']\n", "data_class2 = scipy.io.loadmat('points_class2_Lab2_Ex4.mat')['points_class2_Lab2_Ex4']\n", "\n", "data = np.vstack((data_class1, data_class2))\n", "target1 = np.ones((np.shape(data_class1)[0], 1))\n", "target2 = np.zeros((np.shape(data_class2)[0], 1))\n", "\n", "target = np.vstack((target1, target2))\n", "\n", "plt.scatter(data[:,0], data[:,1], c = target, cmap=cm_bright)\n", "plt.show()\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As a second part, we add an outlier, in order to force misclassification" ] }, { "cell_type": "code", "execution_count": 267, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "# Adding an outlier\n", "\n", "data = np.vstack((data_class1, data_class2))\n", "\n", "target = np.zeros((np.shape(data)[0], 1))\n", "target[:np.shape(data_class1)[0]] = 1\n", "\n", "data_outlier = np.vstack((np.asarray([-4, 0.6]), data))\n", "target_outlier = np.vstack((1, target))\n", "\n", "plt.scatter(data_outlier[:,0], data_outlier[:,1], c=target_outlier, cmap=cm_bright)\n", "plt.show()\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Given the outlier, due to the lack of an activation function (and the fact that the classifier returns a real value, the distance of the point to the plane, instead of ), we can easily break a least squares classifier as shown below. " ] }, { "cell_type": "code", "execution_count": 269, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXQAAAD4CAYAAAD8Zh1EAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMiwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8vihELAAAACXBIWXMAAAsTAAALEwEAmpwYAABB/0lEQVR4nO2dd3xUZdbHvyeTTu9VsaEYVBQiFlzsK7oK6tp7RXbXtruK4rv29bWv4qogG11fdV17QUWwN2xBRaUqIkgAQTohdWae94+TmMlkQibJzNyZyfl+PvMhc+fOfQ4zd8499zzn+R1xzmEYhmGkPhleG2AYhmHEBnPohmEYaYI5dMMwjDTBHLphGEaaYA7dMAwjTcj0auDOnbu7vn2382p4w2gSvx8WLYJIhWA+H+y8c+JtamtIZQUALifXY0uSh/nzv1jjnOsR6TXPHHrfvtvx+OOzvBreMJokEIAjjoANG+pvF4F994WJEz0xq02Qt+BLdhz/ezLXrQYEf5ceLL79WcoKCr02zXMKC2VpY69FlXIRkVEislBEFonI1RFe7yIiL4rINyLyuYjs1hqDDSOUQADeew+uuw7uuAMWLkzMuD4fXHYZ5IYEhyKQkwN/+lNibGiLZJRuYudxh5CzYgm+ijJ8FVvIWbmEgX84lIzSjV6bl9Q0GaGLiA94ADgcKAGKRWSqc25eyG7XALOdc8eJyKCa/Q+Nh8FG2yIQgMsvh9mzobwcMjLg5Zd124knxn/8Y46Brl2hqAhWroTBg+EPf4Cddor/2G2VLm8/hwT8DbZLIECXt55l7bEXeGBVahBNymU4sMg5txhARJ4CxgChDr0AuBXAObdARLYTkV7OuVWxNthoW7z3Xp0zBwgGobIS7rkHfvtb6NQp/jaMGKEPIzFkrf2ZjMryBtszKsvIWrPSA4tSh2hSLv2AZSHPS2q2hfI1cDyAiAwHBgD9ww8kImNFZJaIzFq//peWWWy0Kd56q86Zh5KVBcXFibfHiD+lQ0YQzMlrsD2Y247SPQ/wwKLUIRqHLhG2hc/73wZ0EZHZwCXAV0CDeybn3BTnXKFzrrBLl4iTtIZRj3btNG8dibyGv3kjDSgdOpLS3fcjkJv/67ZAbj5bBu9N6bCDvDMsBYgm5VICbBPyvD+wInQH59wm4FwAERHgx5qHYbSKY4+F6dOhoqL+dp8Phg/3xKSYUFkJjzwCr7wC1dVw2GEwblxiUkhJjwg/THyN7s8/RPepjwCONcecx5oTxjV+dTcAkKbUFkUkE/gOneRcDhQDpznn5obs0xkoc85ViciFwG+cc2dt7bgFBYXOyhaNaHj8cZg0CTIz9feckQH33Qe77+61ZS3DObjoIpg7Vx076P+td294+mmtojGMxigslC+ccxHrN5uM0J1zfhG5GJgB+IBHnHNzRWRczeuTgV2Bx0QkgE6Wnh8z6402z5lnwlFHac48P19rwLOzvbaq5Xz7LcyfX+fMQRcxrV0Lb7+t/1fDaAlRLSxyzk0DpoVtmxzy9yfAwNiaZhh1dOsGo0Z5bUVsWLBAq3XCKS+HOXPMoRstx7RcDCPB9O2rcwDh5ObCNts03G4Y0WIO3TASzL776uRnRtivLzPTonOjdZhDN4wEk5mpK0+HDtW/MzNhl110m1W5GK3BM3Euw2jL9OoFkydDaanm0zt29NqiNkYwqCVTaVYGaRG6YYSwdq1WoYQrLMaL9u3NmSeSDsXvUHDSbgwd7mPPgzrTZ/J1KhiUJliEbhho2eBNN6nUQHY2VFXB734HV18deQLTSD3y581ixz8fg6+iDADflk30euJuMjeuY9lV93tsXWywCN0wgAcf1BrwqipNg1RVweuvw7//7bVlRqzoU3RzA9EvX0UZ3ac+nDayvObQjTaPc/Dcc/UX+oDKDTz9tDc2GbEnd/FcJMLKeJeZRfbPyyK8I/Uwh260eYLByIqOAJs3J9YWI36UD9wDF2ESVPzVVPUZ4IFFzado3NYlRs2hG20en6/xhhWDByfWFiN+rLzw+gayvIHcfFaf+CeC7Tp4ZFV0zJ/ftDMHc+iGAcBVV+lKzdrFPj6fyvNecYW3dhmxo3znIXz/wJuUDh6O82VS3bUXK8fewPJL7/DatK1SNK6YmROLmTR6OpMmb91lW5WLYQB77gn/93/w6KOwaBEMGgTnnAMDUuNO3IiSLUP2Z+H/fea1GVFTNH4BQI0jb3oZsTl0w6hhxx3h5pu9tsIwNMUyc6KmWJqKykMxh24YhpFkzJxYzAWFsxl2wdBmvc8cumEYRpJQNH4BbNrMiAElzXbmYA7dMAwjKaitYtEUy7YtOoZVuRiGYXhM0bhi+nYsbVa+PBIWoRspS3W1Ltf/6CPo2hWOOw62395rqwwjeopuXQ1Ll9K3YynX3tF6lbaoHLqIjAImoj1Fi5xzt4W93gl4Ar1PyATucs6ZCkYbwzmYOhWeekr1UA48EM4/H7p0if1YlZVw4YXw44+6ytPng+efhxtugMMPj/14hhFrap25RuWxkdxsMr4XER/wAHAkUACcKiIFYbv9CZjnnBsCHATcLSIp3MbXaAl33AF33gnffw8rV6o+yumnq3OPNS+/DIsX1y3ZDwTUyd98c0NNFsNINorGFaszv2xhTI8bTcJmOLDIObfYOVcFPAWMCdvHAR1ERID2wDrAH1NLjaRm1Sp1shUVddv8fti4EV56KfbjvfFG/bFqEYF582I/nmG0hIyyUrq++n/0euxO2n37KfPnufr58l13jel40aRc+gGhUmQlwD5h+9wPTAVWAB2Ak51zDfqai8hYYCxA794tm8U1kpP58yErS2VnQ6mshM8/hzPOiO147dpF3h4M6pJ9w/Ca/PlfMPAPhyKBAFJVQbXkUNluGEv2upa/3RGHPCTRReiRejSFa1AeAcwG+gJ7AveLSIOkkHNuinOu0DlX2KVLj2aaaiQzPXuqMw3H54P+/WM/3gknRHbcnTtrf04jdckoK6XfxPHsPqove/y2N/3vvpyM0k1em9U8nGOHK48ns3QjvvJSMgJ+cvxbGFL+KX874P24DRuNQy8Btgl53h+NxEM5F3jBKYuAH4FBsTHRSAV23RX69WvY3ScrC046KfbjHXAAnHiidhfKz9dH164wcWLatYlsWwSD7HzRwfR8+j6y16wka90qejw3mV3OH6E5vBQh94e5ZG5c2/CFqip48cW4jRtNyqUYGCgi2wPLgVOA08L2+Qk4FPhQRHoBuwCLY2mokdyIwAMPwIQJ2pPT59N+mdddB9ttF5/xLr1ULxazZ0OnTrD33pCZQoW4y5bBm2/qb/ygg1QQrK3T4fO3yV26gIyqupntjOpKclYupdNHr7HxoPDpu+REXBB/QIjYvTBCk41Y0eTp75zzi8jFwAy0bPER59xcERlX8/pk4GbgURH5Fk3RXOWcWxM3q42kpFs3mDIF1q2DsjLo27dOjjZe9O4No0bFd4x48NxzcM89Wp0TDMITT8Dvfw9//rPXlnlL/oIvyKhsONvtK9tM/oIvUsah339XOf/rcskhrMQrNxeOOSZu40YVzzjnpgHTwrZNDvl7BfDb2JpmpCpdu+rDiMyaNfCPf9SfQK6o0Dr6ww+H3Xbzzjavqeq7PcGcXHxl9R1hIK89VX1TY9VY0bhikAw6T7pNbyODQf2C8/K0Y8qxx8Zt7BS6QTUM7wkGYdYsWL1af5stWZn60UeR71wqK+Gtt9q2Q99w0LH0v/typKKMjJpZdidCMCeX9YfHYTImhkybBiumhuqx7Kkr7d54A9auhaFDYfjwuE7ymEM3jCj5+WcYOxY2bNA0aDAII0fC3//ecDJ4a2RkRP5NizTvOOmIy85h4SMfs911Z9Ju7ucAlO0ylCU3PUYwr5Fa1SRg/nx15pNGT4ejQhpRdO4cn6qARjCHbhhRMmGCOvXQ8swPP9R8+MknR3+ckSPh9tsbbs/KSs35gFhT1W97vnv4IzJKNyLOEejQ2WuTtkqtSuKIASX1nbkHmNqiYUTB2rWwcGHDWvuKCnXozaFzZ63+ycnRObLsbH2cfz4MHBgzkxNO9sqltPv2UzLKYqP1EGzfKWWc+aTJGZwxwfvFkhahG0YUVFY2nvqMJEHQFEccAYWF8N57qhr5m99oHX8q4tu0nh2u/D3t53xCMDMb8Vez8qIbWXXWlV6bFlfq65cnB+bQDSMK+vTRyp2VK+tvz8qCww5r2TG7ddNSxVRnhwkn0/6bmWRUV/1acthnyg1UbDeIjSPjV6LnFaFdhZIhKg8leS4thpHEiMBNN2nlWVaWbsvLg1694NxzvbXNSzLX/Ez7rz4go7q+iI+vooxej93pkVXxo+jW1bBpc9KkWMKxCN0womSvvTRf/tJLUFKiKZMjjtA8eFslc8MaXGY2VDXULM5a+7MHFsWPZEyxhGMO3YgJ69frMvZNm2CffbSWOh01VXr1gosu8tqK5KFywM64CEX1wcwsNu13hAcWRUEwSIfP36bdnE+p7t6X9YefRLBdh0Z3r02xxKqrUDwxh260ms8+g7/+VWuzq6rg0Ud1ku+WW+K/9N/wFpeVzbK/3su2t/+JjIoyBAhmZRNo14mV513jtXkNkMoKBv7xMPK/+5qMii0Ec/PpP/EKvnvoPcp3HtJg/6IiNMVy2cKYa5fHA/u5Ga2iuhquukorPSor1alXVOhqyHfeie1Yy5fD+PHa2m7UKPjXv1JKgC9tWXfMOSy673U2jhxN2c57svqUy5j31Df4u/fx2rQG9HzyXvIXfImvvBRxDl/5FnybN7DDhJMbiGYVjSuGWcUp48zBInSjlXz9dWTxuPJyeOWVlleAhLN+PZx1FmzerLXgW7boncAPP8BttzX5diPOlA4dSenQkV6b0STdXv0/fJXl9bYJkP3zT2SvXEpV3+0Afu0qpCmW1HDmYA7daCVby5PHMof+3HN6kQhd2FNZqSs1S0ri00TDSEO2dk6KaIpllk5+Jnu+PBKWcjFaxR57RM6T5+XB0UfHbpxvv23Y3g5U/3zRotiNY6Q3a485l0BO/VZXDqjsM4AHb1z9a4olmStZtkZqWm0kDVlZcMcd6sBzc1VcKjdX89yHHBK7cXbYIXLzikDAonMjelafehllBYUE8trjMnwE8toT6NiFu/KvA4hL4+ZEYikXo9XsvTe8+qpKv9aWLRYUxHaMk09WvfDQSdCsLO0futNOsR3LSF9cdg7fTXmf9l+8R/tvPmHWyn68s2R7qnx5KRuVh2IO3YgJnTrFdxl7nz4waZKWQi5erGmeQw5RBUTDaBYilBYeTHG7g5k5sZhJx033XCUxVphDN1KG3XaD//5XJ0czM+uW4BtGc6ld9XlB4ey0ceYQpUMXkVHARLSnaJFz7raw168ETg855q5AD+fcuhjaahiA5usNo6XUX8I/1FtjYkyTSSMR8QEPAEcCBcCpIlIvQ+qcu9M5t6dzbk9gAvC+OXPDMJKNVNBjaQ3RROjDgUXOucUAIvIUMAaY18j+pwL/jY15hmEYrSc0xTLsgvSKykOJxqH3A5aFPC8B9om0o4jkA6OAixt5fSwwFqB37+STnjTSH79fV5127Kgdg4z0p+jW1UB6pljCicahR1pbFWGxNwDHADMbS7c456YAUwAKCgobO4ZhxIXnnoMHHqhboHTCCXDJJZHr25OB8nL44gu1b+hQbVNnNI90T7GEE82pXAJsE/K8P7CikX1PwdItRhLy1ltw773128U9/7wuhLr0Us/MapS334brr1f7QGUU7rpLNdiNpqldwp/QrkKbN8P06dpJfPfd4YADEh4tiIukrBS6g0gm8B1wKLAcKAZOc87NDduvE/AjsI1zbktTAxcUFLrHH5/VUrsNo1mcfLIKeYWTmwvvvptcJZA//6w1/ZVhPSPy8uD116F9e2/sShWKbl0NS5cmNl++cKEK5fv9GjXk5cG226okaH5+TIeSwsIvnHMRL+1N3oc45/xoTnwGMB94xjk3V0TGici4kF2PA96IxpkbRqJZvTry9mAQSmPTpD5mvP56fRGyUN57L6GmxA2pKKP/3X9myMFd2GtEPjtccRzZK5e2+rhF44ph6VImTc5I7OTn//yPnki1t4Dl5fDjj/DYY4mzgSi1XJxz05xzOzvndnTO3VKzbbJzbnLIPo86506Jl6GG0Rp22SXy9nbtdJVrMrF5s+rMhxMIJN/Fp6XsdPnR9Hh+MpmbN5BRWU7nD6Yy6My98W3e0OJjFo3TFEvC8+WrVsGKCFnoqiq9OieQtjFTYETNunWqM37jjfDCCxpopAOXXNKw92duLlx2Weu6Kq1cCZMnawPp6dMjO+Lmsv/+kRdPicC++7b++F6Tt+Ar2s35jIyqugkNCQbJqNhCt6n/bvbxiorqJj89adxcO9ERiQS37ErS+X3DCxYuhLFjNQ1YWak9Qh9+GB5/HLp29dq61jF4MEyZolUuCxeqNszYsdoqr6V8+ilccYVGztXV+nk99hg88kjrGkcPGwb77QeffFJ3Qc3Lg9GjYbvtWn7cZCFv0bcRHZ2voox284qbdazafHmLovKSEj3BZ8/WE+Lcc1Vprrl0765fzPff1+/2kpOjX1oCMYdu/MqNN2onoFoqKtS5P/AAXHutd3bFioIC/b/EgkBAP5PQqpnycli6FJ56Cs45p+XHFtEuTO+9B9Om6YTt6NHpEZ2DNpaO1OYqmJNH2U57RH2cX0sSR08HmqnHsmwZnHFGXdeUZcvgm2/gmmtapu1y661wwQUaCVVV6Zc2eDCcfnrT740hTVa5xAurckkuNm+Gww+P3KOzc2ct+zPq+P57OP98KCtr+NrAgSoiZjSCcww6azh5i74ho1oXBTgRAu06MvfF7/F36bHVt4d2FWpxvvyaa/SkDp997tQJ3nhj62mUxqiqgvff15z6brvBkCGxbdtVw9aqXCxCN4Ctl8smU0lfspCd3XglSmvSLW0CEb5/8E22uf1iurz1LBL0U7rH/vx0zUNNOvNp04hN4+avvor8BVZWqkPu27f5x8zO1qjIQ8yhG4DmaPfeGz7/XNMJteTkwLHHemZW0rLtttC7t6ZYQm9y8/LiqwufLgQ6dGbJ359gyU2PqWONYgFOvRTLrq2UvO3eHX75peH2YFB1IVIUq3IxfuWGG7SdW36+Rpm5ubDnnjpXZNSnduVm1651n1dODhx2WFrJa8efjIwmnfn8+WFL+GPxAZ9zTsNbqexs7ZqSwiu3LEI3fqVbN3j2WdUPWbFCa7cHDfLaquRlu+3gtde02mXtWk2ZpkMVSjIxfz7MnFhM346lXHtHDCPnQw/Vk3zKFL06+/0wciT87W+xG8MDzKEb9cjIaFnlVlslM1MlO4zYE3fJ2zPPhBNP1PLF7t119j/FMYduJIy1a7Veu1evuEz+G2lE0fgFQAIkb3Nz06rLuDl0I+6sXKnNnBcuVEfeqxfcfLNWdhlGKLUpFmg7krexxBy6EVcCAbjwQhXHqq0SW7YM/vhHePFFzdvHCr8fPvwQiouhZ084+mi9kzZSg1pnnu5dhVrM/PlaI78VzKEbceXTT2HTpoYlv34/TJ0auwqaigpdyr9kiS72yc7WVd333qtL6Y3kpmj8Ati0mREDSsyZR2LSJPjPfxpqKodhDt2IK6tWRV6/UVUVWaCupTz7rOqd157vtV2JrrlGBe8SrJFkNIP6XYWsNWUDfvwRnniiSWcOVoduxJnG8uR5ebDXXrEb5/XXI5/vZWWweHHsxjFii2eSt6nE++/XX+23FSxCN+LKzjvD8OHw2Wd1DjcrS3Pchx0Wu3EakydwzqQLkpFalcS+HUublrx1TnN3M2aoxsrvfqdNVtsKWVlRl4WZQzfizh13qALhiy9qKuTww+G882Lb9Pi44zTlEqp+KKIXjm09uIv3+/Vhui4NKSoiRPK2icVCzqnY/FtvqTKiiDr2k05Kzmaw8eDQQ+HBB6Pa1dQWjbQgENBFfh9+qD7A59MLxpQpsMMOibOjogLuvFNTQH6/jj1hgq4iNULy5dGKa337LfzhD/Wv1KA6C08+CQMGxMHKJOSVV1Si1+dDystbp7YoIqOAiYAPKHLO3RZhn4OAe4EsYI1z7sAWmm4Yzcbn0/P9+++1X0G3brqCM5Z3AdFw5ZUqnVA7KbtoEVx8sRYoeHGnkCzUpligdvIzSqXEDz6IPDniHHz8cdtx6MccAyNGaMRy882N7tbkTISI+IAHgCOBAuBUESkI26cz8CAw2jk3GDixFaYbRosZOFBXcx9ySOKdeUkJfPllnTOvpapKg8m2yrRpaIrlsoXNn/zMz48s3uXzRe7Tl8507Qpjxmx1l2g+3eHAIufcYudcFfAUEH7U04AXnHM/ATjnGumxbhjpS0lJ5AnYQEAj9TaBc3R/4SEGHzeQIYd0JeOwgwk881zL9cuPOCJyzWkwCAcf3Hp704xoHHo/YFnI85KabaHsDHQRkfdE5AsROSvSgURkrIjMEpFZ69dH0CI2jBRm++0bRuegTn733RNvjxf0u+8q+v/jL+QuW0TmpvUM2fA+N/x4jnYCagl9++rkSE4OtGunj7w8uP32lh8z1ixcCO++G9uFFS0kmhx6pHqZ8JnUTGAYcCiQB3wiIp86576r9ybnpgBTQCdFm2+uYSQvvXppBc9bb9WlfUXUF516qre2JQLfpvX0fPqfZFTVTWBm4HRC87HH4OqrW3bgI4/Ubt6ffqqpln33TY50y8aNcMklutDB51PlucMOg+uvb1kLuxgQjUMvAbYJed4fCL8UlaAToVuALSLyATAE+A7DaENce63O0z39tDbcLiyEyy/X8sl0J3fpQioCmeSHvxAIaAPm1tC+fWwXLsSCG2+E776r34j3nXe0kUCCm0PXEk3KpRgYKCLbi0g2cAowNWyfl4HfiEimiOQD+wDzY2uqYSQ/mZlaYz9jBnz0kWrJtJWmF4/es47MYISck0j6lfiUlcEnnzTsql5RoVdzj2gyQnfO+UXkYmAGWrb4iHNuroiMq3l9snNuvohMB74Bgmhp45x4Gm4YRnLwq+Rtdg+yR+6nji50MiEnB84+2zsD48HWdFXKyxNnRxhR1aE756YB08K2TQ57fidwZ+xMMwwjFagneVtxi05YzpihteLdumnuvCUVLslM587aJXzZsvrbfT6tF/cIWylqGEaLCJW8baDHUlmpkWqnTunbnuqrr3RStFbnobYS54kn4jppIoWFrVspahiGUUvDrkIR8uM5OfpIZ/baS0WKnnlGhfj32guOP97Tckpz6IZhNAvrKhRC//7wl7/E/rgbNsB772kp5AEHQJ8+Ub3NHLphGFFhXYUSxNtvw3XX6QrZYBDuuQcuuiiqiWVz6IZhNIl1FUoQGzaoMw+vopkyBfbfX8WKtoK1CTFajHOaT/3kE+0bmg6UlMDMmUmxijtpqO/Mjbjy0UeRtWuqq2H69CbfbhG60SJWrlRZ2NWrtVKrqgouvDB2TZ8TTUUFXHUVzJql2itVVZq6vOWWttvxqKgImFVM346lXHtHE40ojNgQvlCpFufUqTeBXXKNFnH55VqCW14OpaXqAB9+WKP1VGTiRCgu1jvd2v/PzJl6p9sWqXXmFxTONmeeSA44IHL/0JwcFQpqAnPoRrNZvBiWL9f5mlAqKrSKKx44p3cF69fH59hTpzZUSqyshOefj/14yU7RuGKYVcykyxam7uRnMKh5s40bvbakeXTvrtFSTo7e+opoH8MxY6KS7LSUi9FsNm1qXExuw4bYjzdrlgrYbdigv9Pdd4f//V8992NBMBhZ9hZUsqMtUTQuNMWSoqs7P/pIu/ps2aLR7t576/PW1IcvXAg//qg9BXfeOXa2RuKkk7Sz+owZmmY5+GAYPDiqt5pDN5rNoEENo3PQoCLWPQeWL9eAJbSl5Ndfa5vJZ56JzSJEnw8KCmDu3PrbRdpOc/lp02DFVJ38TOkUy/ffq9RA6Anz+efw5z/DI480/3hlZXDZZTr7X1tGOHiwqq7FU8J3u+20VLGZWMrFaDa5uXDFFfpvrUPNyVE98BNOiO1Yzz3XcJ4oEICff269ImsoEybo77O221lWlnY/++tfYzdGslI0rpgVU4tb1iIu2XjyyYa3W36/ytz++GPzj3fvvXqlr6hQ515RoY2rJ06MibmxxiJ0o0WMGQM77qhKoWvWaP+BY49VJxhLSkoiT/yLwKpVsRtn0CD9v/z3v/rbLyiAU07Ri1Q6U78kMUVTLKGUlES+fczM1BNm++2bd7zXXovcJPa111resCOOmEM3Wsxuu+kjnhQWauVM6B00qJMvKIj8npbSt2/biMihfool5aPyUAoLNaKO5ISbm/veWqlgY5MuHpNG36SRjhxzjCqVhjZ+z83VCq7+/T0zK6WZP1+d+aTR09PLmQOcfLJ2Nwqdtc/N1Vxg167NO5YIDBvWcKJGRC8cSYhF6EZSk5+vaqRFRapVlJcHJ54Y+1x9W6E2xXJB4Ww46ihvjYkHnTvDf/4D//qXLiTo2BFOOw2OPrplx7vqKl0tV1mpUXlODmRnw/jxMTU7VpgeumEkmGBQo+SqKi2YyM5OzLi2hL+FrFsHL70ECxboZMtxx0GXLp6ZY3rohpEkfPedlmGWltbdyd94Ixx0UHzHrV9fbjSLrl21UWwKENWlWkRGichCEVkkIg2mdkXkIBHZKCKzax7Xxd5Uw0htqqq0fn71aq2A27JFH3/7mxZnxIOiccUUjStmxIASc+ZtgCYjdBHxAQ8AhwMlQLGITHXOzQvb9UPnXAsTVYaR/nz8ceSiCb9fpQf++MfYjld062rAJG/bEtGkXIYDi5xziwFE5ClgDBDu0A3D2AobN2olXDh+P6xdG9uxLF/eNonm2+4HhLa2LqnZFs5+IvK1iLwuIhGFB0RkrIjMEpFZ69f/0gJzDSN1GTYsspBeXl7sGsXPn8+vKRZz5m2PaCL0SGoZ4XHGl8AA51ypiBwFvAQ0aK3hnJsCTAGtcmmeqYaR2vTvrwUSU6eq7DBoifTOO8PIka0/ftGtq2HpUvp2LOWMCR6mWGbN0tLBX35ROdhTTtFyQiPuROPQS4BtQp73B+r1c3HObQr5e5qIPCgi3Z1za2JjpmEknldeUT30NWtgwACtTtl339Yd84orVPzv+ed19euoUbp4KrOV9Wb1UyweTn4+95zqn9Qu7V28GF5+WTUVzKnHnWjuyYqBgSKyvYhkA6cAU0N3EJHeIlqEJSLDa44b46ygYSSOZ56B229XDfbqali0SGUBiotbd1wRLVH85z917cvvf9/6OvTakkTPUywVFSpaFarTUFWlusdPPumZWW2JJs8A55wfuBiYAcwHnnHOzRWRcSIyrma3E4A5IvI1cB9wivNqxZJhtJJgECZPbqgfU1kJDzzgjU2RKCqqi8yToiRx0aLG+2HOnJl4e9ogUd3oOeemAdPCtk0O+ft+4P7YmmYYLcPvr2v20hI2b67LcYfTEgXWePBriuWyhbBrkqgkdu7ceE/M5uqopBrO6Yx3a3NnrcSmwY2E4Zz2H5g3r/HffWv44gvVZtpvPzjwQLj//paN075942mQZBAEq5cvTxZnDvrhDBzYsJ1Vbi6cfro3NsWbYBAefRQOOUQnWMaMgQ8/9Mwcc+hGQvj+exg9WldQjxsHRxwBn34au+MvXKiNZX74QS8cZWXa3/TWW5t/LJ8PzjlH/VAoubm60tMrQlMsnufLG+Puu/Uik5MD7drph/anP7V+NjlZeegh/WI2b9bny5erTvosb3SqTJzLiDuVlSrsF96vNzdXqz1i0UTi6qvh7bcbLtzJzlbt7+YWWDinlXePPKK/1V69tMrlsMNab2tLmD8fZk4sTq4Uy9b46ScVtdpll/i2avOSqio49NDI+bkhQ+Dhh+MyrIlzGZ7y0UeRl7wHg/Dqq3D++a0fY9GiyKsws7K0XV1zHboInHGGZgq8To3+GpWPng67pojk7bbb6iNWbNmiX0qsW2K1hvXrI590oBc0DzCHbsSd9esjr5CsqordkvdBg/Q3FN59rLoa+kVa1xwlIknizCdnACnizGPJTz/B9dfrLQrAHnuoPGWfPt7aBTrRG6mqB7Q/Y3MIBLRXaUWFRvctvKtJ0kSckU4MHRp5e14eDB8emzHOO6/hRGZurq7M7NAhNmMkktol/JDE+fJ4U16uX+ycOTq77ffD7Nm6rbHWcIkkK0ttae1ky3ffwe9+B5deqg01Dj9cb11bQBs9U4xEssMOeo6GBh25uVoQ8ZvfxG6Mhx7S4CYzU4OnCy9MzR6hReOKmTmxmAsKZ7ddZw7w5ps6AROa1ggGNf3y/vutP/66dfDgg+qUr79eHWtzOftsnVzp2VNPvF120ZWyQ4ZE936/X2U216yp01SuqNDZ/EWLmm2OpVyMhHDddVro8MILmmo58kiNnsMr3FrD4MFxm4dKGEXjFwC1UXkjtzZthZKSyBOOlZVaTdIaVq3SCZKyMj0h58yBt96C225rXpQhov0QW9oT8bPPGtdUfukl1YpoBubQjYSQkaG6JaNGeW1J8tLmUyzhDBqkk6BlZfW35+RoJNwapkzR8qXayZ1gUC8Ut9yiZVGN5cZjzebNkSdWAwGdfGomduYYhscUjV9A0bhiDhiwjA67bsOV9/Zj1rwkqubwipEjtV40K6tuW3a2KqW1dvLl448jz9Rv3qzRe6IYNizy6re8PF0d10zMoRuGhxTduho2baZHvxzGvjaGu5/oxT/+04sDx+7MhPv7em2et2Rm6kKA447TutOuXeHEE3WypLURdMdGtG+CQV0QlSh69NA8fOjEau0E0yGHNPtwtrDIaBF+v/6unn1W74gHD4Yrr4SCAq8tSx1qUyyXX53HXqcXUF5Z30nl5QQpfmw+g3esiPR2ozVMnQp33FFfgS0rSyd67rkn8fZ89plOMG3ZAr/9rU4yhd6ZhGALi4yYc9NN8M47db+Hb7+Fiy7S1ZWxXE+SrtR2FTpjwrbc9XhnAsGG+1T5hakfdGbwjj8n3sB055hjVKv9mWc0jVNdrdHITTd5Y88+++ijlZhDN5rNmjVaEFBVVX97VRU89ph2sTciE6mrUHZWkIwIypC+DEd2VgRPb7QeES03PPtsLQ/s2VNz8ymOOXSj2SxbpkFNuEMPBFQky4hMY12Ffn/IBq76Z0MZx4wMOOHQDQmyro3SpYu2kEoTbFLUaDbbbNPQmYPWlLe2mixd2VpJYr+e1Uz5n6Xk5gRplxegXV6A3OwgD161lAF9InzQhtEIFqEbzaZ7dxWZe+cdLd2tJTsbzjzTO7uSkaIiYFbT9eVnHrWOUftt4tUPO+EcHP2bjfTsGgfReCOtMYdutIjrr9cS4eee0yqXXXeF8ePTIg0ZM6ZNA2YVR71QqEcXP+eOtla8RsuJyqGLyChgIuADipxztzWy397Ap8DJzrnnYmalkXRkZsLFF+vDaEg9ydu2qJLYGjZu1HrwLl28tiTlaNKhi4gPeAA4HCgBikVkqnNuXoT9bkebSRtGm6XNS962lBUrtESqVip3u+3g5pthp508NSuViOZecDiwyDm32DlXBTwFjImw3yXA88DqGNpnGCnDtGmmx9Jiqqu108mcOfp3dbX2Lbzwwrr2bkaTRHPW9QOWhTwvqdn2KyLSDzgOmLy1A4nIWBGZJSKz1q//pbm2GkbSUjSumBVTi5k0ero585bw0Ue6SjJSh5Lp072xKQWJ5syLsOSBcL2Ae4GrnHMR1G5C3uTcFOdcoXOusEuXHlGaaBh1BAKwZAmsTqL7wHpR+VGWYmkRK1dGlpGtqFAZXSMqopkULQG2CXneH1gRtk8h8JSIAHQHjhIRv3PupVgYaRigQdwNN2ipZCCg6qp33KFllLHEOW2Ms2yZaiQ11pO5tnEzWIql1RQU6Ex7uFPPz4fdd/fGphQkGodeDAwUke2B5cApwGmhOzjntq/9W0QeBV41Z27EksWL4eqr62spzZ2rzV6eflpXcseCDRu0e1htUOicCo9NnFhfEK+2vvyCwtkMu6CNN6KIBUOG6BV63ry6xQ1ZWVobe9BBnpqWSjQZVjjn/MDFaPXKfOAZ59xcERknIuPibaBhgGoohQdvgYDeqc+bF/k9LeHWW+HHH7VRTnm5XkC+/RYmh8wOFY1fYM481ojA/ffDWWdB794qK3vSSfDvf3vbpTvFiOqTcs5NA6aFbYs4AeqcO6f1ZhlGfVaujNyPICMDfonR/Lrfr60qw/sNVFXBK6+ollP9KhZz5jElJ0clOy+6yGtLWs/y5bB2rTa7bd8+YcPapc9IKOvWwXvvqdMcOVKDsWjYZx+YNau+1ADUqZ7GgmCwYZFF6DhWkmg0yaZN2gd07ly9s/D7tRzzvPMSMrydmUbCmDFDZaj/8Q/NSR9/PDz+eHTvHT1aFw6Gav7n5mozm549Y2Nfdrbmy8Pz8YKjT85a+nYsbbEz//jrdpx9/QCOu2IHnpzehWqTaUlPrrlGc3SVlVqGWVmpXZfefTchw1vHIiMhrF8PRx/dMMLOyVEN9R13bPoYGzbovu++q3exp56qjV1iNSEK8MMPcMEFmmaprIRMnyNLqvnu5QX07xWhrC4K7nysFzdM6UN5ZQbOCe3yAuxdsIU3H/g+9dPD1dXquDp2TFxj5ZbinMoK5Ofr1TvWrF2rEUskKdLdd9f5gBiwtY5FSf4NGOnC++9H/r37/fDGG9Edo3NnuPRSePFFjeyPOiq2zhz0wvLiizB2LOzcbQ379l3Kzw++2GJnvnpdJtdN7ktZhQ/n1Ngt5T6K57XjhXdTWKvE74e774aDD9ar6pFH6i1YsvLRRxpRHHmkVs38/e8No4vWsnFj4xO469fHdqxGMIduJIRAQAOkcILByE3PveS5Saup/qSYM4Z8y4cvrqXj0JZribz/ZXuyMhv+x7eU+3jhnc6tsNJj7rxTr3wVFRqlr12ruiuffea1ZQ2ZM0drXletUlurquD113VRQyzZdlttChBOZibst19sx2oEc+hGQvjNbyJPOObktKi5edwoKgKWLmXS5AyuvaORzvDNoEN+MOJdhC8jSJeOSXYli5ayMnj11fqLAkCf/+tf3ti0Nf7974bReGWl3jauWxe7cTIztVN6bm7drWNWluYHEzQpmuoZPCNF6NlT0yX//KdG5MGgOvPjj9eJyGTg1yqWyxYCjSwPbSaHDt9U0xe0fuSWneW48Lg1MRkj4axb13i+fPnyxNoSDT/9FPn2MCtLNSS6do3dWEcdBX37whNPwM8/w/DhcPrp0K1b7MbYCubQjYRxyimw776aM6+u1si8sWX1iaZ+SWLsjMrKhBn3f8+oiwdSUZ2B4KjyZ3D3n0sYOqg8ZuMklF69Ik9eiCTPFxrK7rurUw9fyOD3Q/+GvVxbzZ576sMDzKEbCWW77XTCMVmYNg1WTI1vffnQQeWsmP4NH3zVgdKyDEYOLaVzh63q2CU3WVn6JU6eXD/tkpOjugnJxnnnwVtv6dLf2kg9N1fLpBK46GerLFmiJ2NZGRx4IBQWtmjG3xy60Wap11UoziqJmZlwyN5ppOt9xhmqivbww7BmjUbml16qambJRv/+8Oijmu+bPVvLpc46C4491lu7ann5ZVWZ8/v1LuLll+GAA+B//7fZTt3q0I02ia36NJKCjRs1mAiftM3LU2GhAw5o8Jat1aFbhG60KRKRYjFixPr1Wj/unJZJpWOP0c8/j1zqWF4Ob74Z0aFvDXPoRpth/nx+7SpkjSiSnNdeg1tuqXN2t90GEyboSsx0Iiur8QnmFqxmNYdutAlqUywXFM42Z57srFql+ePwJfS33QZ77x29olsqsO++kUsqc3JadPGye04jLSgtVTXGRYvqb58/v36+3PTLU4B33ons5JzTapV0IjcX7rpLc+b5+fo8OxvOPhv22KPZh7MI3Uh5Hn9cK+gyM7VIYJtt4L77tEfCzInWiCLlqKqKvKw4EEg+nYhYMHy4NsL+8EMtW9x//xbfhZhDN1KaTz6Bhx7SIoHaQoHFi+HMk8o5YZc5jBhQYs481Rg5EqZMaei8MzP1tXSkXTsYNarVh7GUi5HSPPlkQ0mRQAA2lGbzl2vyOGPCtt4YZrSc7bfX5fK1migidQuBdtjBa+uSmqgidBEZBUxEBSmKnHO3hb0+BrgZCAJ+4HLn3EcxttUwGtCYKml+PqzdmMlAYiyRaiSGP/5RpXlnzNDc+RFHxK41VRrTpEMXER/wAHA4UAIUi8hU51xoa963ganOOSciewDPAIPiYbBhhDJypKZYwgsigkEYMrAs7uP/sj6TJ6Z1ZeWaLA4ctplR+22KWFZstIBdd01ObZgkJpoIfTiwyDm3GEBEngLGAL86dOdcacj+7QBvlp8abY5TT9W0S6A6QMD5EHHk5QS55y/LyMuN72n40ex2HHnJQAJBobwyg0nP92DIwDLenvQ9Odn2EzASTzQOvR+wLOR5CbBP+E4ichxwK9AT+F2kA4nIWGAsQO/elttMdfx+bZf4zDPahWzIEO2Pu1PL+0E0m6evLObEnXwMHNGT1z7qTN8eVVx2ympG7LklruMGg3DS1TtQWl4XjpeW+fhyQT6TnuvB5aetjuv4hhGJaBx6JHWYBuGHc+5F4EURGYnm0w+LsM8UYAqolkvzTDWSjZtv1rLg2uqSWbNU2O6pp1QSOt4UjSumb8fSmkYUq5hw7qr4D1rDvMW5bN7SMLdSXunjsde6mkNPdn78UZs59+ypi5XSJE8WjUMvAbYJed4fWNHYzs65D0RkRxHp7pxLUQV/oynWrFGpifDcdVWVavuPHx+/sYuKgFm6WCgWXYVags8HwUZCkkgt54wkIRCAa6+ta3Irog2up0xJTBQSZ6IpWywGBorI9iKSDZwCTA3dQUR2ElFBAhEZCmQDa2NtrJE8LFkSWWrC74d58xpujxVF4xfArGImXbbQU3GtQdtV0Lubn/Cb1fzcAOePsVM/aoLBho0n4smLL8IHH+htZXm5LuRZvRquuipxNsSRJn8Rzjk/cDEwA5gPPOOcmysi40RkXM1uvwfmiMhstCLmZOeVLq+REPr3bxidg0au8ZLELhpXDJs2qyP3uPpBBF686we6dgzQIT9ATlaQ/NwAR+y3ifPH2I1pk5SWaqQ8YoQ2UL7wQk2DxJtnn224cCEYhB9+UMee4kRVh+6cmwZMC9s2OeTv24HbY2uakcz07q3KnjNn1pdyzsrS3gexJFklb/cYWE7JtG946b3OrFqXxQF7llJYEP9SyZTHOa0z//577UUI2njivPM0gu7cOX5jh+uO15KRETlCSTGS59dhpBx//zscd5wKw4nALrvApEkwYEDsxvhV8tbjFEtj5OU6Th21nstPW23OPFrmztVovNaZgzr5qip46aX4jn344ZFzhZ06Qb9+8R07AZiWi9FisrO1TPGvf9U0aGaMz6Z6kre7tlyPJRiEdZt8dGwXJDvLMoGes2RJ5O2VlRq1x5Ozz1Y1x9WrNYeena15wptvblEPz2TDHLrRakRi68wbplha7sz/83oX/nLPNmzc7MPnc1x0/C/ccenymF98jGaw006R5XFzc+M/N9K+va5Ee/NNrbPt2xfGjIFeveI7boKw09pIKmpTLLGQvJ3xSUfG3jKAsoqaGuNqeOiFHlT7M/jn+GVbf7MRPwYNgsGDtQ68Nm+dkaEOffTo+I+fkwNHH62PNCP5kpJGm6VoXHFM9ctv+lefOmdeQ1mFj4df7s6Wcjv1PWXiRDj+eI2Ys7O1Z+hjj2lNuNFiLEI3koKi8QuA1qdYQlm8PHJPxgxxrNmQSbu81K9qSFlyc3UC5oorvLYkrbAwxfCMsjJ491245uRFVK3fEvMqlsKCMkQa5mp9PujTvTrCOwyjFTgHX32l3YeWeZPSswjd8IQPPlB5AAn68WUMICMzgyPfXsIJh26I2Rg3j1vBO8UdKKvIoFaSKD83wI0XrbBqFyO2/PILXHSRamKAln0dcgjccENCdWIsQjcSzrp1MP5Kh98P1cFMKvxZlFX4OOu67Vm+Oitm4+y5Szkf/Os7Dhu+mc4d/BRsX87D1y414Swj9kyYAMuX621nWZmWYL77Ljz/fELNsAjdSDg3XbAEF9wGbYBVR9DBM2924c+nx87hDtu1jDcfjHNts9G2WbdOF0uFa9JUVKjUwEknJcwUi9CNhFI0rpj+HUvJ8DVcxFHtF0qt+sRINSortewyEuG6MXHGfj1GQii6dfWvKz//dq2Q6WuYw87NDnLUiE2JNs0wWkfv3tClS8PtWVmaR08g5tCNuFNUBCxdyqTJGUyanMHgHSsYe/wa2uUGUPlZR7u8AGccuY5hu5oeihFCVVXjglrJggjceKOWYtYuQc7NhR494NxzE2qK5dCNuFIblU+6bCFQt6z7nr+UMObADTz+WjeCDs44ch2HDt/skZVG0vHzz3DTTfDFF/p86FC47jro08dbuxpj2DDNlz//PJSUQGEh/O53kJeXUDPEK9nygoJC9/jjszwZ24g/oV2FklElsTlUVAovvNuZpStzGLbrFg4bvrnRlKkRA6qqVF9l7VpVVgPNUXfpAlOn6tL9NowUFn7hnCuM9JpF6EbMmTaNX7sKed2IorUsWpbDiPN3oawig/LKDPJyggwaUMF7U76jXV7Qa/PSk3ff1a7jwZDPNxhUdcR334VRo7yzLcmxOMOIKUXjilW/fPT0lHfmAGdeux1r1mdSWuYjEBBKy3zM+SGPvz/c22vT0peSEnXe4ZSXe7YCM1Uwh27EjF/z5ZMz4KijPLam9azf5OPLhfkEXf0Sy4qqDB5/rZtHVrUBBg6MnHvOy4tff8M0ISqHLiKjRGShiCwSkasjvH66iHxT8/hYRIbE3lQjWZk/X515346lKZ8vD8VpAU7k1xJqSRtjxAgtBcwKWTWclQU9e2rfQ6NRmsyhi4gPbfx8OFACFIvIVOdcaG/3H4EDnXPrReRIYAqwTzwMNpKLX6Py0dPTIioPpWunAEN2LmfW/HxcSJSekx3k9FHrPLQszfH54OGH4f774Y03dNvhh8PFF8e+LVaa0WSVi4jsB9zgnDui5vkEAOfcrY3s3wWY45zbaoM+q3JJfYrGL4BNm9MqKg9n4ZIcDrhgFyoqMygtz6BDfpAd+lXyYdFCOrSzSdFGWbMGNm7UBrPmhGNKa6tc+gGhMxElbD36Ph94PaIhImOBsQC9e28bxdBGMjJ/PsycmB4liU2xy3aVLHllDs++1YUlK7IpLCjjyP03JlJAL7XYtAn+53+0fjwzU8sNr7giLbsDJSPROPRInVMjhvUicjDq0CMmupxzU9B0DAUFhZaGTEFqnXmsugqlAu3ygpxzzFqvzUgNxo+H2bPB769rL3fbbdCvH+y1l6emRaSiQvXLv/wStt0Wjj0Wunf32qoWE41DLwG2CXneH1gRvpOI7AEUAUc65+zsT0NqUywjBpS0GWduNIOVK+Gbb9SZh1JRoe3lks2hb9gAZ50F69drSWR2ttr54IOw225eW9cionHoxcBAEdkeWA6cApwWuoOIbAu8AJzpnPsu5lYanlOvJBFLlxkRWLtWq1GqIrT2W7Uq8fY0xZQpsHp13QWoqkof112nS/glUnIiuWkyAeqc8wMXAzOA+cAzzrm5IjJORMbV7HYd0A14UERmi4jNdqYRReOKGTGgJO3z5UYr2WGHhtE5qJMfPjzx9jTFu+9Gtvfnn/XilIJENf3snJsGTAvbNjnk7wuAC2JrmuE1RbeuhqVL6duxlDMmWFRuNEF+PowdC//6V50OeGYmtGsHZ5zhrW2RyI7cRBzn6tfApxBWT2REpH6KpaO3xhipw9lna6ni449rlLvffnDeeck50Xj88fUvPqA18LvvDp06tf74VVXajq5Tp4Slb8yhGw2o78yN5uIcfD43n3UbM9lvjy107hBo+k3pxEEH6SPZOf10ncT99FMtrxSBrl3hlltad9yqKrjrLnj1VT0ZOneGq65KyGdiDt34ldAUy7V3WFTeEhYty+G3fxrILxsy8WU4Kqsz+Pu45fz1TGtMnXRkZsLdd8OiRTBvnmqtDxvWeDu5aLn5ZnjnnbrJ4V9+gb/9TVe+7rlnq83eGubQDSCkq1AaSN56hXMw6pKdWLIyu55UwHUP9aWwoIwDh5V6aJ3RKDvtpI9YsGEDvP12w0qfigr4979h4sTYjNMIdk9taIolTfTLveTLBfmsWptVz5kDlFVkcP8zPTyyykgov/zS+IRqAqR/LUJv49TPl5szbw3rN/nIiND8GoQ1G1KzaiLp2bABiou1h+c++zReuZIo+vWLXAqZkaGTrXHGHHobZdo0WDHVJj9jyT67baG6umE1Q35ugN8fst4Di9Kcp56C++7TXLiIPiZOhCEeqnfn52ulz2OP1VXPiOgF57zz4j68/ZLbIKFdhdLRmZesyuKSO7Zh8IkFjLp4J94p7pCQcTu0C3L3n0vIzw0gopF6fm6AHfpVct6YNQmxoc2wYIFOMtaWBm7ZAqWlcNllkVeqJpILL1RNm223hQ4dVN/9kUe0nDPOWITexqifYkkv/XKAZT9nsedpBWwuy6Dan8G8H/P4cHZ7/nnlMs4bE//Vf384YQ177VLOA8/0YNW6TI49aAPnHLOW/FzToospL78c2XE7p2WII0cm3qZaRGD0aH0kGHPobYS2Inl7yyN92LQlA3+g7v9YVuHjL/f054yj1pGdFX/Huu/uW9h39y1xH6dNE95EuhbnNGJvo6TvL9uox8yJ6ZtiCeWtzzvUc+a1BILComU5HlhkxIVDDoncd9TvT07dmARhEXqaU5tiGTGgJO1axEWid7dqfijJbbC92i/06BKh+sBITX7zGxg6VHXMy8u1iiQ7G/7wB13t2UYxh56mNEyxtA1xravOXsUp1+RTVlHXUignK8hhwzeZQ08nfD74xz/gww/hrbdUAGzMGCgo8NoyTzGHnqbMnKiSt21NJfGYkRu55Y8r+NukvvgyoKpaOLhwM0/+/UevTTNijc+XOroxCcIcepoR2lWorTnzWi4/bTVjj/+FhUty6dXNT98e1V6bZKQKa9bA00/Dt9+qvvupp8I22zT9viTBHHoaYV2F6sjPdew1qNxrM4xUYtkybUlXWaklkV99BVOnwgMPeLtYqRmkd8lDG8Ikbw2jldx7ry5Oqq1vDwR0tWdr5XQTiP36U5z589WZ9+1Yas7cMFpDcbHWsYezdGnK1LaLi/QfSMTAIpuBhZ4M3ny6A6mydttsjT2pYieYrfEimWwd4JyLKN/pZQ59oXOu0MPxo0ZEZpmtsSdVbE0VO8FsjRepYqvdoxuGYaQJ5tANwzDSBC8d+hQPx24uZmt8SBVbU8VOMFvjRUrY6tmkqGEYhhFbLOViGIaRJphDNwzDSBPi7tBFZJSILBSRRSJydYTXRUTuq3n9GxEZGm+bGiMKWweJyCciUikiV3hhY40dTdl5es1n+Y2IfCwinq1bjsLWMTV2zhaRWSJygBd21tiyVVtD9ttbRAIickIi7QuzoanP9SAR2Vjzuc4WkeuS0c6afQ6qsXGuiLyfaBtD7GjqM70y5POcU3MOJJdWr3Mubg/AB/wA7ABkA18DBWH7HAW8DgiwL/BZPG1qpa09gb2BW4ArktjO/YEuNX8fmeSfaXvq5nL2ABYkq60h+70DTANOSFZbgYOAV72wr5l2dgbmAdvWPO+ZrLaG7X8M8I6Xn2+kR7wj9OHAIufcYudcFfAUMCZsnzHAY075FOgsIn3ibFckmrTVObfaOVcMeCnfF42dHzvnatvMfwr0T7CNtURja6mr+YUA7QCvZumjOVcBLgGeB1Yn0rgworXVa6Kx8zTgBefcT6C/sQTbWEtzP9NTgf8mxLJmEG+H3g9YFvK8pGZbc/dJBMliR1M0187z0TsgL4jKVhE5TkQWAK8B5yXItnCatFVE+gHHAZMTaFckoj0H9hORr0XkdREZnBjT6hGNnTsDXUTkPRH5QkTOSph19Yn6dyUi+cAo9MKeVMR76b9E2BYegUWzTyJIFjuaImo7ReRg1KF7lZeOylbn3IvAiyIyErgZOCzehkUgGlvvBa5yzgVEIu2eMKKx9UtU86NURI4CXgIGxtuwMKKxMxMYBhwK5AGfiMinzrnv4m1cGM35/R8DzHTOrYujPS0i3g69BAhVh+8PrGjBPokgWexoiqjsFJE9gCLgSOfc2gTZFk6zPlPn3AcisqOIdHfOJVoIKRpbC4Gnapx5d+AoEfE7515KiIV1NGmrc25TyN/TRORBDz7XaH//a5xzW4AtIvIBMARItENvzrl6CkmYbgHiPimaCSwGtqduomFw2D6/o/6k6OdeTCZEY2vIvjfg3aRoNJ/ptsAiYH8vbGymrTtRNyk6FFhe+zzZbA3b/1G8mxSN5nPtHfK5Dgd+SvTnGqWduwJv1+ybD8wBdkvGz7Rmv07AOqCdF999U4+4RujOOb+IXAzMQGeRH3HOzRWRcTWvT0arBY5CHVAZcG48bWqNrSLSG5gFdASCInI5OhO+qbHjemEncB3QDXiwJpr0Ow+U4qK09ffAWSJSDZQDJ7uaX04S2poURGnrCcAfRMSPfq6nJPpzjcZO59x8EZkOfAMEgSLn3JxE2hmtrTW7Hge84fSOIumwpf+GYRhpgq0UNQzDSBPMoRuGYaQJ5tANwzDSBHPohmEYaYI5dMMwjDTBHLphGEaaYA7dMAwjTfh/qOC9tvGud/8AAAAASUVORK5CYII=\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from sklearn.linear_model import LinearRegression\n", "\n", "reg = LinearRegression()\n", "reg.fit(data_outlier, target_outlier)\n", "\n", "x1min = np.min(data_outlier[:,0])\n", "x1max = np.max(data_outlier[:,0])\n", "x2min = np.min(data_outlier[:,1])\n", "x2max = np.max(data_outlier[:,1])\n", "\n", "x1 = np.linspace(0, x1max, 500)\n", "x2 = np.linspace(x2min, x2max, 500)\n", "\n", "xx1, xx2 = np.meshgrid(x1, x2)\n", "\n", "data_prediction = np.vstack((xx1.flatten(), xx2.flatten())).T\n", "\n", "prediction_LS = reg.predict(data_prediction)>1/2\n", "\n", "plt.contourf(xx1, xx2, prediction_LS.reshape(np.shape(xx1)), alpha=.2, cmap=cm_bright)\n", "plt.scatter(data_outlier[1:,0], data_outlier[1:,1], c=target_outlier[1:],cmap=cm_bright)\n", "plt.show()\n", "\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The logistic regression classifier, thanks to the activation function (which chops off the extreme values to a bounded output in [0,1]) maintains the classifier at the right location" ] }, { "cell_type": "code", "execution_count": 270, "metadata": {}, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "/Users/augustincosse/opt/anaconda3/lib/python3.8/site-packages/sklearn/utils/validation.py:72: 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 f(**kwargs)\n" ] }, { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": { "needs_background": "light" }, "output_type": "display_data" } ], "source": [ "from sklearn.linear_model import LogisticRegression\n", "\n", "reg = LogisticRegression()\n", "reg.fit(data_outlier, target_outlier)\n", "\n", "x1min = np.min(data_outlier[:,0])\n", "x1max = np.max(data_outlier[:,0])\n", "x2min = np.min(data_outlier[:,1])\n", "x2max = np.max(data_outlier[:,1])\n", "\n", "x1 = np.linspace(0, x1max, 500)\n", "x2 = np.linspace(x2min, x2max, 500)\n", "\n", "xx1, xx2 = np.meshgrid(x1, x2)\n", "\n", "data_prediction = np.vstack((xx1.flatten(), xx2.flatten())).T\n", "\n", "prediction_LS = reg.predict(data_prediction)>1/2\n", "\n", "plt.contourf(xx1, xx2, prediction_LS.reshape(np.shape(xx1)), alpha=.2, cmap=cm_bright)\n", "plt.scatter(data_outlier[1:,0], data_outlier[1:,1], c=target_outlier[1:], cmap=cm_bright)\n", "#plt.ylim([])\n", "\n", "plt.show()\n", "\n" ] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.5" } }, "nbformat": 4, "nbformat_minor": 4 }