{"id":799,"date":"2024-02-29T14:49:11","date_gmt":"2024-02-29T13:49:11","guid":{"rendered":"https:\/\/ai.reboot-conseil.com\/?p=799"},"modified":"2024-02-29T14:49:12","modified_gmt":"2024-02-29T13:49:12","slug":"creez-des-modeles-de-machine-learning-avec-scikit-learn","status":"publish","type":"post","link":"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/02\/29\/creez-des-modeles-de-machine-learning-avec-scikit-learn\/","title":{"rendered":"Cr\u00e9ez des mod\u00e8les de Machine Learning avec scikit-learn"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Dans mon <a href=\"https:\/\/ai.reboot-conseil.com\/index.php\/2024\/01\/25\/retour-aux-fondamentaux-le-machine-learning\/\" data-type=\"link\" data-id=\"https:\/\/ai.reboot-conseil.com\/index.php\/2024\/01\/25\/retour-aux-fondamentaux-le-machine-learning\/\" target=\"_blank\" rel=\"noreferrer noopener\">article pr\u00e9c\u00e9dent<\/a>, j&rsquo;avais abord\u00e9 les fondamentaux du Machine Learning , les bases de cette discipline pour cr\u00e9er des mod\u00e8les d&rsquo;IA. Aujourd&rsquo;hui, je veux vous montrer comment cr\u00e9er ces mod\u00e8les avec une des librairies les plus utilis\u00e9es pour faire du Machine Learning, <a href=\"https:\/\/scikit-learn.org\/stable\/\" data-type=\"link\" data-id=\"https:\/\/scikit-learn.org\/stable\/\">scikit-learn<\/a>. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Pr\u00e9sentation de Scikit-Learn et son \u00e9cosyst\u00e8me<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Scikit-Learn est une librairie libre et open-source d\u00e9velopp\u00e9e en Python qui permet de cr\u00e9er et d&rsquo;entra\u00eener diff\u00e9rents mod\u00e8les de Machine Learning. La librairie s&rsquo;inclut dans l&rsquo;\u00e9cosyst\u00e8me des librairies comme <a href=\"https:\/\/pandas.pydata.org\/\">pandas<\/a>, <a href=\"https:\/\/numpy.org\/\">numpy<\/a> ou <a href=\"https:\/\/scipy.org\/\">scipy<\/a> qui sont utilis\u00e9es pour faire de la manipulation de donn\u00e9es, des calculs, de l&rsquo;analyse statistique, probabiliste, etc&#8230; Chacune de ces librairies m\u00e9riterait qu&rsquo;on les introduise un peu plus longuement, mais je vais me contenter d&rsquo;expliquer ce que j&rsquo;en utilise. Peut-\u00eatre que pandas, numpy et scipy feront l&rsquo;objet d&rsquo;un prochain article&#8230;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Scikit-Learn est maintenu par le <a href=\"https:\/\/scikit-learn.fondation-inria.fr\/home\/\">scikit-learn consortium<\/a> centr\u00e9 autour de l&rsquo;Inria et de plein d&rsquo;acteurs du monde de l&rsquo;IA comme Nvidia ou Hugging Face. Elle offre tout un ensemble d&rsquo;outils pour cr\u00e9er des mod\u00e8les et mesurer leurs performances. Pour les pr\u00e9senter, je vais passer par l&rsquo;exemple, o\u00f9 on va commencer par cr\u00e9er un mod\u00e8le simple que nous pourrons l&rsquo;am\u00e9liorer dans de futurs articles. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Le dataset \u00ab\u00a0Adult Census Income\u00a0\u00bb<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Avant de vouloir cr\u00e9er un mod\u00e8le, il faut d&rsquo;abord charger des donn\u00e9es et savoir quel probl\u00e8me on veut r\u00e9soudre. J&rsquo;ai choisi de prendre, pour l&rsquo;exemple, le dataset \u00ab\u00a0<a href=\"https:\/\/www.kaggle.com\/datasets\/uciml\/adult-census-income\">Adult Census Income<\/a>\u00a0\u00bb qui est un \u00e9chantillon du census am\u00e9ricain de 1990. C&rsquo;est un dataset connu dans le monde du Machine Learning, il a \u00e9t\u00e9 utilis\u00e9 dans des recherches sur le sujet. Avant de poursuivre, je vous invite \u00e0 vous renseigner sur ce qu&rsquo;est le census am\u00e9ricain, et sur le contenu du dataset.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L&rsquo;objectif de ce dataset est de deviner la cat\u00e9gorie de salaire d&rsquo;une personne en fonction des donn\u00e9es recens\u00e9es (cat\u00e9gorie sociale, niveau d&rsquo;\u00e9ducation, son \u00e2ge, etc&#8230;). Le dataset ne connait que 2 niveaux de salaires : \u00ab\u00a0plus de $50K\u00a0\u00bb et \u00ab\u00a0$50K ou moins\u00a0\u00bb.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pour charger le dataset et pouvoir ensuite le manipuler, nous allons devoir utiliser <code>pandas <\/code>: <\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img decoding=\"async\" width=\"493\" height=\"92\" src=\"https:\/\/ai.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/image-13.png\" alt=\"\" class=\"wp-image-846\" srcset=\"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/image-13.png 493w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/image-13-300x56.png 300w\" sizes=\"(max-width: 493px) 100vw, 493px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Ici, on importe la librairie <code>pandas<\/code>, et on utilise la fonction <code><a href=\"https:\/\/pandas.pydata.org\/docs\/reference\/api\/pandas.read_csv.html\" data-type=\"link\" data-id=\"https:\/\/pandas.pydata.org\/docs\/reference\/api\/pandas.read_csv.html\">read_csv<\/a><\/code> pour lire les donn\u00e9es et les stocker dans la variable <code>df<\/code>. <code>df<\/code>, c&rsquo;est l\u2019abr\u00e9viation de <a href=\"https:\/\/pandas.pydata.org\/docs\/reference\/api\/pandas.DataFrame.html\">DataFrame<\/a>, ce qui est une structure qui permet de stocker et de manipuler des donn\u00e9es sous forme de tableau, des donn\u00e9es tabulaires. Regardons un peu ce qu&rsquo;il contient :<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img decoding=\"async\" width=\"124\" height=\"36\" src=\"https:\/\/ai.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/image-14.png\" alt=\"\" class=\"wp-image-848\"\/><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img fetchpriority=\"high\" decoding=\"async\" width=\"1024\" height=\"123\" src=\"https:\/\/ai.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/image-28-1024x123.png\" alt=\"\" class=\"wp-image-870\" srcset=\"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/image-28-1024x123.png 1024w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/image-28-300x36.png 300w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/image-28-768x92.png 768w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/image-28.png 1515w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">La fonction <code><a href=\"https:\/\/pandas.pydata.org\/docs\/reference\/api\/pandas.DataFrame.head.html\">head<\/a> <\/code>permet d&rsquo;afficher les 5 premi\u00e8res lignes du dataframe. On distingue deux types de variables, des variables qualitatives, qui indiquent une cat\u00e9gorie (par exemple sex, education, native.country, etc&#8230;) et des variables quantitatives, qui indiquent des quantit\u00e9s (par exemple capital.loss, hours.per.week, age).<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Les variables quantitatives, de par leur nature, sont n\u00e9cessairement repr\u00e9sent\u00e9es par des nombres. Mais toutes les variables num\u00e9riques pr\u00e9sentes dans un dataset ne sont pas n\u00e9cessairement quantitatives. Par exemple, ici \u00ab\u00a0education.num\u00a0\u00bb contient un nombre qui correspond au niveau d&rsquo;\u00e9ducation qui est une variable qualitative. Elle permet juste d&rsquo;ordonner les niveaux entre eux.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Choisir notre algorithme de ML<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Maintenant qu&rsquo;on a nos donn\u00e9es, on va devoir choisir notre algorithme. Il faut alors d\u00e9terminer quel type de probl\u00e8me on r\u00e9sout, une classification ou une r\u00e9gression ?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Un algorithme de classification permet de pr\u00e9dire une variable qualitative, de classer, ranger dans des petites bo\u00eetes, nos donn\u00e9es en un nombre fini de classes. \u00c0 contrario, un algorithme de r\u00e9gression aura pour but de pr\u00e9dire une variable quantitative. Le r\u00e9sultat sera alors un nombre qui ne sera pas n\u00e9cessairement born\u00e9 et qui pourra \u00eatre aussi pr\u00e9cis que l&rsquo;on souhaite.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ici, on veut pr\u00e9dire si le salaire de la personne est au dessus ou en dessous de $50K, on a donc 2 cat\u00e9gories possibles, c&rsquo;est donc un probl\u00e8me de classification.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il existe plein de types d&rsquo;algorithmes de classification, qui fonctionnent de mani\u00e8re diff\u00e9rente, mais pour ce premier mod\u00e8le, nous allons entrainer un arbre de d\u00e9cision. <\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"790\" height=\"789\" src=\"https:\/\/ai.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/image-16.png\" alt=\"\" class=\"wp-image-853\" style=\"width:315px\" srcset=\"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/image-16.png 790w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/image-16-300x300.png 300w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/image-16-150x150.png 150w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/image-16-768x767.png 768w\" sizes=\"(max-width: 790px) 100vw, 790px\" \/><figcaption class=\"wp-element-caption\">Arbre de d\u00e9cision sur le dataset <a href=\"https:\/\/www.kaggle.com\/datasets\/uciml\/iris\" data-type=\"link\" data-id=\"https:\/\/www.kaggle.com\/datasets\/uciml\/iris\">Iris<\/a><\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Le principe de l&rsquo;arbre de d\u00e9cision est de construire, pendant l&rsquo;entrainement, un arbre avec \u00e0 chaque n\u0153ud, une condition. Si la condition est valide, alors on passe au n\u0153ud qui correspond, sinon, on passe \u00e0 l&rsquo;autre. \u00c0 la fin de chaque chemin de l&rsquo;arbre, il y a une cat\u00e9gorie qui est la valeur qui sera renvoy\u00e9e si l&rsquo;\u00e9chantillon de donn\u00e9es a suivi ce chemin.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">L&rsquo;impl\u00e9mentation avec scikit-learn<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Bien assez avec les explications, passons au code ! D&rsquo;abord, il faut s\u00e9parer les donn\u00e9es de la cible. Pour des raisons d&rsquo;impl\u00e9mentations, les arbres de d\u00e9cisions de <code>scikit-learn <\/code>ne supportent que les valeurs num\u00e9riques. Nous allons donc ne prendre que les colonnes qui ont des nombres.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"851\" height=\"141\" src=\"https:\/\/ai.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/image-17.png\" alt=\"\" class=\"wp-image-855\" srcset=\"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/image-17.png 851w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/image-17-300x50.png 300w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/image-17-768x127.png 768w\" sizes=\"(max-width: 851px) 100vw, 851px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Gr\u00e2ce \u00e0 pandas, il nous suffit de mettre le nom des colonnes que l&rsquo;on veut r\u00e9cup\u00e9rer entre crochets dans le dataframe et on a r\u00e9cup\u00e9r\u00e9 les donn\u00e9es que l&rsquo;on souhaitait. Maintenant que nous avons nos donn\u00e9es et notre cible, il faut qu&rsquo;on les s\u00e9pare en jeu d&rsquo;entra\u00eenement et de validation. Pour cela, on va utiliser la fonction <code><a href=\"https:\/\/scikit-learn.org\/stable\/modules\/generated\/sklearn.model_selection.train_test_split.html#sklearn.model_selection.train_test_split\">train_test_split<\/a><\/code> qui va faire cette s\u00e9paration pour nous.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"998\" height=\"61\" src=\"https:\/\/ai.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/image-19.png\" alt=\"\" class=\"wp-image-857\" srcset=\"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/image-19.png 998w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/image-19-300x18.png 300w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/image-19-768x47.png 768w\" sizes=\"(max-width: 998px) 100vw, 998px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Cette fonction prend au moins 2 param\u00e8tres, les donn\u00e9es et la cible, et il renvoie les donn\u00e9es et les cibles s\u00e9par\u00e9es en 2 jeux. J&rsquo;ai utilis\u00e9 des param\u00e8tres suppl\u00e9mentaires qui me permettent de mieux contr\u00f4ler la s\u00e9paration. <code>test_size<\/code> permet de d\u00e9finir la proportion des donn\u00e9es de test. Ici, je l&rsquo;ai mise \u00e0 30 %. <code>random_state<\/code> permet de choisir la seed de la s\u00e9paration al\u00e9atoire. La fixer \u00e0 0 me permet de m&rsquo;assurer que mes jeux de donn\u00e9es d&rsquo;entra\u00eenement et de test auront toujours les m\u00eames donn\u00e9es.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Maintenant cr\u00e9ons notre mod\u00e8le. Pour cela, nous allons utiliser la classe <code><a href=\"https:\/\/scikit-learn.org\/stable\/modules\/generated\/sklearn.tree.DecisionTreeClassifier.html#sklearn.tree.DecisionTreeClassifier\">DecisionTreeClassifier<\/a><\/code>. Cette classe nous permet de cr\u00e9er un arbre de d\u00e9cision qui va pouvoir classifier les donn\u00e9es qu&rsquo;on lui passe.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"440\" height=\"96\" src=\"https:\/\/ai.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/image-23.png\" alt=\"\" class=\"wp-image-864\" srcset=\"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/image-23.png 440w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/image-23-300x65.png 300w\" sizes=\"(max-width: 440px) 100vw, 440px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Ce code cr\u00e9e le mod\u00e8le et le param\u00e8tre <code>max_depth<\/code>, permet de contr\u00f4ler la profondeur maximum de l&rsquo;arbre : il y aura 3 niveaux de conditions maximum. La m\u00e9thode <code>fit<\/code> permet de l&rsquo;entra\u00eener avec nos donn\u00e9es d&rsquo;entra\u00eenement. Cette m\u00e9thode est commune \u00e0 tous les mod\u00e8les de <code>scikit-learn<\/code>. Cela permet de standardiser l&rsquo;API des mod\u00e8les.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">On peut ensuite mesurer les performances du mod\u00e8le cr\u00e9\u00e9 avec la m\u00e9thode <code>score<\/code>.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"329\" height=\"37\" src=\"https:\/\/ai.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/image-21.png\" alt=\"\" class=\"wp-image-862\" srcset=\"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/image-21.png 329w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/image-21-300x34.png 300w\" sizes=\"(max-width: 329px) 100vw, 329px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"171\" height=\"29\" src=\"https:\/\/ai.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/image-24.png\" alt=\"\" class=\"wp-image-865\"\/><figcaption class=\"wp-element-caption\">Exactitude du mod\u00e8le<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Donc, on peut voir que le score se mesure \u00e0 l&rsquo;aide du jeu de test, et on voit que notre mod\u00e8le a une exactitude de 80 %. C&rsquo;est un mod\u00e8le correct, mais il est am\u00e9liorable. \u00c0 noter qu&rsquo;il existe \u00e9norm\u00e9ment de m\u00e9triques de score diff\u00e9rentes et qui varient en fonction du type de probl\u00e8me. C&rsquo;est un vaste sujet, mais si vous souhaitez commencer \u00e0 l&rsquo;aborder, je vous conseille de jeter un \u0153il \u00e0 la documentation de <code><a href=\"https:\/\/scikit-learn.org\/stable\/modules\/classes.html#sklearn-metrics-metrics\">sklearn.metrics<\/a><\/code>. Cela vous permettra de voir quelles sont ces m\u00e9triques et comment elles fonctionnent. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Si on veut voir l&rsquo;arbre de d\u00e9cision g\u00e9n\u00e9r\u00e9, on peut utiliser la fonction <code><a href=\"https:\/\/scikit-learn.org\/stable\/modules\/generated\/sklearn.tree.plot_tree.html#sklearn.tree.plot_tree\">plot_tree<\/a> <\/code>pour afficher l&rsquo;arbre. On aura besoin de la librairie <code>matplotlib <\/code>pour l&rsquo;afficher correctement.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"340\" height=\"114\" src=\"https:\/\/ai.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/image-25.png\" alt=\"\" class=\"wp-image-866\" srcset=\"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/image-25.png 340w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/image-25-300x101.png 300w\" sizes=\"(max-width: 340px) 100vw, 340px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"515\" height=\"389\" src=\"https:\/\/ai.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/image-27.png\" alt=\"\" class=\"wp-image-868\" style=\"width:698px;height:auto\" srcset=\"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/image-27.png 515w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/image-27-300x227.png 300w\" sizes=\"(max-width: 515px) 100vw, 515px\" \/><figcaption class=\"wp-element-caption\">Arbre de d\u00e9cision g\u00e9n\u00e9r\u00e9<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Sur ce diagramme, vous pouvez voir les conditions et comment elles s&rsquo;enchainent. On a aussi l&rsquo;information de combien de donn\u00e9es dans le jeu d&rsquo;entrainement tombent dans ces cas, et de leur r\u00e9partition. La valeur <code>gini<\/code> correspond au score de puret\u00e9 de chaque s\u00e9paration. Le score de puret\u00e9 indique la qualit\u00e9 de la s\u00e9paration. Plus le score est haut, plus il s\u00e9pare de mani\u00e8re nette les 2 cibles de notre probl\u00e8me.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Et les variables qualitatives l\u00e0-dedans ?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Dans l&rsquo;exemple que j&rsquo;ai donn\u00e9 avant, on a pr\u00e9-s\u00e9lectionn\u00e9 les donn\u00e9es qui sont des nombres, mais comment peut-on inclure les autres ? On va avoir besoin de traiter les donn\u00e9es avant de les donner au mod\u00e8le. \u00c7a tombe bien, <code>scikit-learn<\/code> fournit un ensemble de classes et de fonctions qui permettent de s\u00e9lectionner et de pr\u00e9traiter les donn\u00e9es.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Avant, il va falloir red\u00e9finir nos donn\u00e9es. On va reprendre le dataframe initial <code>df<\/code> et ce coup-ci, on va juste lui retirer la cible.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"394\" height=\"162\" src=\"https:\/\/ai.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/image-30.png\" alt=\"\" class=\"wp-image-882\" srcset=\"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/image-30.png 394w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/image-30-300x123.png 300w\" sizes=\"(max-width: 394px) 100vw, 394px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">La fonction <code><a href=\"https:\/\/pandas.pydata.org\/docs\/reference\/api\/pandas.DataFrame.drop.html\">drop<\/a><\/code> permet de retirer des colonnes du dataframe. Il ne modifie pas le dataframe initial, mais il retourne la version sans les colonnes indiqu\u00e9es par le param\u00e8tre <code>columns<\/code>. Ensuite, il va falloir qu&rsquo;on d\u00e9tecte les colonnes non num\u00e9riques. Pour cela, on va utiliser la fonction <code><a href=\"https:\/\/scikit-learn.org\/stable\/modules\/generated\/sklearn.compose.make_column_selector.html#sklearn.compose.make_column_selector\">make_column_selector<\/a><\/code>.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"517\" height=\"96\" src=\"https:\/\/ai.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/image-31.png\" alt=\"\" class=\"wp-image-883\" srcset=\"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/image-31.png 517w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/image-31-300x56.png 300w\" sizes=\"(max-width: 517px) 100vw, 517px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Cette fonction est un peu particuli\u00e8re, car elle prend un param\u00e8tre <code>dtype_include<\/code>, qui correspond aux types de param\u00e8tres qu&rsquo;elle peut prendre et elle nous retourne une fonction qui va prendre en param\u00e8tre un dataframe. Ici, on lui dit de nous retourner les colonnes avec un type <code>object <\/code>qui correspond aux chaines de caract\u00e8res. Une liste des dtypes (qui est l\u2019abr\u00e9viation de data types) est disponible sur la <a href=\"https:\/\/pandas.pydata.org\/docs\/user_guide\/basics.html#basics-dtypes\">documentation de <code>pandas<\/code><\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">On a ensuite appliqu\u00e9 le s\u00e9lecteur sur notre dataframe qui a extrait le nom des colonnes de type <code>object<\/code>. Voici ce que contient la variable <code>cat_columns<\/code><\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"174\" height=\"182\" src=\"https:\/\/ai.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/image-32.png\" alt=\"\" class=\"wp-image-884\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Maintenant qu&rsquo;on a fait \u00e7a, on va pouvoir passer \u00e0 la prochaine \u00e9tape : cr\u00e9er un pr\u00e9-processeur. Le pr\u00e9-processeur va nous permettre de transformer nos donn\u00e9es avant de les passer au mod\u00e8le. Pour cela, on va utiliser 2 classes : <a href=\"https:\/\/scikit-learn.org\/stable\/modules\/generated\/sklearn.preprocessing.OrdinalEncoder.html#sklearn.preprocessing.OrdinalEncoder\"><code>OrdinalEncoder<\/code><\/a>, qui va permettre de convertir nos chaines de caract\u00e8res en nombres, en leur assignant une valeur entre 1 et le nombre de chaines de caract\u00e8res diff\u00e9rentes dans l&rsquo;\u00e9chantillon et <code><a href=\"https:\/\/scikit-learn.org\/stable\/modules\/generated\/sklearn.compose.ColumnTransformer.html#sklearn.compose.ColumnTransformer\">ColumnTransformer<\/a><\/code>, qui va nous permettre de traiter diff\u00e9remment les colonnes de type <code>object <\/code>et les autres.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"891\" height=\"112\" src=\"https:\/\/ai.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/image-34.png\" alt=\"\" class=\"wp-image-886\" srcset=\"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/image-34.png 891w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/image-34-300x38.png 300w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/image-34-768x97.png 768w\" sizes=\"(max-width: 891px) 100vw, 891px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">D\u00e9cryptons un peu ce pr\u00e9processeur : le <code>ColumnTransformer <\/code>prend en param\u00e8tre une liste de tuples. Chaque tuple est compos\u00e9 de 3 \u00e9l\u00e9ments : le nom de l&rsquo;\u00e9tape (ce qui est utile quand on veut visualiser le pr\u00e9-processeur), le traitement qu&rsquo;on veut effectuer, et la liste des colonnes qui sont affect\u00e9es par ce pr\u00e9-processeur. Le param\u00e8tre <code>remainder<\/code>, indique ce que l&rsquo;on fait avec le reste des colonnes qui n&rsquo;ont pas \u00e9t\u00e9 transform\u00e9es. Ici, on indique qu&rsquo;on les laisse tels quels, on aurait pu les abandonner. <\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pour l&rsquo;<code>OrdinalEncoder<\/code>, on lui dit que s&rsquo;il croise des valeurs inconnues, alors on leur attribue la valeur -1. C&rsquo;est parce que la s\u00e9paration des donn\u00e9es peut avoir s\u00e9par\u00e9 des classes rares dans notre dataset.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Maintenant qu&rsquo;on a notre pr\u00e9processeur, on va pouvoir l&rsquo;utiliser et le brancher \u00e0 notre mod\u00e8le avec la fonction <code><a href=\"https:\/\/scikit-learn.org\/stable\/modules\/generated\/sklearn.pipeline.make_pipeline.html#sklearn.pipeline.make_pipeline\">make_pipeline<\/a><\/code>. Cette fonction nous permet de chainer des \u00e9tapes dans lesquelles vont passer nos donn\u00e9es et de traiter le tout comme un mod\u00e8le. On pourra entra\u00eener et mesurer les performances de notre mod\u00e8le.<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"996\" height=\"172\" src=\"https:\/\/ai.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/image-35.png\" alt=\"\" class=\"wp-image-888\" srcset=\"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/image-35.png 996w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/image-35-300x52.png 300w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/image-35-768x133.png 768w\" sizes=\"(max-width: 996px) 100vw, 996px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">On s\u00e9pare de nouveau nos donn\u00e9es et on cr\u00e9e le pipeline, avec d&rsquo;abord le pr\u00e9processeur puis le mod\u00e8le. Puis on entra\u00eene le mod\u00e8le avec la m\u00e9thode <code>fit<\/code>, comme pr\u00e9c\u00e9demment. Si on regarde maintenant les performances de notre mod\u00e8le :<\/p>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"322\" height=\"37\" src=\"https:\/\/ai.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/image-36.png\" alt=\"\" class=\"wp-image-889\" srcset=\"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/image-36.png 322w, https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/image-36-300x34.png 300w\" sizes=\"(max-width: 322px) 100vw, 322px\" \/><\/figure>\n\n\n\n<figure class=\"wp-block-image aligncenter size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"168\" height=\"27\" src=\"https:\/\/ai.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/image-37.png\" alt=\"\" class=\"wp-image-890\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Le mod\u00e8le est mont\u00e9 \u00e0 une exactitude de presque 84 %, soit 4 points de plus que sans les donn\u00e9es non num\u00e9riques. <\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Nous avons vu comment cr\u00e9er notre premier mod\u00e8le, un arbre de d\u00e9cision dans notre cas, et comment mesurer ses performances. Nous avons vu comment cr\u00e9er un pipeline simple avec une \u00e9tape de pr\u00e9paration des donn\u00e9es. Mais nous avons laiss\u00e9 beaucoup de choses de c\u00f4t\u00e9 :<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Nous n&rsquo;avons pas pr\u00e9trait\u00e9 les donn\u00e9es. Il y a peut-\u00eatre des valeurs null ou aberrantes dans notre jeu de donn\u00e9es qui biaisent notre r\u00e9sultat.<\/li>\n\n\n\n<li>Nous n&rsquo;avons pas tent\u00e9 de chercher de meilleurs param\u00e8tres pour notre arbre.<\/li>\n\n\n\n<li>Que se passe-t-il si on choisit un autre algorithme de classification ?<\/li>\n\n\n\n<li>Est ce que l&rsquo;on peut pr\u00e9-traiter nos donn\u00e9es ?<\/li>\n\n\n\n<li>Comment s&rsquo;assurer que le split que nous avons eu n&rsquo;est pas biais\u00e9 ?<\/li>\n\n\n\n<li>Comment ensuite utiliser le mod\u00e8le ?<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Ce sont autant de questions qu&rsquo;il reste \u00e0 adresser et <code>scikit-learn<\/code> fournit des outils qui permettent de r\u00e9soudre ces probl\u00e8mes et que nous pourrons d\u00e9couvrir dans d&rsquo;autres articles.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Dans mon article pr\u00e9c\u00e9dent, j&rsquo;avais abord\u00e9 les fondamentaux du Machine Learning , les bases de cette discipline pour cr\u00e9er des mod\u00e8les d&rsquo;IA. Aujourd&rsquo;hui, je veux vous montrer comment cr\u00e9er ces mod\u00e8les avec une des librairies les plus utilis\u00e9es pour faire du Machine Learning, scikit-learn. Pr\u00e9sentation de Scikit-Learn et son \u00e9cosyst\u00e8me Scikit-Learn est une librairie libre et open-source d\u00e9velopp\u00e9e en Python qui permet de cr\u00e9er et d&rsquo;entra\u00eener diff\u00e9rents mod\u00e8les de Machine Learning. La librairie s&rsquo;inclut dans l&rsquo;\u00e9cosyst\u00e8me des librairies comme pandas, numpy ou scipy qui sont utilis\u00e9es pour faire de la manipulation de donn\u00e9es, des calculs, de l&rsquo;analyse statistique, probabiliste, etc&#8230; Chacune de ces librairies m\u00e9riterait qu&rsquo;on les introduise un peu plus longuement, mais je vais me contenter d&rsquo;expliquer ce que j&rsquo;en utilise. Peut-\u00eatre que pandas, numpy et scipy feront l&rsquo;objet d&rsquo;un prochain article&#8230; Scikit-Learn est maintenu par le scikit-learn consortium centr\u00e9 autour de l&rsquo;Inria et de plein d&rsquo;acteurs du monde de l&rsquo;IA comme Nvidia ou Hugging Face. Elle offre tout un ensemble d&rsquo;outils pour cr\u00e9er des mod\u00e8les et mesurer leurs performances. Pour les pr\u00e9senter, je vais passer par l&rsquo;exemple, o\u00f9 on va commencer par cr\u00e9er un mod\u00e8le simple que nous pourrons l&rsquo;am\u00e9liorer dans de futurs articles. Le dataset \u00ab\u00a0Adult Census Income\u00a0\u00bb Avant de vouloir cr\u00e9er un mod\u00e8le, il faut d&rsquo;abord charger des donn\u00e9es et savoir quel probl\u00e8me on veut r\u00e9soudre. J&rsquo;ai choisi de prendre, pour l&rsquo;exemple, le dataset \u00ab\u00a0Adult Census Income\u00a0\u00bb qui est un \u00e9chantillon du census am\u00e9ricain de 1990. C&rsquo;est un dataset connu dans le monde du Machine Learning, il a \u00e9t\u00e9 utilis\u00e9 dans des recherches sur le sujet. Avant de poursuivre, je vous invite \u00e0 vous renseigner sur ce qu&rsquo;est le census am\u00e9ricain, et sur le contenu du dataset. L&rsquo;objectif de ce dataset est de deviner la cat\u00e9gorie de salaire d&rsquo;une personne en fonction des donn\u00e9es recens\u00e9es (cat\u00e9gorie sociale, niveau d&rsquo;\u00e9ducation, son \u00e2ge, etc&#8230;). Le dataset ne connait que 2 niveaux de salaires : \u00ab\u00a0plus de $50K\u00a0\u00bb et \u00ab\u00a0$50K ou moins\u00a0\u00bb. Pour charger le dataset et pouvoir ensuite le manipuler, nous allons devoir utiliser pandas : Ici, on importe la librairie pandas, et on utilise la fonction read_csv pour lire les donn\u00e9es et les stocker dans la variable df. df, c&rsquo;est l\u2019abr\u00e9viation de DataFrame, ce qui est une structure qui permet de stocker et de manipuler des donn\u00e9es sous forme de tableau, des donn\u00e9es tabulaires. Regardons un peu ce qu&rsquo;il contient : La fonction head permet d&rsquo;afficher les 5 premi\u00e8res lignes du dataframe. On distingue deux types de variables, des variables qualitatives, qui indiquent une cat\u00e9gorie (par exemple sex, education, native.country, etc&#8230;) et des variables quantitatives, qui indiquent des quantit\u00e9s (par exemple capital.loss, hours.per.week, age). Les variables quantitatives, de par leur nature, sont n\u00e9cessairement repr\u00e9sent\u00e9es par des nombres. Mais toutes les variables num\u00e9riques pr\u00e9sentes dans un dataset ne sont pas n\u00e9cessairement quantitatives. Par exemple, ici \u00ab\u00a0education.num\u00a0\u00bb contient un nombre qui correspond au niveau d&rsquo;\u00e9ducation qui est une variable qualitative. Elle permet juste d&rsquo;ordonner les niveaux entre eux. Choisir notre algorithme de ML Maintenant qu&rsquo;on a nos donn\u00e9es, on va devoir choisir notre algorithme. Il faut alors d\u00e9terminer quel type de probl\u00e8me on r\u00e9sout, une classification ou une r\u00e9gression ? Un algorithme de classification permet de pr\u00e9dire une variable qualitative, de classer, ranger dans des petites bo\u00eetes, nos donn\u00e9es en un nombre fini de classes. \u00c0 contrario, un algorithme de r\u00e9gression aura pour but de pr\u00e9dire une variable quantitative. Le r\u00e9sultat sera alors un nombre qui ne sera pas n\u00e9cessairement born\u00e9 et qui pourra \u00eatre aussi pr\u00e9cis que l&rsquo;on souhaite. Ici, on veut pr\u00e9dire si le salaire de la personne est au dessus ou en dessous de $50K, on a donc 2 cat\u00e9gories possibles, c&rsquo;est donc un probl\u00e8me de classification. Il existe plein de types d&rsquo;algorithmes de classification, qui fonctionnent de mani\u00e8re diff\u00e9rente, mais pour ce premier mod\u00e8le, nous allons entrainer un arbre de d\u00e9cision. Le principe de l&rsquo;arbre de d\u00e9cision est de construire, pendant l&rsquo;entrainement, un arbre avec \u00e0 chaque n\u0153ud, une condition. Si la condition est valide, alors on passe au n\u0153ud qui correspond, sinon, on passe \u00e0 l&rsquo;autre. \u00c0 la fin de chaque chemin de l&rsquo;arbre, il y a une cat\u00e9gorie qui est la valeur qui sera renvoy\u00e9e si l&rsquo;\u00e9chantillon de donn\u00e9es a suivi ce chemin. L&rsquo;impl\u00e9mentation avec scikit-learn Bien assez avec les explications, passons au code ! D&rsquo;abord, il faut s\u00e9parer les donn\u00e9es de la cible. Pour des raisons d&rsquo;impl\u00e9mentations, les arbres de d\u00e9cisions de scikit-learn ne supportent que les valeurs num\u00e9riques. Nous allons donc ne prendre que les colonnes qui ont des nombres. Gr\u00e2ce \u00e0 pandas, il nous suffit de mettre le nom des colonnes que l&rsquo;on veut r\u00e9cup\u00e9rer entre crochets dans le dataframe et on a r\u00e9cup\u00e9r\u00e9 les donn\u00e9es que l&rsquo;on souhaitait. Maintenant que nous avons nos donn\u00e9es et notre cible, il faut qu&rsquo;on les s\u00e9pare en jeu d&rsquo;entra\u00eenement et de validation. Pour cela, on va utiliser la fonction train_test_split qui va faire cette s\u00e9paration pour nous. Cette fonction prend au moins 2 param\u00e8tres, les donn\u00e9es et la cible, et il renvoie les donn\u00e9es et les cibles s\u00e9par\u00e9es en 2 jeux. J&rsquo;ai utilis\u00e9 des param\u00e8tres suppl\u00e9mentaires qui me permettent de mieux contr\u00f4ler la s\u00e9paration. test_size permet de d\u00e9finir la proportion des donn\u00e9es de test. Ici, je l&rsquo;ai mise \u00e0 30 %. random_state permet de choisir la seed de la s\u00e9paration al\u00e9atoire. La fixer \u00e0 0 me permet de m&rsquo;assurer que mes jeux de donn\u00e9es d&rsquo;entra\u00eenement et de test auront toujours les m\u00eames donn\u00e9es. Maintenant cr\u00e9ons notre mod\u00e8le. Pour cela, nous allons utiliser la classe DecisionTreeClassifier. Cette classe nous permet de cr\u00e9er un arbre de d\u00e9cision qui va pouvoir classifier les donn\u00e9es qu&rsquo;on lui passe. Ce code cr\u00e9e le mod\u00e8le et le param\u00e8tre max_depth, permet de contr\u00f4ler la profondeur maximum de l&rsquo;arbre : il y aura 3 niveaux de conditions maximum. La m\u00e9thode fit permet de l&rsquo;entra\u00eener avec nos donn\u00e9es d&rsquo;entra\u00eenement. Cette m\u00e9thode est commune \u00e0 tous les mod\u00e8les de scikit-learn. Cela permet de standardiser l&rsquo;API des mod\u00e8les. On peut ensuite mesurer les performances du mod\u00e8le cr\u00e9\u00e9 avec la m\u00e9thode score. Donc, on<\/p>\n","protected":false},"author":4,"featured_media":894,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[40],"tags":[7,37,65],"class_list":["post-799","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-tutoriels","tag-ia","tag-machine-learning","tag-scikit-learn"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.7 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Cr\u00e9ez des mod\u00e8les de Machine Learning avec scikit-learn -<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/02\/29\/creez-des-modeles-de-machine-learning-avec-scikit-learn\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Cr\u00e9ez des mod\u00e8les de Machine Learning avec scikit-learn -\" \/>\n<meta property=\"og:description\" content=\"Dans mon article pr\u00e9c\u00e9dent, j&rsquo;avais abord\u00e9 les fondamentaux du Machine Learning , les bases de cette discipline pour cr\u00e9er des mod\u00e8les d&rsquo;IA. Aujourd&rsquo;hui, je veux vous montrer comment cr\u00e9er ces mod\u00e8les avec une des librairies les plus utilis\u00e9es pour faire du Machine Learning, scikit-learn. Pr\u00e9sentation de Scikit-Learn et son \u00e9cosyst\u00e8me Scikit-Learn est une librairie libre et open-source d\u00e9velopp\u00e9e en Python qui permet de cr\u00e9er et d&rsquo;entra\u00eener diff\u00e9rents mod\u00e8les de Machine Learning. La librairie s&rsquo;inclut dans l&rsquo;\u00e9cosyst\u00e8me des librairies comme pandas, numpy ou scipy qui sont utilis\u00e9es pour faire de la manipulation de donn\u00e9es, des calculs, de l&rsquo;analyse statistique, probabiliste, etc&#8230; Chacune de ces librairies m\u00e9riterait qu&rsquo;on les introduise un peu plus longuement, mais je vais me contenter d&rsquo;expliquer ce que j&rsquo;en utilise. Peut-\u00eatre que pandas, numpy et scipy feront l&rsquo;objet d&rsquo;un prochain article&#8230; Scikit-Learn est maintenu par le scikit-learn consortium centr\u00e9 autour de l&rsquo;Inria et de plein d&rsquo;acteurs du monde de l&rsquo;IA comme Nvidia ou Hugging Face. Elle offre tout un ensemble d&rsquo;outils pour cr\u00e9er des mod\u00e8les et mesurer leurs performances. Pour les pr\u00e9senter, je vais passer par l&rsquo;exemple, o\u00f9 on va commencer par cr\u00e9er un mod\u00e8le simple que nous pourrons l&rsquo;am\u00e9liorer dans de futurs articles. Le dataset \u00ab\u00a0Adult Census Income\u00a0\u00bb Avant de vouloir cr\u00e9er un mod\u00e8le, il faut d&rsquo;abord charger des donn\u00e9es et savoir quel probl\u00e8me on veut r\u00e9soudre. J&rsquo;ai choisi de prendre, pour l&rsquo;exemple, le dataset \u00ab\u00a0Adult Census Income\u00a0\u00bb qui est un \u00e9chantillon du census am\u00e9ricain de 1990. C&rsquo;est un dataset connu dans le monde du Machine Learning, il a \u00e9t\u00e9 utilis\u00e9 dans des recherches sur le sujet. Avant de poursuivre, je vous invite \u00e0 vous renseigner sur ce qu&rsquo;est le census am\u00e9ricain, et sur le contenu du dataset. L&rsquo;objectif de ce dataset est de deviner la cat\u00e9gorie de salaire d&rsquo;une personne en fonction des donn\u00e9es recens\u00e9es (cat\u00e9gorie sociale, niveau d&rsquo;\u00e9ducation, son \u00e2ge, etc&#8230;). Le dataset ne connait que 2 niveaux de salaires : \u00ab\u00a0plus de $50K\u00a0\u00bb et \u00ab\u00a0$50K ou moins\u00a0\u00bb. Pour charger le dataset et pouvoir ensuite le manipuler, nous allons devoir utiliser pandas : Ici, on importe la librairie pandas, et on utilise la fonction read_csv pour lire les donn\u00e9es et les stocker dans la variable df. df, c&rsquo;est l\u2019abr\u00e9viation de DataFrame, ce qui est une structure qui permet de stocker et de manipuler des donn\u00e9es sous forme de tableau, des donn\u00e9es tabulaires. Regardons un peu ce qu&rsquo;il contient : La fonction head permet d&rsquo;afficher les 5 premi\u00e8res lignes du dataframe. On distingue deux types de variables, des variables qualitatives, qui indiquent une cat\u00e9gorie (par exemple sex, education, native.country, etc&#8230;) et des variables quantitatives, qui indiquent des quantit\u00e9s (par exemple capital.loss, hours.per.week, age). Les variables quantitatives, de par leur nature, sont n\u00e9cessairement repr\u00e9sent\u00e9es par des nombres. Mais toutes les variables num\u00e9riques pr\u00e9sentes dans un dataset ne sont pas n\u00e9cessairement quantitatives. Par exemple, ici \u00ab\u00a0education.num\u00a0\u00bb contient un nombre qui correspond au niveau d&rsquo;\u00e9ducation qui est une variable qualitative. Elle permet juste d&rsquo;ordonner les niveaux entre eux. Choisir notre algorithme de ML Maintenant qu&rsquo;on a nos donn\u00e9es, on va devoir choisir notre algorithme. Il faut alors d\u00e9terminer quel type de probl\u00e8me on r\u00e9sout, une classification ou une r\u00e9gression ? Un algorithme de classification permet de pr\u00e9dire une variable qualitative, de classer, ranger dans des petites bo\u00eetes, nos donn\u00e9es en un nombre fini de classes. \u00c0 contrario, un algorithme de r\u00e9gression aura pour but de pr\u00e9dire une variable quantitative. Le r\u00e9sultat sera alors un nombre qui ne sera pas n\u00e9cessairement born\u00e9 et qui pourra \u00eatre aussi pr\u00e9cis que l&rsquo;on souhaite. Ici, on veut pr\u00e9dire si le salaire de la personne est au dessus ou en dessous de $50K, on a donc 2 cat\u00e9gories possibles, c&rsquo;est donc un probl\u00e8me de classification. Il existe plein de types d&rsquo;algorithmes de classification, qui fonctionnent de mani\u00e8re diff\u00e9rente, mais pour ce premier mod\u00e8le, nous allons entrainer un arbre de d\u00e9cision. Le principe de l&rsquo;arbre de d\u00e9cision est de construire, pendant l&rsquo;entrainement, un arbre avec \u00e0 chaque n\u0153ud, une condition. Si la condition est valide, alors on passe au n\u0153ud qui correspond, sinon, on passe \u00e0 l&rsquo;autre. \u00c0 la fin de chaque chemin de l&rsquo;arbre, il y a une cat\u00e9gorie qui est la valeur qui sera renvoy\u00e9e si l&rsquo;\u00e9chantillon de donn\u00e9es a suivi ce chemin. L&rsquo;impl\u00e9mentation avec scikit-learn Bien assez avec les explications, passons au code ! D&rsquo;abord, il faut s\u00e9parer les donn\u00e9es de la cible. Pour des raisons d&rsquo;impl\u00e9mentations, les arbres de d\u00e9cisions de scikit-learn ne supportent que les valeurs num\u00e9riques. Nous allons donc ne prendre que les colonnes qui ont des nombres. Gr\u00e2ce \u00e0 pandas, il nous suffit de mettre le nom des colonnes que l&rsquo;on veut r\u00e9cup\u00e9rer entre crochets dans le dataframe et on a r\u00e9cup\u00e9r\u00e9 les donn\u00e9es que l&rsquo;on souhaitait. Maintenant que nous avons nos donn\u00e9es et notre cible, il faut qu&rsquo;on les s\u00e9pare en jeu d&rsquo;entra\u00eenement et de validation. Pour cela, on va utiliser la fonction train_test_split qui va faire cette s\u00e9paration pour nous. Cette fonction prend au moins 2 param\u00e8tres, les donn\u00e9es et la cible, et il renvoie les donn\u00e9es et les cibles s\u00e9par\u00e9es en 2 jeux. J&rsquo;ai utilis\u00e9 des param\u00e8tres suppl\u00e9mentaires qui me permettent de mieux contr\u00f4ler la s\u00e9paration. test_size permet de d\u00e9finir la proportion des donn\u00e9es de test. Ici, je l&rsquo;ai mise \u00e0 30 %. random_state permet de choisir la seed de la s\u00e9paration al\u00e9atoire. La fixer \u00e0 0 me permet de m&rsquo;assurer que mes jeux de donn\u00e9es d&rsquo;entra\u00eenement et de test auront toujours les m\u00eames donn\u00e9es. Maintenant cr\u00e9ons notre mod\u00e8le. Pour cela, nous allons utiliser la classe DecisionTreeClassifier. Cette classe nous permet de cr\u00e9er un arbre de d\u00e9cision qui va pouvoir classifier les donn\u00e9es qu&rsquo;on lui passe. Ce code cr\u00e9e le mod\u00e8le et le param\u00e8tre max_depth, permet de contr\u00f4ler la profondeur maximum de l&rsquo;arbre : il y aura 3 niveaux de conditions maximum. La m\u00e9thode fit permet de l&rsquo;entra\u00eener avec nos donn\u00e9es d&rsquo;entra\u00eenement. Cette m\u00e9thode est commune \u00e0 tous les mod\u00e8les de scikit-learn. Cela permet de standardiser l&rsquo;API des mod\u00e8les. On peut ensuite mesurer les performances du mod\u00e8le cr\u00e9\u00e9 avec la m\u00e9thode score. Donc, on\" \/>\n<meta property=\"og:url\" content=\"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/02\/29\/creez-des-modeles-de-machine-learning-avec-scikit-learn\/\" \/>\n<meta property=\"article:published_time\" content=\"2024-02-29T13:49:11+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2024-02-29T13:49:12+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/Modele_ML_Scikit_learn.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1024\" \/>\n\t<meta property=\"og:image:height\" content=\"1024\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Yohann Jolain\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"\u00c9crit par\" \/>\n\t<meta name=\"twitter:data1\" content=\"Yohann Jolain\" \/>\n\t<meta name=\"twitter:label2\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data2\" content=\"10 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/02\/29\/creez-des-modeles-de-machine-learning-avec-scikit-learn\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/02\/29\/creez-des-modeles-de-machine-learning-avec-scikit-learn\/\"},\"author\":{\"name\":\"Yohann Jolain\",\"@id\":\"https:\/\/beta.reboot-conseil.com\/#\/schema\/person\/bacb74c31f0df7384807193ebe0a205d\"},\"headline\":\"Cr\u00e9ez des mod\u00e8les de Machine Learning avec scikit-learn\",\"datePublished\":\"2024-02-29T13:49:11+00:00\",\"dateModified\":\"2024-02-29T13:49:12+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/02\/29\/creez-des-modeles-de-machine-learning-avec-scikit-learn\/\"},\"wordCount\":2142,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/beta.reboot-conseil.com\/#organization\"},\"image\":{\"@id\":\"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/02\/29\/creez-des-modeles-de-machine-learning-avec-scikit-learn\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/Modele_ML_Scikit_learn.png\",\"keywords\":[\"IA\",\"Machine Learning\",\"scikit-learn\"],\"articleSection\":[\"Tutoriels\"],\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/02\/29\/creez-des-modeles-de-machine-learning-avec-scikit-learn\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/02\/29\/creez-des-modeles-de-machine-learning-avec-scikit-learn\/\",\"url\":\"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/02\/29\/creez-des-modeles-de-machine-learning-avec-scikit-learn\/\",\"name\":\"Cr\u00e9ez des mod\u00e8les de Machine Learning avec scikit-learn -\",\"isPartOf\":{\"@id\":\"https:\/\/beta.reboot-conseil.com\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/02\/29\/creez-des-modeles-de-machine-learning-avec-scikit-learn\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/02\/29\/creez-des-modeles-de-machine-learning-avec-scikit-learn\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/Modele_ML_Scikit_learn.png\",\"datePublished\":\"2024-02-29T13:49:11+00:00\",\"dateModified\":\"2024-02-29T13:49:12+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/02\/29\/creez-des-modeles-de-machine-learning-avec-scikit-learn\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/02\/29\/creez-des-modeles-de-machine-learning-avec-scikit-learn\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/02\/29\/creez-des-modeles-de-machine-learning-avec-scikit-learn\/#primaryimage\",\"url\":\"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/Modele_ML_Scikit_learn.png\",\"contentUrl\":\"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/Modele_ML_Scikit_learn.png\",\"width\":1024,\"height\":1024},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/02\/29\/creez-des-modeles-de-machine-learning-avec-scikit-learn\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Accueil\",\"item\":\"https:\/\/beta.reboot-conseil.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Cr\u00e9ez des mod\u00e8les de Machine Learning avec scikit-learn\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/beta.reboot-conseil.com\/#website\",\"url\":\"https:\/\/beta.reboot-conseil.com\/\",\"name\":\"AI Squad\",\"description\":\"Dans le doute, Reboot\",\"publisher\":{\"@id\":\"https:\/\/beta.reboot-conseil.com\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/beta.reboot-conseil.com\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"fr-FR\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/beta.reboot-conseil.com\/#organization\",\"name\":\"AI Squad By Reboot Conseil\",\"url\":\"https:\/\/beta.reboot-conseil.com\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/beta.reboot-conseil.com\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2023\/09\/cropped-cropped-Logo-IA-Squad-by-Reboot-Conseil-3.png\",\"contentUrl\":\"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2023\/09\/cropped-cropped-Logo-IA-Squad-by-Reboot-Conseil-3.png\",\"width\":500,\"height\":218,\"caption\":\"AI Squad By Reboot Conseil\"},\"image\":{\"@id\":\"https:\/\/beta.reboot-conseil.com\/#\/schema\/logo\/image\/\"}},{\"@type\":\"Person\",\"@id\":\"https:\/\/beta.reboot-conseil.com\/#\/schema\/person\/bacb74c31f0df7384807193ebe0a205d\",\"name\":\"Yohann Jolain\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"fr-FR\",\"@id\":\"https:\/\/beta.reboot-conseil.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/771bceb60c3835e74bae64ff0a958295632caea61088783f3e9a9e648705c500?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/771bceb60c3835e74bae64ff0a958295632caea61088783f3e9a9e648705c500?s=96&d=mm&r=g\",\"caption\":\"Yohann Jolain\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Cr\u00e9ez des mod\u00e8les de Machine Learning avec scikit-learn -","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/02\/29\/creez-des-modeles-de-machine-learning-avec-scikit-learn\/","og_locale":"fr_FR","og_type":"article","og_title":"Cr\u00e9ez des mod\u00e8les de Machine Learning avec scikit-learn -","og_description":"Dans mon article pr\u00e9c\u00e9dent, j&rsquo;avais abord\u00e9 les fondamentaux du Machine Learning , les bases de cette discipline pour cr\u00e9er des mod\u00e8les d&rsquo;IA. Aujourd&rsquo;hui, je veux vous montrer comment cr\u00e9er ces mod\u00e8les avec une des librairies les plus utilis\u00e9es pour faire du Machine Learning, scikit-learn. Pr\u00e9sentation de Scikit-Learn et son \u00e9cosyst\u00e8me Scikit-Learn est une librairie libre et open-source d\u00e9velopp\u00e9e en Python qui permet de cr\u00e9er et d&rsquo;entra\u00eener diff\u00e9rents mod\u00e8les de Machine Learning. La librairie s&rsquo;inclut dans l&rsquo;\u00e9cosyst\u00e8me des librairies comme pandas, numpy ou scipy qui sont utilis\u00e9es pour faire de la manipulation de donn\u00e9es, des calculs, de l&rsquo;analyse statistique, probabiliste, etc&#8230; Chacune de ces librairies m\u00e9riterait qu&rsquo;on les introduise un peu plus longuement, mais je vais me contenter d&rsquo;expliquer ce que j&rsquo;en utilise. Peut-\u00eatre que pandas, numpy et scipy feront l&rsquo;objet d&rsquo;un prochain article&#8230; Scikit-Learn est maintenu par le scikit-learn consortium centr\u00e9 autour de l&rsquo;Inria et de plein d&rsquo;acteurs du monde de l&rsquo;IA comme Nvidia ou Hugging Face. Elle offre tout un ensemble d&rsquo;outils pour cr\u00e9er des mod\u00e8les et mesurer leurs performances. Pour les pr\u00e9senter, je vais passer par l&rsquo;exemple, o\u00f9 on va commencer par cr\u00e9er un mod\u00e8le simple que nous pourrons l&rsquo;am\u00e9liorer dans de futurs articles. Le dataset \u00ab\u00a0Adult Census Income\u00a0\u00bb Avant de vouloir cr\u00e9er un mod\u00e8le, il faut d&rsquo;abord charger des donn\u00e9es et savoir quel probl\u00e8me on veut r\u00e9soudre. J&rsquo;ai choisi de prendre, pour l&rsquo;exemple, le dataset \u00ab\u00a0Adult Census Income\u00a0\u00bb qui est un \u00e9chantillon du census am\u00e9ricain de 1990. C&rsquo;est un dataset connu dans le monde du Machine Learning, il a \u00e9t\u00e9 utilis\u00e9 dans des recherches sur le sujet. Avant de poursuivre, je vous invite \u00e0 vous renseigner sur ce qu&rsquo;est le census am\u00e9ricain, et sur le contenu du dataset. L&rsquo;objectif de ce dataset est de deviner la cat\u00e9gorie de salaire d&rsquo;une personne en fonction des donn\u00e9es recens\u00e9es (cat\u00e9gorie sociale, niveau d&rsquo;\u00e9ducation, son \u00e2ge, etc&#8230;). Le dataset ne connait que 2 niveaux de salaires : \u00ab\u00a0plus de $50K\u00a0\u00bb et \u00ab\u00a0$50K ou moins\u00a0\u00bb. Pour charger le dataset et pouvoir ensuite le manipuler, nous allons devoir utiliser pandas : Ici, on importe la librairie pandas, et on utilise la fonction read_csv pour lire les donn\u00e9es et les stocker dans la variable df. df, c&rsquo;est l\u2019abr\u00e9viation de DataFrame, ce qui est une structure qui permet de stocker et de manipuler des donn\u00e9es sous forme de tableau, des donn\u00e9es tabulaires. Regardons un peu ce qu&rsquo;il contient : La fonction head permet d&rsquo;afficher les 5 premi\u00e8res lignes du dataframe. On distingue deux types de variables, des variables qualitatives, qui indiquent une cat\u00e9gorie (par exemple sex, education, native.country, etc&#8230;) et des variables quantitatives, qui indiquent des quantit\u00e9s (par exemple capital.loss, hours.per.week, age). Les variables quantitatives, de par leur nature, sont n\u00e9cessairement repr\u00e9sent\u00e9es par des nombres. Mais toutes les variables num\u00e9riques pr\u00e9sentes dans un dataset ne sont pas n\u00e9cessairement quantitatives. Par exemple, ici \u00ab\u00a0education.num\u00a0\u00bb contient un nombre qui correspond au niveau d&rsquo;\u00e9ducation qui est une variable qualitative. Elle permet juste d&rsquo;ordonner les niveaux entre eux. Choisir notre algorithme de ML Maintenant qu&rsquo;on a nos donn\u00e9es, on va devoir choisir notre algorithme. Il faut alors d\u00e9terminer quel type de probl\u00e8me on r\u00e9sout, une classification ou une r\u00e9gression ? Un algorithme de classification permet de pr\u00e9dire une variable qualitative, de classer, ranger dans des petites bo\u00eetes, nos donn\u00e9es en un nombre fini de classes. \u00c0 contrario, un algorithme de r\u00e9gression aura pour but de pr\u00e9dire une variable quantitative. Le r\u00e9sultat sera alors un nombre qui ne sera pas n\u00e9cessairement born\u00e9 et qui pourra \u00eatre aussi pr\u00e9cis que l&rsquo;on souhaite. Ici, on veut pr\u00e9dire si le salaire de la personne est au dessus ou en dessous de $50K, on a donc 2 cat\u00e9gories possibles, c&rsquo;est donc un probl\u00e8me de classification. Il existe plein de types d&rsquo;algorithmes de classification, qui fonctionnent de mani\u00e8re diff\u00e9rente, mais pour ce premier mod\u00e8le, nous allons entrainer un arbre de d\u00e9cision. Le principe de l&rsquo;arbre de d\u00e9cision est de construire, pendant l&rsquo;entrainement, un arbre avec \u00e0 chaque n\u0153ud, une condition. Si la condition est valide, alors on passe au n\u0153ud qui correspond, sinon, on passe \u00e0 l&rsquo;autre. \u00c0 la fin de chaque chemin de l&rsquo;arbre, il y a une cat\u00e9gorie qui est la valeur qui sera renvoy\u00e9e si l&rsquo;\u00e9chantillon de donn\u00e9es a suivi ce chemin. L&rsquo;impl\u00e9mentation avec scikit-learn Bien assez avec les explications, passons au code ! D&rsquo;abord, il faut s\u00e9parer les donn\u00e9es de la cible. Pour des raisons d&rsquo;impl\u00e9mentations, les arbres de d\u00e9cisions de scikit-learn ne supportent que les valeurs num\u00e9riques. Nous allons donc ne prendre que les colonnes qui ont des nombres. Gr\u00e2ce \u00e0 pandas, il nous suffit de mettre le nom des colonnes que l&rsquo;on veut r\u00e9cup\u00e9rer entre crochets dans le dataframe et on a r\u00e9cup\u00e9r\u00e9 les donn\u00e9es que l&rsquo;on souhaitait. Maintenant que nous avons nos donn\u00e9es et notre cible, il faut qu&rsquo;on les s\u00e9pare en jeu d&rsquo;entra\u00eenement et de validation. Pour cela, on va utiliser la fonction train_test_split qui va faire cette s\u00e9paration pour nous. Cette fonction prend au moins 2 param\u00e8tres, les donn\u00e9es et la cible, et il renvoie les donn\u00e9es et les cibles s\u00e9par\u00e9es en 2 jeux. J&rsquo;ai utilis\u00e9 des param\u00e8tres suppl\u00e9mentaires qui me permettent de mieux contr\u00f4ler la s\u00e9paration. test_size permet de d\u00e9finir la proportion des donn\u00e9es de test. Ici, je l&rsquo;ai mise \u00e0 30 %. random_state permet de choisir la seed de la s\u00e9paration al\u00e9atoire. La fixer \u00e0 0 me permet de m&rsquo;assurer que mes jeux de donn\u00e9es d&rsquo;entra\u00eenement et de test auront toujours les m\u00eames donn\u00e9es. Maintenant cr\u00e9ons notre mod\u00e8le. Pour cela, nous allons utiliser la classe DecisionTreeClassifier. Cette classe nous permet de cr\u00e9er un arbre de d\u00e9cision qui va pouvoir classifier les donn\u00e9es qu&rsquo;on lui passe. Ce code cr\u00e9e le mod\u00e8le et le param\u00e8tre max_depth, permet de contr\u00f4ler la profondeur maximum de l&rsquo;arbre : il y aura 3 niveaux de conditions maximum. La m\u00e9thode fit permet de l&rsquo;entra\u00eener avec nos donn\u00e9es d&rsquo;entra\u00eenement. Cette m\u00e9thode est commune \u00e0 tous les mod\u00e8les de scikit-learn. Cela permet de standardiser l&rsquo;API des mod\u00e8les. On peut ensuite mesurer les performances du mod\u00e8le cr\u00e9\u00e9 avec la m\u00e9thode score. Donc, on","og_url":"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/02\/29\/creez-des-modeles-de-machine-learning-avec-scikit-learn\/","article_published_time":"2024-02-29T13:49:11+00:00","article_modified_time":"2024-02-29T13:49:12+00:00","og_image":[{"width":1024,"height":1024,"url":"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/Modele_ML_Scikit_learn.png","type":"image\/png"}],"author":"Yohann Jolain","twitter_card":"summary_large_image","twitter_misc":{"\u00c9crit par":"Yohann Jolain","Dur\u00e9e de lecture estim\u00e9e":"10 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/02\/29\/creez-des-modeles-de-machine-learning-avec-scikit-learn\/#article","isPartOf":{"@id":"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/02\/29\/creez-des-modeles-de-machine-learning-avec-scikit-learn\/"},"author":{"name":"Yohann Jolain","@id":"https:\/\/beta.reboot-conseil.com\/#\/schema\/person\/bacb74c31f0df7384807193ebe0a205d"},"headline":"Cr\u00e9ez des mod\u00e8les de Machine Learning avec scikit-learn","datePublished":"2024-02-29T13:49:11+00:00","dateModified":"2024-02-29T13:49:12+00:00","mainEntityOfPage":{"@id":"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/02\/29\/creez-des-modeles-de-machine-learning-avec-scikit-learn\/"},"wordCount":2142,"commentCount":0,"publisher":{"@id":"https:\/\/beta.reboot-conseil.com\/#organization"},"image":{"@id":"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/02\/29\/creez-des-modeles-de-machine-learning-avec-scikit-learn\/#primaryimage"},"thumbnailUrl":"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/Modele_ML_Scikit_learn.png","keywords":["IA","Machine Learning","scikit-learn"],"articleSection":["Tutoriels"],"inLanguage":"fr-FR","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/beta.reboot-conseil.com\/index.php\/2024\/02\/29\/creez-des-modeles-de-machine-learning-avec-scikit-learn\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/02\/29\/creez-des-modeles-de-machine-learning-avec-scikit-learn\/","url":"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/02\/29\/creez-des-modeles-de-machine-learning-avec-scikit-learn\/","name":"Cr\u00e9ez des mod\u00e8les de Machine Learning avec scikit-learn -","isPartOf":{"@id":"https:\/\/beta.reboot-conseil.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/02\/29\/creez-des-modeles-de-machine-learning-avec-scikit-learn\/#primaryimage"},"image":{"@id":"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/02\/29\/creez-des-modeles-de-machine-learning-avec-scikit-learn\/#primaryimage"},"thumbnailUrl":"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/Modele_ML_Scikit_learn.png","datePublished":"2024-02-29T13:49:11+00:00","dateModified":"2024-02-29T13:49:12+00:00","breadcrumb":{"@id":"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/02\/29\/creez-des-modeles-de-machine-learning-avec-scikit-learn\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/beta.reboot-conseil.com\/index.php\/2024\/02\/29\/creez-des-modeles-de-machine-learning-avec-scikit-learn\/"]}]},{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/02\/29\/creez-des-modeles-de-machine-learning-avec-scikit-learn\/#primaryimage","url":"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/Modele_ML_Scikit_learn.png","contentUrl":"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2024\/02\/Modele_ML_Scikit_learn.png","width":1024,"height":1024},{"@type":"BreadcrumbList","@id":"https:\/\/beta.reboot-conseil.com\/index.php\/2024\/02\/29\/creez-des-modeles-de-machine-learning-avec-scikit-learn\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Accueil","item":"https:\/\/beta.reboot-conseil.com\/"},{"@type":"ListItem","position":2,"name":"Cr\u00e9ez des mod\u00e8les de Machine Learning avec scikit-learn"}]},{"@type":"WebSite","@id":"https:\/\/beta.reboot-conseil.com\/#website","url":"https:\/\/beta.reboot-conseil.com\/","name":"AI Squad","description":"Dans le doute, Reboot","publisher":{"@id":"https:\/\/beta.reboot-conseil.com\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/beta.reboot-conseil.com\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"fr-FR"},{"@type":"Organization","@id":"https:\/\/beta.reboot-conseil.com\/#organization","name":"AI Squad By Reboot Conseil","url":"https:\/\/beta.reboot-conseil.com\/","logo":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/beta.reboot-conseil.com\/#\/schema\/logo\/image\/","url":"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2023\/09\/cropped-cropped-Logo-IA-Squad-by-Reboot-Conseil-3.png","contentUrl":"https:\/\/beta.reboot-conseil.com\/wp-content\/uploads\/2023\/09\/cropped-cropped-Logo-IA-Squad-by-Reboot-Conseil-3.png","width":500,"height":218,"caption":"AI Squad By Reboot Conseil"},"image":{"@id":"https:\/\/beta.reboot-conseil.com\/#\/schema\/logo\/image\/"}},{"@type":"Person","@id":"https:\/\/beta.reboot-conseil.com\/#\/schema\/person\/bacb74c31f0df7384807193ebe0a205d","name":"Yohann Jolain","image":{"@type":"ImageObject","inLanguage":"fr-FR","@id":"https:\/\/beta.reboot-conseil.com\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/771bceb60c3835e74bae64ff0a958295632caea61088783f3e9a9e648705c500?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/771bceb60c3835e74bae64ff0a958295632caea61088783f3e9a9e648705c500?s=96&d=mm&r=g","caption":"Yohann Jolain"}}]}},"_links":{"self":[{"href":"https:\/\/beta.reboot-conseil.com\/index.php\/wp-json\/wp\/v2\/posts\/799","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/beta.reboot-conseil.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/beta.reboot-conseil.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/beta.reboot-conseil.com\/index.php\/wp-json\/wp\/v2\/users\/4"}],"replies":[{"embeddable":true,"href":"https:\/\/beta.reboot-conseil.com\/index.php\/wp-json\/wp\/v2\/comments?post=799"}],"version-history":[{"count":17,"href":"https:\/\/beta.reboot-conseil.com\/index.php\/wp-json\/wp\/v2\/posts\/799\/revisions"}],"predecessor-version":[{"id":893,"href":"https:\/\/beta.reboot-conseil.com\/index.php\/wp-json\/wp\/v2\/posts\/799\/revisions\/893"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/beta.reboot-conseil.com\/index.php\/wp-json\/wp\/v2\/media\/894"}],"wp:attachment":[{"href":"https:\/\/beta.reboot-conseil.com\/index.php\/wp-json\/wp\/v2\/media?parent=799"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/beta.reboot-conseil.com\/index.php\/wp-json\/wp\/v2\/categories?post=799"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/beta.reboot-conseil.com\/index.php\/wp-json\/wp\/v2\/tags?post=799"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}