Déploiement d`un modèle d`apprentissage automatique à l`aide de Flask

| | | | | | | | | | |

Pour les utiliser pour prédire de nouvelles données, nous devons les déployer sur Internet afin que le monde extérieur puisse les utiliser. Dans cet article, nous parlerons de la façon dont nous avons formé un modèle d`apprentissage automatique, créé une application Web dessus à l`aide de Flask.

Nous devons installer de nombreuses bibliothèques nécessaires qui seront utilisées dans ce modèle. Utilisez pip pour installer toutes les bibliothèques.

pip install pandas pip install numpy pip install sklearn 

Arbre de décision —
Arbre de décision — c`est un algorithme d`apprentissage automatique supervisé bien connu car il est facile à utiliser, élastique et flexible. J`ai implémenté l`algorithme sur un ensemble de données pour adultes à partir du référentiel d`apprentissage automatique de l`UCI.

Récupérer les données —
Vous pouvez récupérer l`ensemble de données par ce lien .

Obtenir l`ensemble de données n`est pas la fin. Nous devons prétraiter les données, ce qui signifie que nous devons effacer l`ensemble de données. Le nettoyage des ensembles de données implique différents types de processus tels que la suppression des valeurs manquantes, le remplissage des valeurs NA, etc.


# import dataset < / p>

importer pandas

importer numpy

de sklearn import prétraitement


df = pandas.read_csv ( `adult.csv` )

df.head ()

Sortie :

Prétraitement du jeu de données — ;
Il se compose de 14 attributs et d`une étiquette de classe indiquant si le revenu d`un individu est inférieur ou supérieur à 50 000 par an. Ces attributs vont de l`âge d`une personne, de l`étiquette de la classe ouvrière au statut relationnel et à la race à laquelle appartient la personne. Des informations sur tous les attributs peuvent être trouvées ici.

Tout d`abord, nous trouvons et supprimons toutes les valeurs manquantes ‚Äã‚Äãdes données. Nous avons remplacé les valeurs manquantes ‚Äã‚Äãpar la valeur de mode dans cette colonne. Il existe de nombreuses autres façons de remplacer les valeurs manquantes, mais celle-ci semble être la meilleure pour ce type d`ensemble de données.


df = df.drop ([ `fnlwgt` , `educational- num` ], axe = 1 )

col_names = df.columns


pour c dans col_names :

df = df.replace ( " ? " , numpy. NaN)

df = df. appliquer ( lambda x : x.fillna (x.value_counts (). index [ 0 ]))

