{"cells": [{"cell_type": "markdown", "metadata": {}, "source": ["# Classification\n", "\n", "Notebook autour d'un cas de classification binaire."]}, {"cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [{"data": {"text/html": ["
run previous cell, wait for 2 seconds
\n", ""], "text/plain": [""]}, "execution_count": 2, "metadata": {}, "output_type": "execute_result"}], "source": ["from jyquickhelper import add_notebook_menu\n", "add_notebook_menu()"]}, {"cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": ["%matplotlib inline"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Les donn\u00e9es"]}, {"cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [], "source": ["from sklearn.datasets import load_breast_cancer\n", "data = load_breast_cancer()"]}, {"cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": ["X, y = data.data, data.target"]}, {"cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": ["from sklearn.model_selection import train_test_split\n", "X_train, X_test, y_train, y_test = train_test_split(X, y)"]}, {"cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [{"data": {"text/plain": ["(569, 30)"]}, "execution_count": 7, "metadata": {}, "output_type": "execute_result"}], "source": ["X.shape"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## ACP\n", "\n", "On projette les donn\u00e9es dans un plan, avec une couleur pour chaque classe pour voir si le probl\u00e8me para\u00eet simple ou non. Pour projeter les donn\u00e9es, le plus simple est une ACP. On conserver trois axes."]}, {"cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [{"data": {"text/plain": ["PCA(copy=True, iterated_power='auto', n_components=3, random_state=None,\n", " svd_solver='auto', tol=0.0, whiten=False)"]}, "execution_count": 8, "metadata": {}, "output_type": "execute_result"}], "source": ["from sklearn.decomposition import PCA\n", "acp = PCA(3)\n", "acp.fit(X_train, y_train)"]}, {"cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [{"data": {"text/plain": ["(426, 3)"]}, "execution_count": 9, "metadata": {}, "output_type": "execute_result"}], "source": ["xacp = acp.transform(X_train)\n", "xacp.shape"]}, {"cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [{"data": {"image/png": "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\n", "text/plain": ["
"]}, "metadata": {"needs_background": "light"}, "output_type": "display_data"}], "source": ["import matplotlib.pyplot as plt\n", "fig, ax = plt.subplots(1, 2, figsize=(8, 4))\n", "ax[0].plot(xacp[y_train == 0, 0], xacp[y_train == 0, 1], '.', label=\"cl0\")\n", "ax[0].plot(xacp[y_train == 1, 0], xacp[y_train == 1, 1], '.', label=\"cl1\")\n", "ax[1].plot(xacp[y_train == 0, 1], xacp[y_train == 0, 2], '.', label=\"cl0\")\n", "ax[1].plot(xacp[y_train == 1, 1], xacp[y_train == 1, 2], '.', label=\"cl1\")\n", "ax[0].legend();ax[1].legend();\n", "ax[0].set_title(\"axes 1, 2\");ax[1].set_title(\"axes 2, 3\");"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Le probl\u00e8me n'a pas l'air trop compliqu\u00e9."]}, {"cell_type": "markdown", "metadata": {}, "source": ["## R\u00e9gression logistique"]}, {"cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": ["from sklearn.linear_model import LogisticRegression"]}, {"cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [{"data": {"text/plain": ["LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n", " intercept_scaling=1, l1_ratio=None, max_iter=100,\n", " multi_class='auto', n_jobs=None, penalty='l2',\n", " random_state=None, solver='lbfgs', tol=0.0001, verbose=0,\n", " warm_start=False)"]}, "execution_count": 12, "metadata": {}, "output_type": "execute_result"}], "source": ["logreg = LogisticRegression(solver='lbfgs')\n", "logreg.fit(xacp, y_train)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Les coefficients. Si $(X_1, X_2, X_3)$ sont les coordonn\u00e9es des variables projet\u00e9es sur les trois axes, le mod\u00e8le d\u00e9finit une droite $f(x_1, x_2, x_3) = a_1 x_1 + a_2 x_2 + a_3 x_3 + b$."]}, {"cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [{"data": {"text/plain": ["(array([[-0.01244239, 0.02897613, -0.0194635 ]]), array([-1.48191575]))"]}, "execution_count": 13, "metadata": {}, "output_type": "execute_result"}], "source": ["logreg.coef_, logreg.intercept_"]}, {"cell_type": "markdown", "metadata": {}, "source": ["La courbe $f(x_1, x_2, x_3) = 0$ d\u00e9finit la fronti\u00e8re entre les deux classes, celle o\u00f9 la probabilit\u00e9 d'appartenir \u00e0 l'une ou l'autre classe est \u00e9gale \u00e0 $\\frac{1}{2}$. On ajoute cette fronti\u00e8re sur chacune des deux projections. $f(x_1, x_2, x_3) = a_1 x_1 + a_2 x_2 + a_3 x_3 + b = 0$. Sur la premi\u00e8re projection, $x_3 = 0$, donc la droite a pour \u00e9quation : $a_1 x_1 + a_2 x_2 + a_3 x_3 + b = 0 \\Rightarrow x_2 = - \\frac{a_1 x_1 + b}{a_2}$. C'est ce qu'on repr\u00e9sente ici."]}, {"cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [{"data": {"image/png": "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\n", "text/plain": ["
"]}, "metadata": {"needs_background": "light"}, "output_type": "display_data"}], "source": ["import numpy\n", "X1 = numpy.array(list(range(-1000, 1000, 10)))\n", "X2 = (-logreg.intercept_[0]-logreg.coef_[0, 0]*X1) / logreg.coef_[0, 1]\n", "X22 = numpy.array(list(range(-100, 100, 10)))\n", "X3 = (-logreg.intercept_[0]-logreg.coef_[0, 1]*X22) / logreg.coef_[0, 2]\n", "\n", "import matplotlib.pyplot as plt\n", "fig, ax = plt.subplots(1, 2, figsize=(8, 4))\n", "ax[0].plot(xacp[y_train == 0, 0], xacp[y_train == 0, 1], '.', label=\"cl0\")\n", "ax[0].plot(xacp[y_train == 1, 0], xacp[y_train == 1, 1], '.', label=\"cl1\")\n", "ax[0].plot(X1, X2, '.', label=\"logreg\")\n", "ax[1].plot(xacp[y_train == 0, 1], xacp[y_train == 0, 2], '.', label=\"cl0\")\n", "ax[1].plot(xacp[y_train == 1, 1], xacp[y_train == 1, 2], '.', label=\"cl1\")\n", "ax[1].plot(X22, X3, '.', label=\"logreg\")\n", "ax[0].legend();ax[1].legend();\n", "ax[0].set_title(\"axes 1, 2\");ax[1].set_title(\"axes 2, 3\");"]}, {"cell_type": "markdown", "metadata": {}, "source": ["On calcule la matrice de confusion. Il faut projeter les variables initiales sur les axes de l'ACP puis pr\u00e9dire."]}, {"cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [], "source": ["xacp_test = acp.transform(X_test)\n", "pred = logreg.predict(xacp_test)"]}, {"cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [{"data": {"text/plain": ["array([[42, 4],\n", " [ 4, 93]], dtype=int64)"]}, "execution_count": 16, "metadata": {}, "output_type": "execute_result"}], "source": ["from sklearn.metrics import confusion_matrix\n", "confusion_matrix(y_test, pred)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Courbe ROC\n", "\n", "La courbe ROC est une courbe souvent utilis\u00e9e pour mesurer la pertinence d'un mod\u00e8le. La matrice de confusion n'utilise pas la probabilit\u00e9 retourn\u00e9e par le mod\u00e8le, cette derni\u00e8re exprime si le point $X_i$ est plus ou moins loin de la fronti\u00e8re de pr\u00e9diction. En principe, plus on est loin, moins le mod\u00e8le pr\u00e9dictif se trompe. C'est ce que la courbe ROC refl\u00e8te, plus elle est \u00e9lev\u00e9, plus c'est le cas (pour en savoir plus : [courbe ROC](http://www.xavierdupre.fr/app/mlstatpy/helpsphinx/c_metric/roc.html))."]}, {"cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [], "source": ["from sklearn.metrics import roc_curve\n", "\n", "y_pred_grd = logreg.predict_proba(xacp_test)[:, 1]\n", "fpr_grd, tpr_grd, _ = roc_curve(y_test, y_pred_grd)"]}, {"cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [{"data": {"image/png": "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\n", "text/plain": ["
"]}, "metadata": {"needs_background": "light"}, "output_type": "display_data"}], "source": ["plt.figure(1, figsize=(3, 3))\n", "plt.plot([0, 1], [0, 1], 'k--')\n", "plt.plot(fpr_grd, tpr_grd);"]}, {"cell_type": "markdown", "metadata": {}, "source": ["La ligne en pointill\u00e9e serait la courbe ROC obtenue pour une pr\u00e9diction al\u00e9atoire. On en est loin."]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Fronti\u00e8re polyn\u00f4miale\n", "\n", "On souhaite une fronti\u00e8re polyn\u00f4miale. On ajoute pour cela un pr\u00e9traitement qui calcule $X_1^2, X_2^2, X_3^2, X_1 X_2, ...$."]}, {"cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [{"data": {"text/plain": ["PolynomialFeatures(degree=2, include_bias=True, interaction_only=False,\n", " order='C')"]}, "execution_count": 19, "metadata": {}, "output_type": "execute_result"}], "source": ["from sklearn.preprocessing import PolynomialFeatures\n", "poly = PolynomialFeatures(degree=2)\n", "poly.fit(xacp)"]}, {"cell_type": "code", "execution_count": 19, "metadata": {}, "outputs": [{"data": {"text/plain": ["((426, 3), (426, 10))"]}, "execution_count": 20, "metadata": {}, "output_type": "execute_result"}], "source": ["xacp_poly = poly.transform(xacp)\n", "xacp.shape, xacp_poly.shape"]}, {"cell_type": "code", "execution_count": 20, "metadata": {}, "outputs": [{"data": {"text/plain": ["LogisticRegression(C=1.0, class_weight=None, dual=False, fit_intercept=True,\n", " intercept_scaling=1, l1_ratio=None, max_iter=1000,\n", " multi_class='auto', n_jobs=None, penalty='l2',\n", " random_state=None, solver='lbfgs', tol=0.0001, verbose=0,\n", " warm_start=False)"]}, "execution_count": 21, "metadata": {}, "output_type": "execute_result"}], "source": ["logreg2 = LogisticRegression(solver='lbfgs', max_iter=1000)\n", "logreg2.fit(xacp_poly, y_train)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Les nouveaux coefficients du mod\u00e8le."]}, {"cell_type": "code", "execution_count": 21, "metadata": {}, "outputs": [{"data": {"text/plain": ["[('1', 0.00013474687830331624),\n", " ('x0', -0.009796886245028377),\n", " ('x1', 0.03422545572030919),\n", " ('x2', -0.005487261266497426),\n", " ('x0^2', 6.912136603531012e-07),\n", " ('x0 x1', -4.353833813532155e-05),\n", " ('x0 x2', -0.00019255718749305347),\n", " ('x1^2', -0.0004269054807770011),\n", " ('x1 x2', -0.0018760934646931198),\n", " ('x2^2', -0.0042992267040219976)]"]}, "execution_count": 22, "metadata": {}, "output_type": "execute_result"}], "source": ["list(zip(poly.get_feature_names(), logreg2.coef_.ravel()))"]}, {"cell_type": "markdown", "metadata": {}, "source": ["La fronti\u00e8re est plus difficile \u00e0 tracer et il n'est pas \u00e9vident de trouver son \u00e9quation \u00e0 moins de r\u00e9soudre un polyn\u00f4me du second degr\u00e9. On calcule plut\u00f4t les pr\u00e9dictions pour de nombreux points dispos\u00e9s sur une grille en leur donnant une couleur diff\u00e9rente selon que la classe pr\u00e9dite est 0 ou 1."]}, {"cell_type": "code", "execution_count": 22, "metadata": {}, "outputs": [], "source": ["Xp1 = numpy.array(list(range(-1000, 1000, 10)))\n", "Xp2 = numpy.array(list(range(-100, 100, 2)))\n", "cote0 = []\n", "cote1 = []\n", "for x1 in Xp1:\n", " for x2 in Xp2:\n", " x = numpy.array([[x1, x2, 0]])\n", " xp = poly.transform(x)\n", " yp = logreg2.predict(xp)\n", " if yp == 1:\n", " cote1.append((x1, x2))\n", " else:\n", " cote0.append((x1, x2))\n", "\n", "cote0 = numpy.array(cote0)\n", "cote1 = numpy.array(cote1)"]}, {"cell_type": "code", "execution_count": 23, "metadata": {}, "outputs": [{"data": {"image/png": "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\n", "text/plain": ["
"]}, "metadata": {"needs_background": "light"}, "output_type": "display_data"}], "source": ["fig, ax = plt.subplots(1, 2, figsize=(8, 4))\n", "ax[0].plot(cote0[:, 0], cote0[:, 1], '.', label='yp0')\n", "ax[0].plot(cote1[:, 0], cote1[:, 1], '.', label='yp1')\n", "ax[0].plot(xacp[y_train == 0, 0], xacp[y_train == 0, 1], '.', label=\"cl0\")\n", "ax[0].plot(xacp[y_train == 1, 0], xacp[y_train == 1, 1], '.', label=\"cl1\")\n", "ax[0].plot(X1, X2, '.', label=\"logreg\")\n", "ax[1].plot(xacp[y_train == 0, 1], xacp[y_train == 0, 2], '.', label=\"cl0\")\n", "ax[1].plot(xacp[y_train == 1, 1], xacp[y_train == 1, 2], '.', label=\"cl1\")\n", "ax[1].plot(X22, X3, '.', label=\"logreg\")\n", "ax[0].legend();ax[1].legend();\n", "ax[0].set_xlim([-1000, 1000]);ax[0].set_ylim([-150, 150]);\n", "ax[0].set_title(\"axes 1, 2\");ax[1].set_title(\"axes 2, 3\");"]}, {"cell_type": "markdown", "metadata": {}, "source": ["Ca para\u00eet un peu mieux."]}, {"cell_type": "code", "execution_count": 24, "metadata": {}, "outputs": [{"data": {"text/plain": ["array([[41, 5],\n", " [ 4, 93]], dtype=int64)"]}, "execution_count": 25, "metadata": {}, "output_type": "execute_result"}], "source": ["confusion_matrix(y_test, \n", " logreg2.predict(\n", " poly.transform(\n", " acp.transform(X_test))))"]}, {"cell_type": "markdown", "metadata": {}, "source": ["## Pipeline\n", "\n", "Ce n'est pas \u00e9vident de se souvenir de toutes les \u00e9tapes. Le mieux est sans doute de tout ins\u00e9rer dans un pipeline."]}, {"cell_type": "code", "execution_count": 25, "metadata": {}, "outputs": [{"data": {"text/plain": ["array([[41, 5],\n", " [ 4, 93]], dtype=int64)"]}, "execution_count": 26, "metadata": {}, "output_type": "execute_result"}], "source": ["from sklearn.pipeline import Pipeline\n", "pipe = Pipeline([\n", " ('acp', PCA(3)),\n", " ('poly', PolynomialFeatures(2)),\n", " ('lr', LogisticRegression(solver='lbfgs', max_iter=1000))\n", "])\n", "pipe.fit(X_train, y_train)\n", "pred = pipe.predict(X_test)\n", "confusion_matrix(y_test, pred)"]}, {"cell_type": "markdown", "metadata": {}, "source": ["C'est plus lisible."]}], "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.7.2"}}, "nbformat": 4, "nbformat_minor": 2}