M2_SETI/D3/TP/TP_SETI_SVM/plot_digits_classification.ipynb

585 lines
91 KiB
Text
Raw Normal View History

2022-12-29 17:27:20 +01:00
{
"cells": [
{
2023-01-12 16:00:39 +01:00
"attachments": {},
"cell_type": "markdown",
"metadata": {},
2022-12-29 17:27:20 +01:00
"source": [
2023-01-12 16:00:39 +01:00
"<span style=\"color:red\">Ajout d'étapes à la fin</span>"
2022-12-29 17:27:20 +01:00
]
},
{
"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",
2023-01-12 16:00:39 +01:00
"execution_count": 1,
2022-12-29 17:27:20 +01:00
"metadata": {
"collapsed": false
},
"outputs": [],
"source": [
"# Author: Gael Varoquaux <gael dot varoquaux at normalesup dot org>\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",
2023-01-12 16:00:39 +01:00
"execution_count": 2,
2022-12-29 17:27:20 +01:00
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
2023-01-12 16:00:39 +01:00
"image/png": "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",
2022-12-29 17:27:20 +01:00
"text/plain": [
2023-01-12 16:00:39 +01:00
"<Figure size 720x216 with 4 Axes>"
2022-12-29 17:27:20 +01:00
]
},
2023-01-12 16:00:39 +01:00
"metadata": {
"needs_background": "light"
},
2022-12-29 17:27:20 +01:00
"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",
2023-01-12 16:00:39 +01:00
"execution_count": 3,
2022-12-29 17:27:20 +01:00
"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",
2023-01-12 16:00:39 +01:00
"execution_count": 4,
2022-12-29 17:27:20 +01:00
"metadata": {
"collapsed": false
},
"outputs": [
{
"data": {
2023-01-12 16:00:39 +01:00
"image/png": "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
2022-12-29 17:27:20 +01:00
"text/plain": [
2023-01-12 16:00:39 +01:00
"<Figure size 720x216 with 4 Axes>"
2022-12-29 17:27:20 +01:00
]
},
2023-01-12 16:00:39 +01:00
"metadata": {
"needs_background": "light"
},
2022-12-29 17:27:20 +01:00
"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",
2023-01-12 16:00:39 +01:00
"execution_count": 5,
2022-12-29 17:27:20 +01:00
"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 <confusion_matrix>` of the\n",
"true digit values and the predicted digit values.\n",
"\n"
]
},
{
"cell_type": "code",
2023-01-12 16:00:39 +01:00
"execution_count": 6,
2022-12-29 17:27:20 +01:00
"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": {
2023-01-12 16:00:39 +01:00
"image/png": "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
2022-12-29 17:27:20 +01:00
"text/plain": [
2023-01-12 16:00:39 +01:00
"<Figure size 432x288 with 2 Axes>"
2022-12-29 17:27:20 +01:00
]
},
2023-01-12 16:00:39 +01:00
"metadata": {
"needs_background": "light"
},
2022-12-29 17:27:20 +01:00
"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 <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",
2023-01-12 16:00:39 +01:00
"execution_count": 7,
2022-12-29 17:27:20 +01:00
"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",
")"
]
2023-01-12 16:00:39 +01:00
},
{
"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": [
"<Figure size 432x288 with 2 Axes>"
]
},
"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": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"metadata": {
"needs_background": "light"
},
"output_type": "display_data"
},
{
"data": {
"image/png": "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
"text/plain": [
"<Figure size 432x288 with 1 Axes>"
]
},
"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`"
]
2022-12-29 17:27:20 +01:00
}
],
"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",
2023-01-29 16:56:40 +01:00
"version": "3.9.4 (tags/v3.9.4:1f2e308, Apr 6 2021, 13:40:21) [MSC v.1928 64 bit (AMD64)]"
2022-12-29 17:27:20 +01:00
},
"vscode": {
"interpreter": {
2023-01-12 16:00:39 +01:00
"hash": "2ef431f6525756fa8a44688585fa332ef3b2e5fcfe8fe75df35bbf7028a8b511"
2022-12-29 17:27:20 +01:00
}
}
},
"nbformat": 4,
"nbformat_minor": 0
}