{ "cells": [ { "cell_type": "code", "execution_count": 1, "metadata": { "collapsed": true }, "outputs": [], "source": [ "%matplotlib inline" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### In the following, please experiment with various parameters and try different datasets, by generating different (X,y) values (with different parameters)." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "collapsed": true }, "outputs": [], "source": [ "import numpy as np\n", "from sklearn import datasets\n", "\n", "from matplotlib import pylab as plt" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nB1cx+wSxfYnPAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# check the help for 'datasets.make_classification' function\n", "# NOTE: we let the labels to be 0/1: SKLEARN would use the required internal\n", "# representation.\n", "X, y = datasets.make_classification(1000, n_features=2, \n", " n_informative=2, n_redundant=0, \n", " n_clusters_per_class=1)\n", " \n", "plt.scatter(X[:,0], X[:,1], c=y, cmap=plt.cm.Paired) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 1. LDA\n", "In the following, the linear models will contain .coeff_ and .intercept_ attributes that you can check and use to plot the decision surface (plane).\n", "\n", "Go to http://scikit-learn.org/stable/modules/generated/sklearn.discriminant_analysis.LinearDiscriminantAnalysis.html for the details of the class." ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "from sklearn.discriminant_analysis import LinearDiscriminantAnalysis as LDA" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Train a model on the first 500 points:" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "LinearDiscriminantAnalysis(n_components=None, priors=None, shrinkage=None,\n", " solver='svd', store_covariance=False, tol=0.0001)" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model = LDA()\n", "model.fit(X[0:500,:], y[0:500])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Predict on some new data points (last 500 from X) and count the mismatched predictions:" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.035999999999999997" ] }, "execution_count": 9, "metadata": {}, "output_type": "execute_result" } ], "source": [ "yp = model.predict(X[500:1001,:])\n", "sum(yp != y[500:1001]) / 500.0 # note that we divide to a float, to avoid integer division!" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Transform the data into the maximum separating space:" ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "data": { "image/png": "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\nGLEAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "Xt = model.transform(X)\n", "_ = plt.hist([X[y==0,0], Xt[y==1,0]], bins=30, color=['blue','red']) # just put the result in a dummy varibale '_'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can also obtain estimates of the posterior probabilities:" ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAD8CAYAAAB5Pm/hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAADxdJREFUeJzt3X+s3Xddx/Hni3ZMFCKduzRNW2w19UdnHOK1LrIYYNF1\naOxMyFJUaMiSxjgNJiay8YfEmCXzH0OMTtMgoUalaWS4ShBTC4qGH+VWB1s76q6MsdZuvYCKYDLT\n7e0f56uebu3O9957zj09nz4fyc35fj/fz/d83+/745Vvv+ecb1NVSJLa9ZJpFyBJmiyDXpIaZ9BL\nUuMMeklqnEEvSY0z6CWpcQa9JDXOoJekxhn0ktS49dMuAOD666+vbdu2TbsMSZopJ06c+EpVzY2a\nd0UE/bZt21hYWJh2GZI0U5I80Weel24kqXEGvSQ1zqCXpMb1CvokX0rycJKHkix0Y9clOZrkse5x\nw9D8e5IsJjmd5NZJFS9JGm05Z/RvqKrXVNV8t343cKyqdgDHunWS7AT2AjcAu4H7k6wbY82SpGVY\nzaWbPcDBbvkgcPvQ+KGqeqaqHgcWgV2rOI4kaRX6Bn0Bf5PkRJL93djGqjrXLT8FbOyWNwNPDu17\nphu7SJL9SRaSLCwtLa2gdElSH33fR39zVZ1N8irgaJIvDG+sqkqyrP+TsKoOAAcA5ufn/f8MJWlC\nep3RV9XZ7vE88CEGl2KeTrIJoHs8300/C2wd2n1LNyZJmoKRQZ/k25K84n+XgZ8EHgGOAPu6afuA\nB7vlI8DeJNcm2Q7sAI6Pu/ARRV/8JUlXsT6XbjYCH8ogMNcDf1ZVH03yWeBwkjuBJ4A7AKrqZJLD\nwCngAnBXVT07keolSSONDPqq+iJw4yXGvwrccpl97gXuXXV1kqRV85OxktQ4g16SGmfQS1LjDHpJ\napxBL0mNM+glqXEGvSQ1zqCXpMYZ9JLUOINekhpn0EtS4wx6SWqcQS9JjTPoJalxBr0kNc6gl6TG\nGfSS1DiDXpIaZ9BLUuMMeklqnEEvSY0z6CWpcQa9JDXOoJekxhn0ktQ4g16SGmfQS1LjDHpJapxB\nL0mNM+glqXEGvSQ1zqCXpMb1Dvok65L8U5IPd+vXJTma5LHuccPQ3HuSLCY5neTWSRQuSepnOWf0\n7wAeHVq/GzhWVTuAY906SXYCe4EbgN3A/UnWjadcSdJy9Qr6JFuAnwLeOzS8BzjYLR8Ebh8aP1RV\nz1TV48AisGs85UqSlqvvGf17gF8Hnhsa21hV57rlp4CN3fJm4MmheWe6MUnSFIwM+iQ/DZyvqhOX\nm1NVBdRyDpxkf5KFJAtLS0vL2VWStAx9zuhfB/xMki8Bh4A3JvkT4OkkmwC6x/Pd/LPA1qH9t3Rj\nF6mqA1U1X1Xzc3Nzq2hBkvRiRgZ9Vd1TVVuqahuDF1k/VlW/ABwB9nXT9gEPdstHgL1Jrk2yHdgB\nHB975ZKkXtavYt/7gMNJ7gSeAO4AqKqTSQ4Dp4ALwF1V9eyqK5UkrUgGl9ena35+vhYWFsb3hMnF\n61dAj5I0bklOVNX8qHl+MlaSGmfQS1LjDHpJapxBL0mNM+glqXEGvSQ1zqCXpMYZ9JLUOINekhpn\n0EtS4wx6SWqcQS9JjTPoJalxBr0kNW4196OXJI1wJdw13TN6SWqcQS9JjTPoJalxBr0kNc6gl6TG\nGfSS1DiDXpIaZ9BLUuMMeklqnEEvSY0z6CWpcQa9JDXOoJekxhn0ktQ4g16SGmfQS1LjDHpJapxB\nL0mNGxn0Sb4lyfEkn0tyMslvduPXJTma5LHuccPQPvckWUxyOsmtk2xAkvTi+pzRPwO8sapuBF4D\n7E5yE3A3cKyqdgDHunWS7AT2AjcAu4H7k6ybRPGSpNFGBn0NfKNbvab7KmAPcLAbPwjc3i3vAQ5V\n1TNV9TiwCOwaa9WSpN56XaNPsi7JQ8B54GhVfQbYWFXnuilPARu75c3Ak0O7n+nGJElT0Cvoq+rZ\nqnoNsAXYleQHnre9GJzl95Zkf5KFJAtLS0vL2VWStAzLetdNVf078HEG196fTrIJoHs83007C2wd\n2m1LN/b85zpQVfNVNT83N7eS2iVJPfR5181ckld2yy8DfgL4AnAE2NdN2wc82C0fAfYmuTbJdmAH\ncHzchUuS+lnfY84m4GD3zpmXAIer6sNJPgUcTnIn8ARwB0BVnUxyGDgFXADuqqpnJ1O+JGmUDC6v\nT9f8/HwtLCyM7wmTi9evgB4lXZ0mGUdJTlTV/Kh5fjJWkhpn0EtS4wx6SWqcQS9JjTPoJalxBr0k\nNc6gl6TGGfSS1DiDXpIaZ9BLUuMMeklqnEEvSY0z6CWpcQa9JDXOoJekxhn0ktQ4g16SGmfQS1Lj\nDHpJapxBL0mNM+glqXEGvSQ1zqCXpMYZ9JLUOINekhpn0EtS4wx6SWqcQS9JjTPoJalxBr0kNc6g\nl6TGGfSS1DiDXpIaNzLok2xN8vEkp5KcTPKObvy6JEeTPNY9bhja554ki0lOJ7l1kg1Ikl5cnzP6\nC8CvVdVO4CbgriQ7gbuBY1W1AzjWrdNt2wvcAOwG7k+ybhLFS5JGGxn0VXWuqv6xW/5P4FFgM7AH\nONhNOwjc3i3vAQ5V1TNV9TiwCOwad+GSpH6WdY0+yTbgh4DPABur6ly36SlgY7e8GXhyaLcz3Zgk\naQp6B32SlwMfBH61qr4+vK2qCqjlHDjJ/iQLSRaWlpaWs6skaRl6BX2SaxiE/J9W1QPd8NNJNnXb\nNwHnu/GzwNah3bd0YxepqgNVNV9V83NzcyutX5I0Qp933QT4I+DRqvqdoU1HgH3d8j7gwaHxvUmu\nTbId2AEcH1/JkqTlWN9jzuuAtwIPJ3moG3sXcB9wOMmdwBPAHQBVdTLJYeAUg3fs3FVVz469cklS\nLyODvqr+AchlNt9ymX3uBe5dRV2SpDHxk7GS1DiDXpIaZ9BLUuMMeklqnEEvSY0z6CWpcQa9JDXO\noJekxhn0ktQ4g16SGmfQS1LjDHpJapxBL0mNM+glqXEGvSQ1zqCXpMYZ9JLUOINekhpn0EtS4wx6\nSWqcQS9JjTPoJalxBr0kNc6gl6TGGfSS1DiDXpIaZ9BLUuMMeklqnEEvSY0z6CWpcQa9JDXOoJek\nxhn0ktS4kUGf5H1Jzid5ZGjsuiRHkzzWPW4Y2nZPksUkp5PcOqnCJUn99Dmjfz+w+3ljdwPHqmoH\ncKxbJ8lOYC9wQ7fP/UnWja1aSdKyjQz6qvoE8LXnDe8BDnbLB4Hbh8YPVdUzVfU4sAjsGlOtkqQV\nWOk1+o1Vda5bfgrY2C1vBp4cmnemG5MkTcmqX4ytqgJqufsl2Z9kIcnC0tLSasuQJF3GSoP+6SSb\nALrH8934WWDr0Lwt3dgLVNWBqpqvqvm5ubkVliFJGmWlQX8E2Nct7wMeHBrfm+TaJNuBHcDx1ZUo\nSVqN9aMmJPkA8Hrg+iRngHcD9wGHk9wJPAHcAVBVJ5McBk4BF4C7qurZCdUuSephZNBX1Vsus+mW\ny8y/F7h3NUVJksbHT8ZKUuMMeklqnEEvSY0z6CWpcQa9JDXOoJekxhn0ktQ4g16SGmfQS1LjDHpJ\napxBL0mNM+glqXEGvSQ1zqCXpMYZ9JLUOINekhpn0EtS4wx6SWqcQS9JjTPoJalxBr0kNc6gl6TG\nGfSS1DiDXpIaZ9BLUuMMeklqnEEvSY0z6CWpceunXYAkXSmSi9erxjN32jyjl6TGGfSS1DiDXpIa\n5zV6Sc2bpevpkzCxM/oku5OcTrKY5O5JHWdwrIu/JK3eLPxdzUKNV4KJBH2SdcDvA7cBO4G3JNk5\niWNJmq5JhK0BPl6TOqPfBSxW1Rer6r+BQ8CeCR1ravr+Mk7zl/ZqPXYrlvM9vNJ/H59/XH8n1s6k\nrtFvBp4cWj8D/OiEjtXbC67TcekLd1fj9by+PV/qj3O135+VHnscP5dxH3uavWhGTOGHP7UXY5Ps\nB/Z3q99IcnoFT3M98JUXPPcLD3bpGvrO63nmMe55L+KSfY/z2MupcY2+Py/oeRJnhNP6WU+i5yus\nl+XMXXHfV2AvL5x36R1X+jf9nX0mTSrozwJbh9a3dGP/p6oOAAdWc5AkC1U1v5rnmEVXY9/2fPW4\nGvuedM+Tukb/WWBHku1JXgrsBY5M6FiSpBcxkTP6qrqQ5JeBvwbWAe+rqpOTOJYk6cVN7Bp9VX0E\n+Miknr+zqks/M+xq7Nuerx5XY98T7Tnly/2S1DTvdSNJjZuJoB91O4UM/G63/fNJXjuNOsepR88/\n3/X6cJJPJrlxGnWOW99bZyT5kSQXkrx5LeubhD49J3l9koeSnEzyd2td47j1+P3+9iR/meRzXc9v\nn0ad45TkfUnOJ3nkMtsnl2NVdUV/MXgx91+A7wJeCnwO2Pm8OW8C/orBW1RvAj4z7brXoOcfAzZ0\ny7fNes99+x6a9zEGrwG9edp1r8HP+pXAKeDV3fqrpl33GvT8LuC3u+U54GvAS6dd+yr7/nHgtcAj\nl9k+sRybhTP6PrdT2AP8cQ18Gnhlkk1rXegYjey5qj5ZVf/WrX6awWcVZl3fW2f8CvBB4PxaFjch\nfXr+OeCBqvoyQFXNet99ei7gFUkCvJxB0F9Y2zLHq6o+waCPy5lYjs1C0F/qdgqbVzBnliy3nzsZ\nnAnMupF9J9kM/CzwB2tY1yT1+Vl/D7Ahyd8mOZHkbWtW3WT06fn3gO8H/hV4GHhHVT23NuVNzcRy\nzPvRz7gkb2AQ9DdPu5Y18h7gnVX1XK6eu2KtB34YuAV4GfCpJJ+uqn+eblkTdSvwEPBG4LuBo0n+\nvqq+Pt2yZtMsBP3I2yn0nDNLevWT5AeB9wK3VdVX16i2SerT9zxwKP9/f5A3JblQVX+xNiWOXZ+e\nzwBfrapvAt9M8gngRmBWg75Pz28H7qvBxevFJI8D3wccX5sSp2JiOTYLl2763E7hCPC27lXrm4D/\nqKpza13oGI3sOcmrgQeAtzZ0Zjey76raXlXbqmob8OfAL81wyEO/3+8HgZuTrE/yrQzuBPvoGtc5\nTn16/jKDf8GQZCPwvcAX17TKtTexHLviz+jrMrdTSPKL3fY/ZPDuizcBi8B/MTgbmFk9e/4N4DuA\n+7uz2ws14zeC6tl3U/r0XFWPJvko8HngOeC9VXXJt+jNgp4/598C3p/kYQbvQnlnVa3ojq1XiiQf\nAF4PXJ/kDPBu4BqYfI75yVhJatwsXLqRJK2CQS9JjTPoJalxBr0kNc6gl6TGGfSS1DiDXpIaZ9BL\nUuP+B4lM7b4MyYXiAAAAAElFTkSuQmCC\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "prb = model.predict_proba(X)\n", "_ = plt.hist([prb[y==0,0], prb[y==1,0]], bins=30, color=['blue','red']) " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "See how the class label is chosen:" ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "collapsed": true }, "outputs": [], "source": [ "df = model.decision_function(X) # returns h(x)=+w0" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### TODO:\n", "- plot the transformed data separately for training data and testing data.\n", "- check how the sign (use numpy.sign()) of df is mapped onto class labels\n", "- generate a higher dimensional dataset (n_features=5) - call it differently - and study: \n", " * the optimal subspace (plot different pairs of coordinates)\n", " * select to have more redundant or linearly dependent features and see how the LD subspace changes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 2. Logistic regression\n", "\n", "Check the documentation: http://scikit-learn.org/stable/modules/generated/sklearn.linear_model.LogisticRegression.html\n", "\n", "Train and classify:" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "collapsed": true }, "outputs": [], "source": [ "from sklearn.linear_model import LogisticRegression\n", "\n", "model = LogisticRegression(C=1000) # large values imply less penalty" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.02" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "model.fit(X[0:500,:], y[0:500])\n", "yp = model.predict(X[500:1001,:])\n", "sum(yp != y[500:1001])/ 500.0 # compare with LDA" ] }, { "cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [ { "data": { "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAD8CAYAAAB5Pm/hAAAABHNCSVQICAgIfAhkiAAAAAlwSFlz\nAAALEgAACxIB0t1+/AAADfBJREFUeJzt3H+o3fddx/Hna0nbTaY2NdcQksxEiT9SsXNeY3FD6or0\nh2IqjJKpWxiFIFapILh2fzhECvUfGaJVQi2LKAvBFRvHVEI2rbK18UbbtUmNjStdU9Mm29S5CZW0\nb/84X9xJ0tvzvfeec0/OJ88HXO73+z3f7zmfD0me/fZ7zvmmqpAktest0x6AJGmyDL0kNc7QS1Lj\nDL0kNc7QS1LjDL0kNc7QS1LjDL0kNc7QS1Lj1k57AADr16+vrVu3TnsYkjRTjh079uWqmhu132UR\n+q1bt7KwsDDtYUjSTEnyQp/9vHQjSY0z9JLUOEMvSY0z9JLUOEMvSY0z9JLUOEMvSY0z9JLUOEMv\nSY27LL4ZK0mtSi5cr1r9MXhGL0mNM/SS1DhDL0mNM/SS1DhDL0mNM/SS1DhDL0mNM/SS1DhDL0mN\nM/SS1DhDL0mNM/SS1DhDL0mNM/SS1DhDL0mNM/SS1DhDL0mNM/SS1LjeoU+yJsk/J/lUt35dksNJ\nnut+rxva974kp5KcTHLLJAYuSepnKWf09wDPDq3fCxypqu3AkW6dJDuA3cD1wK3Ag0nWjGe4kqSl\n6hX6JJuBnwYeGtq8C9jfLe8H7hjafqCqXq2q54FTwM7xDFeStFR9z+g/BvwG8PrQtg1VdaZbfhnY\n0C1vAl4c2u90t+0CSfYmWUiycO7cuaWNWpLU28jQJ/kZ4GxVHVtsn6oqoJbywlW1r6rmq2p+bm5u\nKYeOllz4I0lXsLU99nk38LNJbgfeCnxbkj8FXkmysarOJNkInO32fwnYMnT85m6bJGkKRp7RV9V9\nVbW5qrYyeJP1M1X1i8AhYE+32x7g0W75ELA7yTVJtgHbgaNjH7kkqZc+Z/SLeQA4mOQu4AXgToCq\nOp7kIHACOA/cXVWvrXikkqRlyeDy+nTNz8/XwsLC+J7w4uvyl8EcJV2ZJpmjJMeqan7Ufn4zVpIa\nZ+glqXGGXpIaZ+glqXGGXpIaZ+glqXGGXpIaZ+glqXGGXpIaZ+glqXGGXpIaZ+glqXGGXpIaZ+gl\nqXGGXpIaZ+glqXGGXpIaZ+glqXGGXpIaZ+glqXGGXpIaZ+glqXGGXpIaZ+glqXGGXpIaZ+glqXGG\nXpIaZ+glqXGGXpIaZ+glqXGGXpIaZ+glqXGGXpIaZ+glqXGGXpIaZ+glqXGGXpIaNzL0Sd6a5GiS\np5IcT/Jb3fbrkhxO8lz3e93QMfclOZXkZJJbJjkBSdKb63NG/yrw3qq6AXgncGuSG4F7gSNVtR04\n0q2TZAewG7geuBV4MMmaSQxekjTayNDXwNe71au6nwJ2Afu77fuBO7rlXcCBqnq1qp4HTgE7xzpq\nSVJvva7RJ1mT5EngLHC4qp4ANlTVmW6Xl4EN3fIm4MWhw0932y5+zr1JFpIsnDt3btkTkCS9uV6h\nr6rXquqdwGZgZ5IfvOjxYnCW31tV7auq+aqan5ubW8qhkqQlWNKnbqrqP4HPMrj2/kqSjQDd77Pd\nbi8BW4YO29xtkyRNQZ9P3cwlubZbfhvwU8C/AIeAPd1ue4BHu+VDwO4k1yTZBmwHjo574JKkftb2\n2GcjsL/75MxbgINV9akknwcOJrkLeAG4E6Cqjic5CJwAzgN3V9Vrkxm+JGmUDC6vT9f8/HwtLCyM\n7wmTC9cvgzlKujJNMkdJjlXV/Kj9/GasJDXO0EtS4wy9JDXO0EtS4wy9JDXO0EtS4wy9JDXO0EtS\n4wy9JDXO0EtS4wy9JDXO0EtS4wy9JDXO0EtS4wy9JDXO0EtS4wy9JDXO0EtS4wy9JDXO0EtS4wy9\nJDXO0EtS4wy9JDXO0EtS4wy9JDXO0EtS4wy9JDXO0EtS4wy9JDXO0EtS4wy9JDXO0EtS4wy9JDXO\n0EtS4wy9JDXO0EtS4wy9JDVuZOiTbEny2SQnkhxPck+3/bokh5M81/1eN3TMfUlOJTmZ5JZJTkCS\n9Ob6nNGfB369qnYANwJ3J9kB3AscqartwJFune6x3cD1wK3Ag0nWTGLwkqTRRoa+qs5U1T91y/8N\nPAtsAnYB+7vd9gN3dMu7gANV9WpVPQ+cAnaOe+CSpH6WdI0+yVbgh4EngA1VdaZ76GVgQ7e8CXhx\n6LDT3TZJ0hT0Dn2StwOfBH6tqr42/FhVFVBLeeEke5MsJFk4d+7cUg6VJC1Br9AnuYpB5P+sqh7p\nNr+SZGP3+EbgbLf9JWDL0OGbu20XqKp9VTVfVfNzc3PLHb8kaYQ+n7oJ8MfAs1X1u0MPHQL2dMt7\ngEeHtu9Ock2SbcB24Oj4hixJWoq1PfZ5N/AB4OkkT3bbPgI8ABxMchfwAnAnQFUdT3IQOMHgEzt3\nV9VrYx+5JKmXkaGvqn8AssjDNy9yzP3A/SsYlyRpTPxmrCQ1ztBLUuMMvSQ1ztBLUuMMvSQ1ztBL\nUuMMvSQ1ztBLUuMMvSQ1ztBLUuMMvSQ1ztBLUuMMvSQ1ztBLUuMMvSQ1ztBLUuMMvSQ1ztBLUuMM\nvSQ1ztBLUuMMvSQ1ztBLUuMMvSQ1ztBLUuMMvSQ1ztBLUuMMvSQ1ztBLUuMMvSQ1ztBLUuMMvSQ1\nztBLUuMMvSQ1ztBLUuMMvSQ1ztBLUuMMvSQ1bmTokzyc5GySZ4a2XZfkcJLnut/rhh67L8mpJCeT\n3DKpgUuS+ulzRv9x4NaLtt0LHKmq7cCRbp0kO4DdwPXdMQ8mWTO20UqSlmxk6KvqMeCrF23eBezv\nlvcDdwxtP1BVr1bV88ApYOeYxipJWoblXqPfUFVnuuWXgQ3d8ibgxaH9TnfbJElTsuI3Y6uqgFrq\ncUn2JllIsnDu3LmVDkOStIjlhv6VJBsBut9nu+0vAVuG9tvcbbtEVe2rqvmqmp+bm1vmMCRJoyw3\n9IeAPd3yHuDRoe27k1yTZBuwHTi6siFKklZi7agdknwCuAlYn+Q08FHgAeBgkruAF4A7AarqeJKD\nwAngPHB3Vb02obFLknoYGfqqev8iD928yP73A/evZFCSpPHxm7GS1DhDL0mNM/SS1DhDL0mNM/SS\n1DhDL0mNM/SS1DhDL0mNM/SS1DhDL0mNM/SS1LiR97ppWnLhei35tvqSdNnzjF6SGmfoJalxhl6S\nGmfoJalxhl6SGmfoJalxhl6SGmfoJalxhl6SGmfoJalxhl6SGmfoJalxhl6SGmfoJalxhl6SGmfo\nJalxhl6SGmfoJalxhl6SGmfoJalxhl6SGrd22gOYCcmF61XTGYckLYNn9JLUOEMvSY3z0o0kLcMs\nXdGd2Bl9kluTnExyKsm9k3qdwWtd+CNJ+qaJhD7JGuAPgNuAHcD7k+yYxGtdVvr+F+fi/fyvk3SB\ncf/zWO4/zVZM6ox+J3Cqqr5YVf8LHAB2Tei1JGHMtLhJXaPfBLw4tH4a+LEJvVZvl1xTu8yeb1Us\ncmHx0rks4QLkKl2snMTL9H3OaV2PneZ14Fm4Bj0LY7zEFAY9tTdjk+wF9narX09ychlPsx748iXP\nfemLvfEYeu536YFjfr6l7rvIvJdl+nPp65I5T+JlVvhXYNxWNOdxz2UVz/6XPe9pzrn3c77xgcv9\nN/1dfXaaVOhfArYMrW/utv2/qtoH7FvJiyRZqKr5lTzHLLoS5+2crxxX4rwnPedJXaP/R2B7km1J\nrgZ2A4cm9FqSpDcxkTP6qjqf5FeAvwHWAA9X1fFJvJYk6c1N7Bp9VX0a+PSknr+zoks/M+xKnLdz\nvnJcifOe6JxTM/E2tSRpubzXjSQ1biZCP+p2Chn4ve7xLyR51zTGOU495vwL3VyfTvK5JDdMY5zj\n1vfWGUl+NMn5JO9bzfFNQp85J7kpyZNJjif5u9Ue47j1+Pv97Un+MslT3Zw/NI1xjlOSh5OcTfLM\nIo9PrmNVdVn/MHgz99+A7wauBp4Cdly0z+3AXzH4iOqNwBPTHvcqzPnHgXXd8m2zPue+8x7a7zMM\n3gN637THvQp/1tcCJ4B3dOvfOe1xr8KcPwL8Trc8B3wVuHraY1/hvH8CeBfwzCKPT6xjs3BG3+d2\nCruAP6mBx4Frk2xc7YGO0cg5V9Xnquo/utXHGXxXYdb1vXXGrwKfBM6u5uAmpM+cfx54pKq+BFBV\nsz7vPnMu4FuTBHg7g9CfX91hjldVPcZgHouZWMdmIfRvdDuFTcvYZ5YsdT53MTgTmHUj551kE/Bz\nwB+u4rgmqc+f9fcC65L8bZJjST64aqObjD5z/n3gB4B/B54G7qmq11dneFMzsY55P/oZl+QnGYT+\nPdMeyyr5GPDhqno9V84dudYCPwLcDLwN+HySx6vqX6c7rIm6BXgSeC/wPcDhJH9fVV+b7rBm0yyE\nfuTtFHruM0t6zSfJDwEPAbdV1VdWaWyT1Gfe88CBfPP+ILcnOV9Vf7E6Qxy7PnM+DXylqr4BfCPJ\nY8ANwKyGvs+cPwQ8UIOL16eSPA98P3B0dYY4FRPr2CxcuulzO4VDwAe7d61vBP6rqs6s9kDHaOSc\nk7wDeAT4QENndiPnXVXbqmprVW0F/hz45RmOPPT7+/0o8J4ka5N8C4M7wT67yuMcpz5z/hKD/4Mh\nyQbg+4AvruooV9/EOnbZn9HXIrdTSPJL3eN/xODTF7cDp4D/YXA2MLN6zvk3ge8AHuzObs/XjN8I\nque8m9JnzlX1bJK/Br4AvA48VFVv+BG9WdDzz/m3gY8neZrBp1A+XFXjuWPrlCT5BHATsD7JaeCj\nwFUw+Y75zVhJatwsXLqRJK2AoZekxhl6SWqcoZekxhl6SWqcoZekxhl6SWqcoZekxv0fKKN/Zyqg\nUOMAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# check the fitted posterior probabilities:\n", "prb = model.predict_proba(X)\n", "_ = plt.hist([prb[y==0,0], prb[y==1,0]], bins=30, color=['blue','red']) \n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### TODO:\n", "- Check what .transform() method does\n", "- Generate a higher dimensional space, with some correlation structure\n", "between variables and see how the subspace generated by .transform() changes" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "# 3. Linear SVM\n", "\n", "Check the documentation: http://scikit-learn.org/stable/modules/generated/sklearn.svm.LinearSVC.html\n", "\n", "Train and classify:" ] }, { "cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "0.02" ] }, "execution_count": 21, "metadata": {}, "output_type": "execute_result" } ], "source": [ "from sklearn.svm import LinearSVC\n", "\n", "model = LinearSVC()\n", "\n", "model.fit(X[0:500,:], y[0:500])\n", "yp = model.predict(X[500:1001,:])\n", "sum(yp != y[500:1001])/ 500.0 # compare with LDA and logistic regression" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### TODO\n", "- Use model.decision_function(X) * y to get the margins\n", "- Plot the margin density (histogram); change C (e.g. 0.1, 10, 1000) and see how the margin distribution changes" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "collapsed": true }, "outputs": [], "source": [] } ], "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 }