{
"cells": [
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"Ajout d'étapes à la fin "
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"\n",
"# Recognizing hand-written digits\n",
"\n",
"This example shows how scikit-learn can be used to recognize images of\n",
"hand-written digits, from 0-9.\n"
]
},
{
"cell_type": "code",
"execution_count": 1,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# Author: Gael Varoquaux \n",
"# License: BSD 3 clause\n",
"\n",
"# Standard scientific Python imports\n",
"import matplotlib.pyplot as plt\n",
"\n",
"# Import datasets, classifiers and performance metrics\n",
"from sklearn import datasets, svm, metrics\n",
"from sklearn.model_selection import train_test_split"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Digits dataset\n",
"\n",
"The digits dataset consists of 8x8\n",
"pixel images of digits. The ``images`` attribute of the dataset stores\n",
"8x8 arrays of grayscale values for each image. We will use these arrays to\n",
"visualize the first 4 images. The ``target`` attribute of the dataset stores\n",
"the digit each image represents and this is included in the title of the 4\n",
"plots below.\n",
"\n",
"Note: if we were working from image files (e.g., 'png' files), we would load\n",
"them using :func:`matplotlib.pyplot.imread`.\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 2,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"digits = datasets.load_digits()\n",
"\n",
"_, axes = plt.subplots(nrows=1, ncols=4, figsize=(10, 3))\n",
"for ax, image, label in zip(axes, digits.images, digits.target):\n",
" ax.set_axis_off()\n",
" ax.imshow(image, cmap=plt.cm.gray_r, interpolation=\"nearest\")\n",
" ax.set_title(\"Training: %i\" % label)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Classification\n",
"\n",
"To apply a classifier on this data, we need to flatten the images, turning\n",
"each 2-D array of grayscale values from shape ``(8, 8)`` into shape\n",
"``(64,)``. Subsequently, the entire dataset will be of shape\n",
"``(n_samples, n_features)``, where ``n_samples`` is the number of images and\n",
"``n_features`` is the total number of pixels in each image.\n",
"\n",
"We can then split the data into train and test subsets and fit a support\n",
"vector classifier on the train samples. The fitted classifier can\n",
"subsequently be used to predict the value of the digit for the samples\n",
"in the test subset.\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 3,
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# flatten the images\n",
"n_samples = len(digits.images)\n",
"data = digits.images.reshape((n_samples, -1))\n",
"\n",
"# Create a classifier: a support vector classifier\n",
"clf = svm.SVC(gamma=0.001)\n",
"\n",
"# Split data into 50% train and 50% test subsets\n",
"X_train, X_test, y_train, y_test = train_test_split(\n",
" data, digits.target, test_size=0.5, shuffle=False\n",
")\n",
"\n",
"# Learn the digits on the train subset\n",
"clf.fit(X_train, y_train)\n",
"\n",
"# Predict the value of the digit on the test subset\n",
"predicted = clf.predict(X_test)"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"Below we visualize the first 4 test samples and show their predicted\n",
"digit value in the title.\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 4,
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
"image/png": "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",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"_, axes = plt.subplots(nrows=1, ncols=4, figsize=(10, 3))\n",
"for ax, image, prediction in zip(axes, X_test, predicted):\n",
" ax.set_axis_off()\n",
" image = image.reshape(8, 8)\n",
" ax.imshow(image, cmap=plt.cm.gray_r, interpolation=\"nearest\")\n",
" ax.set_title(f\"Prediction: {prediction}\")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
":func:`~sklearn.metrics.classification_report` builds a text report showing\n",
"the main classification metrics.\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 5,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Classification report for classifier SVC(gamma=0.001):\n",
" precision recall f1-score support\n",
"\n",
" 0 1.00 0.99 0.99 88\n",
" 1 0.99 0.97 0.98 91\n",
" 2 0.99 0.99 0.99 86\n",
" 3 0.98 0.87 0.92 91\n",
" 4 0.99 0.96 0.97 92\n",
" 5 0.95 0.97 0.96 91\n",
" 6 0.99 0.99 0.99 91\n",
" 7 0.96 0.99 0.97 89\n",
" 8 0.94 1.00 0.97 88\n",
" 9 0.93 0.98 0.95 92\n",
"\n",
" accuracy 0.97 899\n",
" macro avg 0.97 0.97 0.97 899\n",
"weighted avg 0.97 0.97 0.97 899\n",
"\n",
"\n"
]
}
],
"source": [
"print(\n",
" f\"Classification report for classifier {clf}:\\n\"\n",
" f\"{metrics.classification_report(y_test, predicted)}\\n\"\n",
")"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"We can also plot a `confusion matrix ` of the\n",
"true digit values and the predicted digit values.\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 6,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Confusion matrix:\n",
"[[87 0 0 0 1 0 0 0 0 0]\n",
" [ 0 88 1 0 0 0 0 0 1 1]\n",
" [ 0 0 85 1 0 0 0 0 0 0]\n",
" [ 0 0 0 79 0 3 0 4 5 0]\n",
" [ 0 0 0 0 88 0 0 0 0 4]\n",
" [ 0 0 0 0 0 88 1 0 0 2]\n",
" [ 0 1 0 0 0 0 90 0 0 0]\n",
" [ 0 0 0 0 0 1 0 88 0 0]\n",
" [ 0 0 0 0 0 0 0 0 88 0]\n",
" [ 0 0 0 1 0 1 0 0 0 90]]\n"
]
},
{
"data": {
"image/png": "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",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"disp = metrics.ConfusionMatrixDisplay.from_predictions(y_test, predicted)\n",
"disp.figure_.suptitle(\"Confusion Matrix\")\n",
"print(f\"Confusion matrix:\\n{disp.confusion_matrix}\")\n",
"\n",
"plt.show()"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"If the results from evaluating a classifier are stored in the form of a\n",
"`confusion matrix ` and not in terms of `y_true` and\n",
"`y_pred`, one can still build a :func:`~sklearn.metrics.classification_report`\n",
"as follows:\n",
"\n"
]
},