Skip to content
Snippets Groups Projects
apprentissage_non-supervise.ipynb 25.9 KiB
Newer Older
    }
   },
   "source": [
    "### Comment se comporte un algo comme K-Means sur données très corrélées ?"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "outputs": [],
   "source": [
    "y2_kmeans = KMeans(n_clusters=3).fit_predict(X2)\n",
    "plot_blobs(X2, y2_kmeans)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "Comme on aurait pu l'imaginer, la distance euclidienne sur des données très corrélées n'est pas forcément un bon estimateur de groupe. Voyons si d'autres algorithmes ne seraient pas plus appropriés."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "## Gaussian mixture models (GMM)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "Un _Gaussian mixture model_ tente de représenter la distribution des données par un ensemble de gaussiennes à N dimensions. Il devrait naturellement être plus flexible pour représenter des données très corrélées."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "-"
    }
   },
   "source": [
    "<center><img src=\"img01/gmm.png\"></center>"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "outputs": [],
   "source": [
    "from sklearn.mixture import GaussianMixture\n",
    "\n",
    "gmm = GaussianMixture(n_components=3).fit(X2)\n",
    "y2_gmm = gmm.predict(X2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "outputs": [],
   "source": [
    "plot_blobs(X2, y2_gmm)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "On retrouve le même résultat qu'avec le K-Means sur nos données très corrélées. Notre cas est assez particulier car la correlation a été ajoutée artificiellement avec une matrice de covariance et appliquée à l'ensemble des groupes. Si on le spécifie à l'algorithme, on lui permet de s'adapter."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "outputs": [],
   "source": [
    "gmm = GaussianMixture(n_components=3, covariance_type='tied').fit(X2)\n",
    "y2_gmm = gmm.predict(X2)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "outputs": [],
   "source": [
    "gmm.predict_proba(X2)[:5].round(3)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "outputs": [],
   "source": [
    "plot_blobs(X2, y2_gmm)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "## Conclusion"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "Les algorithmes d'apprentissage non-supervisé sont très faciles d'utilisation et permettent d'explorer la distribution de nos données ainsi que les groupes et corrélations sous-jacentes. Comme nous le verrons par la suite, ils sont très utilisés pour préparer les données aux tâches d'apprentissage supervisé."
   ]
  }
 ],
 "metadata": {
  "celltoolbar": "Diaporama",
  "kernelspec": {
   "display_name": "Python 3.7.4 64-bit ('3.7.4': pyenv)",
   "language": "python",
   "name": "python37464bit374pyenv5d13ff55ab7742379a14cd8b63849253"
  },
  "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.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}