{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "## Programming Exercises Week 3" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This week, we will review linear regression and start using linear classification models. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1. Least squares classification" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__Question 1.__ Scikit learn has a number of built-in functions that enable you to generate datasets for classification. Among those functions, you can find the 'make_classification' and 'make_blobs' functions. The last one gives you the possibility to set up the position of each cluster as well as their standard deviation. Consider the dataset given below, which was generated by . Using what we have done in regression, how could we learn a classification model for this dataset? (recall that a classification model is nothing else than a function $f(\\boldsymbol x)\\; :\\; \\boldsymbol x \\rightarrow C_k$ mapping a prototype $\\boldsymbol x$ into one of the classes $C_k$)\n" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nrkJggg==\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "from sklearn.datasets import make_classification\n", "from sklearn.datasets import make_blobs\n", "\n", "X1, Y1 = make_blobs(n_samples=200, n_features=2, centers=2, cluster_std=.8)\n", "plt.scatter(X1[:, 0], X1[:, 1], marker='o', c=Y1,\n", " s=25, edgecolor='k')\n", "\n", "\n", "plt.show()" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# put your code here\n", "\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2. From binary classifiers to the multi-class problem." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__Question 2. What is the simplest extension from the binary problem to the multi-class problem? \"One vs One\" and \"One vs the rest\"__ \n", "\n", "The price of the one-vs-the rest and the one-vs-one classifiers. Two relatively straighforward extensions of the binary classifier to the multiclass problem are the so-called one vs one and one vs rest classifiers. In the former, one learn K(K-1)/2 classifiers (why?) between each pair of clusters. A new prototype is then classified according to a majority vote. \n", "\n", "In the latter, we learn $K-1$ classifiers separating $+1$ prototypes (inside cluster $C_k$) from $-1$ prototypes (outside cluster $C_k$). A new prototype is the classified in the cluster that gives him a non negative label (what happens if two cluster both give a non negative label to the prototype?)\n", "\n", "Using the dataset below, learn both one-vs-one and one-vs-rest classifiers and represent their boundaries using meshgrid. \n", "\n", "- First code the classifiers from scratch. \n", "- Then use the corresponding functions from scikit-learn" ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "scrolled": true }, "outputs": [ { "data": { "image/png": "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\n+/clDVi/fn1ZNVdRFCtQib2crV27ltVbt1DtrTdwGvYSXq+N45333+PChQu3ld25cycmZydc2rVB\naLXoAmqj69CW+QsX3lJuy5YtOLZ51LKLunOLR7gUF3dbN8uVxETMHm6W10IINJ6eXL16tQxaqiiK\ntajEXs42bN6MptnDaOWclj4AACAASURBVHQ6AGw9PXFq3Jjt27ffVlaj0cBfpwWYzdjY2Nzylp+/\nP8abknP+jTS0Nja4uLjcUq53r16YjkRhysoCIC85hazoE3Tr1q00mqYoSgVR0glKyj0KqlMHzbEo\ny2tpNpOflHTH9XM6duyIzmAkc/tOnB5tjeFKAobdexm1evUt5aZOnszAF17AdP0Gwt6evF/38saE\nCegKPzz+p1OnTkQOHsLn06bj6OODPimZmdOnExQUVDaNVRTFKoQ1JoqGhobKQ4cOlft5K4Jr164R\n0rQppgb10NSpjelYNAE2thzct++2O3EoeMg6LDKS3379lRq1/Pn3lA95ZuDA28r99ttvzJozh6zs\nbAYPGkS/fv0sXTN/lZyczLlz5wgJCcHNze2OZRRFqXiEEIellKFFllOJvfwlJiYyY+ZMok5E07Vj\nOGNGj8bZ2dny8wMHDjBy7FhOHD1KvYYNmfPZZ3Tq1MmKESuKUhGoxF5JpaSkUDe4AfZPPI5jkxD0\nZ86Ss3I1x44cITAw0NrhKYpiRcVN7OrhaQWzcuVKdMENcA5tjkanw+nhh9A1fZjly5dbOzRFUSoJ\n9fC0gpFS3t43LoqeeVpa9Ho9K1as4ExMDB3at6d79+4Fo3MURak01L/YCqZv377oT50hO+oo0mQi\n5+QpcqOO8eyzz5b5uTMzM3mkZUte/3QGc/84zLMjRzLopZfK/LyKopQuldgrGB8fHzauW4fnoSgu\nvjYR3badLPjPf6hbt26Zn3vhwoUkaW1wGfoiHj274T4uknWbNt1xeQJFUSouldgrIB8fHzqHd8Sn\nVi2SkpIYPHw4nbp358aNG2V63v+uXo1Ng3qWriCNnR3aWv4cP368TM+rKErpUom9jGVkZFgSspSS\nuLg4zp49S6+nnsJWp8O7Rg1mfPqpZV2Xffv20bxVK7768Uf0gbWp8cG7+E5+h6M52US+/HKZxnr6\n5Emyjx5HFvbnm/V6Mk6d5pFHHinT8yqKUrrUcMcykpOTwwtDhrB+3VqkhCYPNyE55RrX026gz8zC\n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\na+h2aJq2AAAAAElFTkSuQmCC\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "from sklearn.datasets import make_classification\n", "from sklearn.datasets import make_blobs\n", "\n", "X1, Y1 = make_blobs(n_samples=200, n_features=2, centers=3, cluster_std=.6)\n", "plt.scatter(X1[:, 0], X1[:, 1], marker='o', c=Y1,\n", " s=25, edgecolor='k')\n", "\n", "\n", "plt.show()\n", "\n", "\n", "# put your code here\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__Question 3. Learning multiple discriminants simultaneously__ As you may have seen while coding the one-vs-one and one-vs-rest classifiers, a number of issues may arise when considering such extensions. In particular, when considering discriminant functions (+1/-1 choice) without taking into account the magnitude of the predictions, it might be unclear how to classify a protoype that falls in multiple clusters. For this reason, a more general alternative is often preferred. One approach is to learn the $K$ classifiers at once. That is to say, we learn a model of the form\n", "\n", "\\begin{align}\n", "y_k(\\boldsymbol x) = \\boldsymbol w_k^T\\boldsymbol x + w_{k,0}\n", "\\end{align}\n", "\n", "We then classify a new prototype in the cluster which gives $y_k(\\boldsymbol x) > y_j(\\boldsymbol x)$ for all $j$. One can show that such classifier lifts the ambiguities that were inherent to the one-vs-one and one-vs-rest classifiers. To learn such a classifier, we proceed as in the linear regression model, by introducing $\\tilde{\\boldsymbol x} = [1, \\boldsymbol x]$ and writing the system in matrix form as\n", "\n", "\\begin{align}\n", "\\boldsymbol y(\\boldsymbol x) = \\boldsymbol W^T \\tilde{\\boldsymbol x} \n", "\\end{align}\n", "\n", "Here $\\boldsymbol W$ is the matrix whose $k^{th}$ column contains the vector of weights $\\tilde{\\boldsymbol w} = [w_{k,0}, \\boldsymbol w_k]$\n", "\n", "\n", "The solution can then be obtained by minimizing the sum of squares error function as in regression. Here we will code each prototype through a target vector in which all the entries are set to $0$ except the one corresponding to the class of the prototype. The solution is given by \n", "\n", "\\begin{align}\n", "\\boldsymbol W = \\tilde{\\boldsymbol X}^\\dagger \\boldsymbol T\n", "\\end{align}\n", "\n", "Here $\\tilde{\\boldsymbol X}^\\dagger$ is the pseudo inverse of the matrix $\\tilde{\\boldsymbol X}$ encoding the prototypes $\\tilde{\\boldsymbol x} = [1, {\\boldsymbol x}]$, $\\boldsymbol T$ is the matrix whose rows are encoding the target vectors $\\boldsymbol t_n^T$\n", "\n", "\n", "Apply this idea to the three classes dataset above. Then use the function 'Multioutput regression' from scikit learn to verify your results. Plot the classifier using meshgrid. \n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "\n", "from sklearn.datasets import make_classification\n", "from sklearn.datasets import make_blobs\n", "\n", "X1, Y1 = make_blobs(n_samples=200, n_features=2, centers=3, cluster_std=.6)\n", "plt.scatter(X1[:, 0], X1[:, 1], marker='o', c=Y1,\n", " s=25, edgecolor='k')\n", "\n", "\n", "plt.show()\n", "\n", "\n", "# put your code here" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3. Towards logistic regression. " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__Question 4.__ One can show that the multiclass regression classifier ensures that the labels sum to one. I.e. for a new prototype $y(\\boldsymbol x)$, provided that the targets are encoded through a one hot encoding, we have $\\sum_k y_k(\\boldsymbol x) = 1$. The vector $y_k(\\boldsymbol x) $ may however have values larger than $1$. \n", "\n", "Ideally we would like to the ouput of the classifier to return a probability indicating how likely a prorotype is to lie in one cluster or another. To achieve this idea, a popular/tractable approach is to keep the linear model and use a sigmoid function to map the output of the linear model onto the $[0,1]$ interval. \n", "\n", "- Start by plotting the sigmoid function with pyplot. \n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "\n", "# put your code here" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- In logistic regression, we model the posterior probability $p(\\mathcal{C}_k|\\boldsymbol x, \\boldsymbol w)$ from the logistic function. For a binary classifier, we thus write \n", "\n", "\\begin{align}\n", "p(\\mathcal{C}_0|\\boldsymbol x, \\boldsymbol w) = \\text{sigmoid}(w_0 + w_1x_i)\n", "\\end{align}\n", "\n", "for the first class and \n", "\n", "\\begin{align}\n", "p(\\mathcal{C}_1|\\boldsymbol x, \\boldsymbol w) = 1 - p(\\mathcal{C}_0|\\boldsymbol x, \\boldsymbol w) \n", "\\end{align}\n", "\n", "\n", "for the second (in order for the posterior class probabilities to sum up to one)\n", "\n", "- Start by learning a simple logistic regression classifier using scikit-learn for the 1D dataset show below and plot the classifier on top of the data. Proceed as follows:\n", "\n", " - Generate two 1D gaussian clusters sufficiently separated with distinct mean and std that make them sufficiently separable\n", " \n", " - Then use the logistic regression model from scikit-learn. \n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from sklearn.linear_model import LogisticRegression\n", "\n", "# put the code here\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "- As a second exercise, learn the logistic regression classifier to the 2D dataset below" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import matplotlib.pyplot as plt\n", "\n", "from sklearn.datasets import make_classification\n", "from sklearn.datasets import make_blobs\n", "\n", "X1, Y1 = make_blobs(n_samples=200, n_features=2, centers=2, cluster_std=.8)\n", "plt.scatter(X1[:, 0], X1[:, 1], marker='o', c=Y1,\n", " s=25, edgecolor='k')\n", "\n", "\n", "plt.show()\n", "\n", "\n", "# put the code here\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__Question 5. Multiclass logistic regression__ The extension of the binary logistic regression model to the multiclass problem simply introduces linear models for the posterior probabilities (for the ratios of those proabilities to be fully honest) and hence, gives a model of the form\n", "\n", "\\begin{align}\n", "p(\\mathcal{C}_k|\\boldsymbol x, \\boldsymbol w) = \\frac{\\exp(w_{k,0} + \\boldsymbol w^T\\boldsymbol x)}{1+ \\sum_{\\ell=1}^{K-1} \\exp(w_{\\ell,0} + \\boldsymbol w^T_\\ell \\boldsymbol x)}, k=1,\\ldots, K_1\n", "\\end{align}\n", "\n", "The last posterior probability is then set to ensure $\\sum_{k} p(\\mathcal{C}_k|\\boldsymbol x, \\boldsymbol w) = 1$, \n", "\n", "\\begin{align}\n", "p(\\mathcal{C}_K|\\boldsymbol x, \\boldsymbol w) = \\frac{1}{1+ \\sum_{\\ell=1}^{K-1} \\exp(w_{\\ell,0} + \\boldsymbol w^T_\\ell \\boldsymbol x)}.\n", "\\end{align}\n", "\n", "Using the multiclass regression model from scikit-learn, learn a classifer for the 10 classes dataset below. Then plot the class boundaries uwing meshgrid and the function 'predict'. \n", "\n", "\n", "The logistic regression classifier is part of a general family of classifiers known as generalized linear classifiers because of the non linear activation function that appears in front of the linear model." ] }, { "cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "\n", "import matplotlib.pyplot as plt\n", "\n", "from sklearn.datasets import make_classification\n", "from sklearn.datasets import make_blobs\n", "\n", "X1, Y1 = make_blobs(n_samples=200, n_features=2, centers=10, cluster_std=.6)\n", "plt.scatter(X1[:, 0], X1[:, 1], marker='o', c=Y1,\n", " s=25, edgecolor='k')\n", "\n", "\n", "plt.show()\n", "\n", "\n", "# put your code here\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__Question 6. digit classification__ To conclude, we will see how a simple classifier can already hep us in automating digit recognition. To get started, we will use a lower resolution smaller sample of the usual digit recognition dataset. \n", "\n", "- The data is stored in the file 'ex3data1.mat'. Load it with the lines below. Display the size of the data using data['X'].shape, data['y'].shape. What does each component represent?\n", "\n", "- Using the train_test_split function from scikit, split the images into a training set (lets say about $70\\%$ of the images and keep the remaining $30\\%$ for later validation). The proceed as follows\n", "\n", "- If it is not already done, you must use a one-hot encoding procedure to store the value of the digit represented in each image. \n", "\n", "- Once you have the matrix representing the one-hot encodings, use the multiclass logistic regression model from scikit learn on your training set.\n", "\n", "- Finally evaluate teh quality of your model using the remaining part of the data.\n" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import numpy as np\n", "import pandas as pd\n", "import matplotlib.pyplot as plt\n", "from scipy.io import loadmat\n", "%matplotlib inline\n", "\n", "data = loadmat('ex3data1.mat')\n", "\n", "\n", "# put your code here" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__Question 7. digit classification II__ Now we will use the full resolution images from the MNIST dataset. Again, although the dataset is not stored in scikit-learn, you can in principle load it through the function 'fetch_mldata' of scikit. If you run into trouble with 'fetch_mldata', download the dataset directly in csv format on Kaggle https://www.kaggle.com/oddrationale/mnist-in-csv#mnist_train.csv\n", "or as compressed file at 'http://yann.lecun.com/exdb/mnist/'.\n", "\n", "Put the test set on the side for now. select a reasonable subset of the training images and fit scikit logistic regression classifier to that subset. Then try your model on a distinct subset of images and compute the error rate: [Number of correctly recognized digits]/total number of test images.\n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "# put your code here\n", "\n", "\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 4. Fischer's discriminant " ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "One way to view the classification problem is as a projection onto a line. Indeed, consider the linear discriminant $y = \\boldsymbol w^T \\boldsymbol x$. The quantity $\\boldsymbol w^T \\boldsymbol x$ can be seen as the projection of the vector $\\boldsymbol x$ onto the vector $\\boldsymbol w$. Finding an optimal discrimant (or separating place $\\boldsymbol w$) can thus be considered equivalent to finding a projection $\\boldsymbol w$ such that the distance between the projections $\\boldsymbol w^T \\boldsymbol x_i,\\quad i\\in A$ of all the prototypes from class $A$ and the projections $\\boldsymbol w^T \\boldsymbol x_i, \\quad i \\in B$ of all the prototypes in class $B$ is maximal. \n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__Question 9. Least squares classification as a projection__\n", "\n", " - To visualize this idea, consider the data given below. According to you, what would be a good choice for $\\boldsymbol w$? Find a good $\\boldsymbol w$ then project all the points on your $\\boldsymbol w$ and plot the results on the line (simply use scatter and set all the 'y' values to $0$). " ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "image/png": "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\n", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import matplotlib.pyplot as plt\n", "\n", "from sklearn.datasets import make_classification\n", "from sklearn.datasets import make_blobs\n", "\n", "X1, Y1 = make_blobs(n_samples=50, n_features=2, centers=2, cluster_std=.8)\n", "plt.scatter(X1[:, 0], X1[:, 1], marker='o', c=Y1,\n", " s=25, edgecolor='k')\n", "\n", "\n", "plt.show()\n", "\n", "\n", "# put the projection step below\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "collapsed": true }, "source": [ "- We will now use a more formal approach at defining the discriminant. To make the separation easier, the idea of the Fischer criterion is to \n", "\n", " 1. Find a projection that maximizes the separation the means of the projected classes.\n", " 2. Maximizing the separation of the projected means is often not enough as it may lead to overlapping datasets (see the figure below which is taken from [Bishop's Pattern Recognition and ML](http://users.isr.ist.utl.pt/~wurmd/Livros/school/Bishop%20-%20Pattern%20Recognition%20And%20Machine%20Learning%20-%20Springer%20%202006.pdf)). To avoid this phenomenon as much as possible, the Fischer criterion therefore also minimizes the variance of the projected classes. \n", " \n", "One possible way to achieve this simultaneous optimization is to maximize the ratio of the distance between means to the sum of the variances. I.e. if we let \n", "\n", "\\begin{align}\n", "\\mu_1 &= \\frac{1}{N_1}\\sum_{n\\in \\mathcal{C}_1} \\boldsymbol x_n, \\quad \\mu_2 = \\frac{1}{N_2}\\sum_{n\\in \\mathcal{C}_2} \\boldsymbol x_n\n", "\\end{align}\n", "\n", "and their projection through $\\boldsymbol w$ as \n", "\n", "\\begin{align}\n", "m_1 &= \\boldsymbol w^T \\mu_1, \\quad m_2 &= \\boldsymbol w^T \\mu_2,\n", "\\end{align}\n", "\n", "and the projected variances as\n", "\n", "\\begin{align}\n", "\\sigma_{1,p}^2 = \\sum_{n\\in \\mathcal{C}_1} (\\boldsymbol w^T \\boldsymbol x_n - m_1)^2, \\quad \\sum_{n\\in \\mathcal{C}_2} (\\boldsymbol w^T \\boldsymbol x_n - m_2)^2\n", "\\end{align}\n", "\n", "The Fischer criterion maximizes\n", "\n", "\\begin{align}\n", "J(\\boldsymbol w) = \\frac{(m_1-m_2)^2}{\\sigma_{1,p}^2 + \\sigma_{2,p}^2}\n", "\\end{align}\n", "\n", "To find the optimal $\\boldsymbol w$, one can rewrite $J(\\boldsymbol w)$ as \n", "\n", "\\begin{align}\n", "J(\\boldsymbol w) = \\frac{\\boldsymbol w^T\\boldsymbol A\\boldsymbol w}{\\boldsymbol w^T \\boldsymbol B \\boldsymbol w}\n", "\\end{align}\n", "\n", "Where $\\boldsymbol A$ and $\\boldsymbol B$ are respectively defined as\n", "\n", "\\begin{align}\n", "\\boldsymbol A &= (\\mu_1 - \\mu_2)(\\mu_1 - \\mu_2)^T\\\\\n", "\\boldsymbol B & = (\\sum_{n\\in \\mathcal{C}_1} (\\boldsymbol x_n - \\mu_1)(\\boldsymbol x_n - \\mu_1) + \\sum_{n\\in \\mathcal{C}_2} (\\boldsymbol x_n - \\mu_2)(\\boldsymbol x_n - \\mu_2)^T)\n", "\\end{align}\n", "\n", "- Start by showing that the two expression for $J(\\boldsymbol w)$ are indeed equivalent. \n", "\n", "- To find the direction $\\boldsymbol w$ that maximizes $J(\\boldsymbol w)$, take the derivative of the second ratio with respect to $\\boldsymbol w$, set the numerator to $0$. Show that if you forget about the scalar multiplicative factor a solution for the direction $w$ si given by \n", "\n", "\\begin{align}\n", "\\boldsymbol w \\propto \\boldsymbol B^{-1}(\\mu_1 - \\mu_2)\n", "\\end{align}\n", "\n", "- Find the direction of the Fischer discriminant by coding the steps given above in numpy. \n", "\n", "- Plot the separating plane on the dataset and/or color the regions using meshgrid. \n", "\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "C. M. Bishop, Pattern Recognition and Machine Learning\n", "\n", "![From Pattern Recognition and Machine Learning](FischerDiscriminant1.png)" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import numpy as np\n", "\n", "\n", "import matplotlib.pyplot as plt\n", "\n", "from sklearn.datasets import make_classification\n", "from sklearn.datasets import make_blobs\n", "\n", "X1, Y1 = make_blobs(n_samples=50, n_features=2, centers=2, cluster_std=.8)\n", "plt.scatter(X1[:, 0], X1[:, 1], marker='o', c=Y1,\n", " s=25, edgecolor='k')\n", "\n", "\n", "plt.show()\n", "\n", "\n", "# compute the direction that maximizes the Fischer \n", "\n", "\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "__Question 11. Towards Linear Discriminant Analysis__ Using scikit's LinearDiscriminantAnalysis and in particular the coeff_ and intercept_ attributes, project the data below onto a line and determine the optimal separation threshold for classification. Assume +1/-1 labels. \n" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import numpy as np\n", "from sklearn.discriminant_analysis import LinearDiscriminantAnalysis\n", "\n", "\n", "import matplotlib.pyplot as plt\n", "\n", "from sklearn.datasets import make_classification\n", "from sklearn.datasets import make_blobs\n", "\n", "X1, Y1 = make_blobs(n_samples=200, n_features=2, centers=2, cluster_std=.8)\n", "plt.scatter(X1[:, 0], X1[:, 1], marker='o', c=Y1,\n", " s=25, edgecolor='k')\n", "\n", "\n", "plt.show()" ] } ], "metadata": { "kernelspec": { "display_name": "Python 2", "language": "python", "name": "python2" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 2 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython2", "version": "2.7.13" } }, "nbformat": 4, "nbformat_minor": 2 }