
{
"cell_type": "code",
"execution_count": 7,
"metadata": {
"collapsed": false
},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Classification report rebuilt from confusion matrix:\n",
" precision recall f1-score support\n",
"\n",
" 0 1.00 0.99 0.99 88\n",
" 1 0.99 0.97 0.98 91\n",
" 2 0.99 0.99 0.99 86\n",
" 3 0.98 0.87 0.92 91\n",
" 4 0.99 0.96 0.97 92\n",
" 5 0.95 0.97 0.96 91\n",
" 6 0.99 0.99 0.99 91\n",
" 7 0.96 0.99 0.97 89\n",
" 8 0.94 1.00 0.97 88\n",
" 9 0.93 0.98 0.95 92\n",
"\n",
" accuracy 0.97 899\n",
" macro avg 0.97 0.97 0.97 899\n",
"weighted avg 0.97 0.97 0.97 899\n",
"\n",
"\n"
]
}
],
"source": [
"# The ground truth and predicted lists\n",
"y_true = []\n",
"y_pred = []\n",
"cm = disp.confusion_matrix\n",
"\n",
"# For each cell in the confusion matrix, add the corresponding ground truths\n",
"# and predictions to the lists\n",
"for gt in range(len(cm)):\n",
" for pred in range(len(cm)):\n",
" y_true += [gt] * cm[gt][pred]\n",
" y_pred += [pred] * cm[gt][pred]\n",
"\n",
"print(\n",
" \"Classification report rebuilt from confusion matrix:\\n\"\n",
" f\"{metrics.classification_report(y_true, y_pred)}\\n\"\n",
")"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"## Ajout d'étapes \n",
"On souhaite, à partir de l'exemple précédent, ajouter des étapes dans un problème de machine learning. \n",
"- Choix du bon model (recherche de noyau, et valeur de C)\n",
"- Interprétation"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [],
"source": [
"from sklearn.model_selection import GridSearchCV"
]
},
{
"cell_type": "code",
"execution_count": 9,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"{'C': 4, 'coef0': 0, 'degree': 1, 'kernel': 'rbf'}\n",
"Confusion matrix:\n",
"[[87 0 0 0 1 0 0 0 0 0]\n",
" [ 0 87 1 0 0 0 0 0 2 1]\n",
" [ 0 0 85 1 0 0 0 0 0 0]\n",
" [ 0 0 0 82 0 3 0 2 4 0]\n",
" [ 0 0 0 0 88 0 0 0 0 4]\n",
" [ 0 0 0 0 0 87 1 0 0 3]\n",
" [ 0 1 0 0 0 0 90 0 0 0]\n",
" [ 0 0 0 0 0 1 0 88 0 0]\n",
" [ 0 0 0 0 0 0 0 0 88 0]\n",
" [ 0 0 0 1 0 1 0 0 0 90]]\n"
]
},
{
"data": {
"image/png": "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",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"digits = datasets.load_digits()\n",
"\n",
"# Flattening des données\n",
"n_samples = len(digits.images)\n",
"data = digits.images.reshape((n_samples, -1))\n",
"\n",
"# SVM classifier\n",
"classifier = svm.SVC(gamma=0.001)\n",
"\n",
"# Recherche des meilleurs paramètres\n",
"parameters = {'kernel':('linear','poly', 'rbf', 'sigmoid'), 'C':[0.1, 0.5, 1, 3, 4, 5, 10], 'degree':[1,2,3,5], 'coef0':[0, 0.1, 0.5, 1, 10]}\n",
"classifier = GridSearchCV(classifier, parameters)\n",
"\n",
"# Split data\n",
"X_train, X_test, y_train, y_test = train_test_split(\n",
" data, digits.target, test_size=0.5, shuffle=False\n",
")\n",
"\n",
"classifier.fit(X_train, y_train)\n",
"print(classifier.best_params_)\n",
"\n",
"predicted = classifier.predict(X_test)\n",
"\n",
"disp = metrics.ConfusionMatrixDisplay.from_predictions(y_test, predicted)\n",
"disp.figure_.suptitle(\"Confusion Matrix\")\n",
"print(f\"Confusion matrix:\\n{disp.confusion_matrix}\")\n",
"\n",
"plt.show()"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"On peut comprendre pourquoi le kernel n'est pas de type linéaire, polynomial ou sigmoid, il est donc de kernel rbf (gaussien). Le coefficient C est de 4, permettant de ne pas trop rigide avec la classification (0 -> rigide, +inf -> flexible)"
]
},
{
"cell_type": "code",
"execution_count": 10,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Row 32 has been classified as 9 and should be 5\n",
"Row 53 has been classified as 9 and should be 5\n",
"Row 120 has been classified as 9 and should be 5\n",
"Row 197 has been classified as 9 and should be 4\n",
"Row 215 has been classified as 5 and should be 7\n",
"Row 220 has been classified as 7 and should be 3\n",
"Row 280 has been classified as 8 and should be 1\n",
"Row 344 has been classified as 2 and should be 1\n",
"Row 366 has been classified as 8 and should be 1\n",
"Row 390 has been classified as 9 and should be 1\n",
"Row 463 has been classified as 6 and should be 5\n",
"Row 466 has been classified as 3 and should be 2\n",
"Row 653 has been classified as 1 and should be 6\n",
"Row 675 has been classified as 4 and should be 0\n",
"Row 704 has been classified as 8 and should be 3\n",
"Row 707 has been classified as 7 and should be 3\n",
"Row 713 has been classified as 9 and should be 4\n",
"Row 730 has been classified as 9 and should be 4\n",
"Row 760 has been classified as 3 and should be 9\n",
"Row 762 has been classified as 9 and should be 4\n",
"Row 764 has been classified as 5 and should be 9\n",
"Row 792 has been classified as 5 and should be 3\n",
"Row 828 has been classified as 8 and should be 3\n",
"Row 829 has been classified as 8 and should be 3\n",
"Row 831 has been classified as 5 and should be 3\n",
"Row 832 has been classified as 8 and should be 3\n",
"Row 867 has been classified as 5 and should be 3\n"
]
},
{
"data": {
"image/png": "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",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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",
"text/plain": [
""
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
}
],
"source": [
"count = 0\n",
"for row_index, (input, prediction, label) in enumerate(zip (X_test, predicted, y_test)):\n",
" if prediction != label:\n",
" print('Row', row_index, 'has been classified as ', prediction, 'and should be ', label)\n",
" count = count +1\n",
" if count <= 5:\n",
" plt.figure()\n",
" input = input.reshape(8, 8)\n",
" plt.imshow(input, cmap=plt.cm.gray_r, interpolation=\"nearest\")\n",
" plt.title(f\"Target: {label} - Prediction: {prediction}\")"
]
},
{
"attachments": {},
"cell_type": "markdown",
"metadata": {},
"source": [
"On peut observer que le modèle reste affecté par des niveaux de gris reliés entre eux.\n",
"\n",
"## Conclusion\n",
"Grace à ce TP, nous avons pu découvrir les méthodes de classification avec noyaux et la manière d'optimiser les paramètres du modèle avec la fonction `GridSearchCV`"
]
}
],
"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.9.4 (tags/v3.9.4:1f2e308, Apr 6 2021, 13:40:21) [MSC v.1928 64 bit (AMD64)]"
},
"vscode": {
"interpreter": {
"hash": "2ef431f6525756fa8a44688585fa332ef3b2e5fcfe8fe75df35bbf7028a8b511"
}
}
},
"nbformat": 4,
"nbformat_minor": 0
}