{ "cells": [ { "cell_type": "code", "execution_count": 4, "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": 5, "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": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" }, { "data": { "image/png": "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\nNgAAAABJRU5ErkJggg==\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": 7, "metadata": { "collapsed": true }, "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": 8, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "LinearDiscriminantAnalysis(n_components=None, priors=None, shrinkage=None,\n", " solver='svd', store_covariance=False, tol=0.0001)" ] }, "execution_count": 8, "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.106" ] }, "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": 10, "metadata": {}, "outputs": [ { "data": { "image/png": "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\ngzUAAAAASUVORK5CYII=\n", "text/plain": [ "" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "Xt = model.transform(X)\n", "_ = plt.hist([Xt[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": "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\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", "- Generate a higher dimensional space, with some correlation structure\n", "between variables and see how the classifier performs\n", "- Try different penalties" ] }, { "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 }