L`algorithme de machine learning ne peut pas gérer les valeurs de données catégorielles. Il ne peut gérer que les valeurs numériques.
Pour adapter les données au modèle de prévision, nous devons convertir les valeurs catégorielles en valeurs numériques. Avant cela, nous évaluerons si des transformations sont nécessaires sur les colonnes catégorielles.

La discrétion — est un moyen courant de rendre les données catégorielles plus précises et significatives. Nous avons appliqué la discrétisation à la colonne marital_status où elles sont réduites aux seules valeurs mariées ou non mariées. Plus tard, nous appliquerons l`encodeur d`étiquette sur les colonnes de données restantes. En outre, il existe deux colonnes redondantes {' éducation ', ' education-num '} , nous avons donc supprimé l`un d`entre eux.


df.replace ([ `Divorcé` , `Marié- AF-conjoint` ,

` Marié-civ-conjoint` , ` Marié-conjoint-absent` ,

`Célibataire` , `Séparé` , `Veuf` ],

[ `divorcé` , `marié` , `marié` , `marié` ,

`pas marié` , `pas marié` , `pas marié` ], inplace = Vrai )


category_col = [ `workclass` , ` race` , `éducation` , `état-marital` , `profession` ,

`relation` , `sexe` , `native-country` , ` revenu` ]

labelEncoder = preprocessing.LabelEncoder ()


mapping_dict = {}

pour col in category_col :

df [col] = labelEncoder. fit_transform (df [col])


le_name_mapping = dict ( zip (labelEncoder.classes_,

labelEncoder. transform (labelEncoder.classes_)))


mapping_dict [col] = le_name_mapping

imprimer (mapping_dict)

Sortie :

{`workclass` : {` ? ` : 0, `Federal-gov` : 1, `Local-gov` : 2, `Never-worked` : 3, `Private` : 4, `Self-emp-inc` : 5, `Self-emp-not -inc` : 6, `State-gov` : 7,` Sans-payer ` : 8},` ra ce ` : {` Amer-Indian-Eskimo ` : 0,` Asian-Pac-Islander ` : 1,` Noir ` : 2,` Autre ` : 3,` Blanc ` : 4},` éducation ` : {` 10e ` : 0,` 11e ` : 1,` 12e ` : 2,` 1er-4e ` : 3,` 5e-6e` : 4, `7e-8e` : 5, `9e` : 6, `Assoc-acdm` : 7, `Assoc-voc` : 8, `Licence` : 9, `Doctorat` : 10,` HS-grad` : 11, `Master` : 12, `Preschool` : 13, `Prof-school` : 14, `Some-college` : 15}, `marital-status` : {` Divorced ` : 0,` Marié-AF-conjoint` : 1,` Marié-civ-conjoint` : 2,` Marié-conjoint-absent` : 3, `Célibataire` : 4,` Séparé` : 5,` Veuf` : 6}, ` Occupation `: {`? ` : 0,` Adm-clerical` : 1,` Armed-Forces` : 2, `Craft-repair` : 3, `Exec-managerial` : 4, `Farming-fishing` : 5, `Handlers-cleaners` : 6, `Machine-op-inspct` : 7, `Autre-service` : 8, `Priv-house-serv` : 9, `Prof-specialty` : 10, `Protective-serv` : 11, `Sales` : 12, `Tech-support` : 13, `Transport-moving` : 14} , `relationship` : {`Mari` : 0, `Hors famille` : 1, `Autre parent` : 2, `Propriétaire -child` : 3, `Unmarried` : 4, `Wife` : 5} , `gender` : { `Female` : 0, `Male` : 1}, `native-country` : {`? ` : 0, `Cambodge` : 1, `Canada` : 2, `Chine` : 3, `Colombie` : 4, `Cuba` : 5, `République dominicaine` : 6, `Équateur` : 7, `El -Salvador` : 8, `Angleterre` : 9, `France` : 10, `Allemagne` : 11, `Grèce` : 12, `Guatemala` : 13, `Haïti` : 14, `Hollande-Pays-Bas` : 15, `Honduras` : 16, `Hong` : 17, `Hongrie` : 18, `Inde` : 19, `Iran` : 20, `Irlande` : 21, `Italie` : 22, `Jamaïque` : 23, `Japon ` : 24, `Laos` : 25, `Mexique` : 26, `Nicaragua` : 27,` Outlying-US (Guam -USVI-etc) ` : 28,` Pérou ` : 29,` Philippines` : 30, ` Pologne` : 31, `Portugal` : 32, `Puerto-Rico` : 33, `Scotland` : 34, `South` : 35, `Taiwan` : 36, `Thailand` : 37, `Trinadad & amp; Tobago` : 38, `États-Unis` : 39, `Vietnam` : 40, `Yougos lavia` : 41}, `revenu` : { `50K` : 1}}


Montage du modèle — ;
Après le prétraitement, les données sont prêtes à être transférées vers l`algorithme d`apprentissage automatique. Ensuite, nous découpons les données en supprimant les étiquettes avec les attributs. Nous avons maintenant divisé l`ensemble de données en deux moitiés, une pour la formation et une pour les tests. Ceci est réalisé avec la fonction train_test_split () sklearn.


de sklearn. model_selection importer train_test_split

de sklearn.tree import DecisionTreeClassifier

de sklearn.metrics import precision_score


X = df.values ‚Äã‚Äã[:, 0  : 12 ]

O = df.values ‚Äã‚Äã[:, 12 ]

< /td>

Ici nous avons utilisé le dec classificateur d`arbre de ision comme modèle de prédiction. Nous avons fourni à la partie formation des données pour former le modèle.
Une fois la formation terminée, nous validons la précision du modèle en fournissant certaines des données pour tester le modèle.
Grâce à cela, nous obtenons une précision d`environ 84 %. Maintenant, afin d`utiliser ce modèle avec de nouvelles données inconnues, nous devons enregistrer le modèle afin que nous puissions prédire les valeurs plus tard. Pour ce faire, nous utilisons Pickle en Python, qui est un algorithme puissant pour sérialiser et désérialiser la structure des objets Python.


< / p>

X_train, X_test, y_train , y_test = train_test_split (

X, Y, test_size = 0.3 , random_state = 100 )


dt_clf_gini = DecisionTreeClassifier (critère = "gini" ,

random_state = 100 ,

max_depth = 5 ,

min_samples_leaf = 5 )


dt_clf_gini.fit (X_train, y_train)

y_pred_gini = dt_clf_gini.predict (X_test)


print ( "Desicion Tree using Gini Index Accuracy is" ,

precision_score (y_test, y_pred_gini) * 100 )

Sortie :

 L`arbre de décision utilisant la précision de l`indice de Gini est de 83,13031016480704 

Maintenant, l`infusion — ;
Flacon — c`est un micro-framework basé sur Python utilisé pour développer de petits sites Web. Flask est très facile à créer des API Restful à l`aide de Python. À ce stade, nous avons développé un modèle model.pkl qui peut prédire la classe de données en fonction de divers attributs de données. Étiquette de classe — Salaire & gt ; = 50K ou "50K .
Nous allons maintenant concevoir une application Web dans laquelle l`utilisateur entrera toutes les valeurs d`attribut ‚Äã‚Äãet les données seront reçues par le modèle, en fonction de la formation donnée au modèle, le modèle prédira quel devrait être le salaire de la personne dont les données ont été alimentées.

Formulaire HTML —
Pour prédire les revenus de divers attributs, nous devons d`abord collecter des données (nouvelles valeurs d`attributs), puis utiliser le modèle d`arbre de décision que nous avons construit ci-dessus pour prédire si le revenu sera supérieur à 50 000 ou moins. Par conséquent, pour collecter des données, nous créons un formulaire HTML qui contiendra toutes les différentes options à sélectionner dans chaque attribut. Ici, nous avons créé un formulaire simple en utilisant uniquement HTML. Si vous souhaitez rendre le formulaire plus interactif, vous pouvez le faire.


" html "

" corps "

" h3 " Formulaire de prévision des revenus "/ h3 "


" div "

" formulaire action = "/ résultat" méthode = "POST" "

" étiquette pour = "âge" " Âge "/ étiquette "

" entrée type = "text" id = "age" nom = "age" & gt ;

" br "

" étiquette pour = "w_class" " Classe ouvrière "/ étiquette "

" sélectionner id = "w_class" nom = "w_class" < classe de code = "plain">"

" option valeur = "0" " Gouvernement fédéral & lt ; / option "

" option valeur = "1" " Gouvernement local & lt ; / option "

" option valeur = "2" " Jamais travaillé "/ option "

" option valeur = "3" " Privé "/ option "

" option valeur = "4" " Auto-em-inc "/ option "

" option valeur = "5" " Auto-emp-not-inc "/ option "

" option valeur = "6" " État-gouv "/ option "

" option valeur = "7" " Sans-payer "/ option "

"/ sélectionnez "

" br "

" étiquette pour = "edu" " Éducation "/ étiquette "

" sélectionner id = "edu" nom = "edu" < classe de code = "plain">"

" option valeur = "0" " 10e "/ option "

" option valeur = "1" " 11 "/ option "

" option valeur = "2" " 12 "/ option "

" option valeur = "3" " 1er-4e & lt ; / option "

" option valeur = "4" " 5e-6e & lt ; / option "

" option valeur = "5" " 7e-8e "/ option "

" option valeur = "6" " 9e "/ option "

" option valeur = "7" " Assoc-acdm "/ option "

" option valeur = "8" " Assoc-voc "/ option "

" option valeur = "9" " Baccalauréats "/ option "

" option valeur = "10" " Doctorat "/ option "

" option valeur = "11" " HS-grad "/ option "

" option valeur = "12" " Maîtres "/ option "

" option valeur = "13" " Préscolaire "/ option "

" option valeur = "14" " Prof-école "/ option "

" option valeur = "15" " 16 - Certains-collège "/ option "

"/ sélectionnez "

" br "

" étiquette pour = "martial_stat" " État matrimonial "/ étiquette "

" sélectionner id = "martial_stat" nom = "martial_stat" < classe de code = "plain">"

" option valeur = "0" " divorcé "/ option "

" option valeur = "1" " marié "/ option "

" option valeur = "2" " pas marié "/ option "

"/ sélectionnez "

" br "

code class = "plain">" divorcé "/ option "

" option valeur = "1"

Shop

Learn programming in R: courses

$

Best Python online courses for 2022

$

Best laptop for Fortnite

$

Best laptop for Excel

$

Best laptop for Solidworks

$

Best laptop for Roblox

$

Best computer for crypto mining

$

Best laptop for Sims 4

$

Latest questions

NUMPYNUMPY

psycopg2: insert multiple rows with one query

12 answers

NUMPYNUMPY

How to convert Nonetype to int or string?

12 answers

NUMPYNUMPY

How to specify multiple return types using type-hints

12 answers

NUMPYNUMPY

Javascript Error: IPython is not defined in JupyterLab

12 answers


Wiki

Python OpenCV | cv2.putText () method

numpy.arctan2 () in Python

Python | os.path.realpath () method

Python OpenCV | cv2.circle () method

Python OpenCV cv2.cvtColor () method

Python - Move item to the end of the list

time.perf_counter () function in Python

Check if one list is a subset of another in Python

Python os.path.join () method