Bereitstellen eines maschinellen Lernmodells mit Flask

| | | | | | | | | | |

Um sie zur Vorhersage neuer Daten zu verwenden, müssen wir sie über das Internet bereitstellen, damit die Außenwelt sie nutzen kann. In diesem Artikel werden wir darüber sprechen, wie wir ein maschinelles Lernmodell trainiert und mit Flask eine Webanwendung darauf erstellt haben.

Wir müssen viele notwendige Bibliotheken installieren, die in diesem Modell verwendet werden. Verwenden Sie pip, um alle Bibliotheken zu installieren.

pip install pandas pip install numpy pip install sklearn 

Entscheidungsbaum —
Entscheidungsbaum — Es ist ein bekannter überwachter Algorithmus für maschinelles Lernen, da er einfach zu verwenden, elastisch und flexibel ist. Ich habe den Algorithmus in einem Dataset für Erwachsene aus dem UCI-Repositorium für maschinelles Lernen implementiert.

Daten abrufen —
Sie können den Datensatz über diesen Link abrufen.

Das Erhalten des Datensatzes ist nicht das Ende. Wir müssen die Daten vorverarbeiten, was bedeutet, dass wir den Datensatz löschen müssen. Die Datensatzbereinigung umfasst verschiedene Arten von Prozessen wie das Entfernen fehlender Werte, das Auffüllen von NA-Werten usw.


# Datensatz importieren < / p>

import pandas

import numpy

from sklearn import preprocessing


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

df.head ()

Ausgabe:

Vorverarbeitung des Datensatzes —
Es besteht aus 14 Attributen und einer Klassenbezeichnung, die angibt, ob das Einkommen einer Person weniger oder mehr als 50.000 pro Jahr beträgt. Diese Attribute reichen vom Alter einer Person über das Label der Arbeiterklasse bis hin zum Beziehungsstatus und der Rasse, der die Person angehört. Informationen zu allen Attributen finden Sie hier.

Zuerst finden und entfernen wir alle fehlenden Werte ‚Äã‚Äãaus den Daten. Die fehlenden Werte ‚Äã‚Äã haben wir in dieser Spalte durch den Moduswert ersetzt. Es gibt viele andere Möglichkeiten, fehlende Werte zu ersetzen, aber dies schien für diesen Datensatztyp am besten zu sein.


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

col_names = df.columns


für c in col_names:

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

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

Der maschinelle Lernalgorithmus kann keine kategorialen Datenwerte verarbeiten. Er kann nur numerische Werte verarbeiten.
Um die Daten in das Prognosemodell einzupassen, müssen wir die kategorialen Werte „Äã‚Äãin numerische Werte umwandeln. Bevor wir dies tun, werden wir prüfen, ob Transformationen in den kategorialen Spalten erforderlich sind.

Diskretion — ist eine gängige Methode, um kategoriale Daten genauer und aussagekräftiger zu machen. Wir haben die Spalte marital_status diskretisiert, wo sie nur auf verheiratete oder unverheiratete Werte eingegrenzt werden. Später wenden wir den Label-Encoder auf die verbleibenden Datenspalten an. Außerdem gibt es zwei redundante Spalten {' Bildung ', ' education-num '} , also haben wir einen davon entfernt.


df.replace ([ `Geschieden` , `Verheiratet- AF-spouse` ,

` Verheirateter-Ehepartner` , ` Verheirateter-Ehepartner-abwesend` ,

`Unverheiratet` , `Getrennt` , `Verwitwet` ],

[ `geschieden` , `verheiratet` , `verheiratet` , `verheiratet` ,

`nicht verheiratet` , ` nicht verheiratet` , `nicht verheiratet` ], anstelle von = True )


category_col = [ `workclass` , `race` , `education` , `familienstand` , `Beruf` ,

`relationship` , ` gender` , `native-country` , `Einkommen` ]

labelEncoder = preprocessing.LabelEncoder ()


mapping_dict = {}

für col in category_col:

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


le_name_mapping = dict ( zip (labelEncoder.classes_,

labelEncoder.transformation (labelEncoder.classes_)))


mapping_dict [col] = le_name_mapping

print (mapping_dict)

Ausgabe:

{`workclass`: {`?`: 0, `Federal-gov`: 1, `Local-gov`: 2, `Nie gearbeitet`: 3, `Privat`: 4, `Self-emp-inc`: 5, `Self-emp-not-inc`: 6, `State-gov`: 7, `Unbezahlt`: 8}, `Rasse`: {`Amer-Indianer-Eskimo`: 0, `Asien-Pazifik-Inselbewohner`: 1, `Schwarz`: 2, `Andere`: 3, `Weiß`: 4}, `Bildung `: {` 10. `: 0, 11. `: 1, 12. `: 2, 1.-4. `: 3, 5.-6. `: 4, 7.-8. `: 5, 9. `: 6, `Assoc- acdm‘: 7, ‚Assoc-voc‘: 8, ‚Bachelor‘: 9, ‚Promotion‘: 10, ‚HS-grad‘: 11, ‚Master‘: 12, ‚Vorschule‘: 13, ‚Prof-School‘ : 14, `Some-college`: 15}, `marital-status`: {` Geschieden `: 0, ` Married-AF-spouse `: 1, ` Married-civ-spouse `: 2, ` Married-spouse- abwesend `: 3, `nie verheiratet`: 4, `getrennt leben`: 5, `verwitwet`: 6}, `Beruf`: {`? `: 0, `Adm-Kanzlei`: 1, `Streitkräfte`: 2, `Handwerks-Reparatur`: 3, `Exec-Managerial`: 4, `Farming-Fishing`: 5, `Handlers-Cleaners`: 6, `Machine-op-inspect`: 7, `Other-service`: 8, `Priv-house-serv`: 9, `Prof-specialty`: 10, `Protective-serv`: 11, `Sales`: 12, `Technischer Support`: 13, `Transport-Umzug`: 14} , `Beziehung`: {`Ehemann`: 0, `Nicht in der Familie`: 1, `Anderer Verwandter`: 2, `Eigen -Kind`: 3, `Unverheiratet`: 4, `Ehefrau`: 5} , `Geschlecht`: { `Weiblich`: 0, `Männlich`: 1}, `Heimatland`: {`?`: 0, `Kambodscha`: 1, `Kanada`: 2, `China`: 3, `Kolumbien`: 4, `Kuba`: 5, `Dominikanische Republik`: 6, `Ecuador`: 7, `El-Salvador`: 8, `England`: 9, `Frankreich`: 10, `Deutschland`: 11, `Griechenland`: 12, `Guatemala`: 13, `Haiti`: 14, `Holland-Niederlande`: 15, `Honduras`: 16, „Hong“: 17, „Ungarn“: 18, „Indien“: 19, „Iran“: 20, „Irland“: 21, „Italien“: 22, „Jamaika“: 23, „Japan“: 24, `Laos`: 25, `Mexiko`: 26, `Nicaragua`: 27, `Outlying-US (Guam - USVI-etc)`: 28, `Peru`: 29, `Philippinen`: 30, `Polen`: 31 , `Portugal`: 32, `Puerto-Rico` : 33, `Schottland`: 34, `Süd`: 35, `Taiwan`: 36, `Thailand`: 37, `Trinadad & amp; Tobago“: 38, „Vereinigte Staaten“: 39, „Vietnam“: 40, „Jugoslawien“: 41}, „Einkommen“: { „50.000“: 1}}


Anpassen des Modells —
Nach der Vorverarbeitung können die Daten an den Algorithmus für maschinelles Lernen übertragen werden. Dann zerlegen wir die Daten, indem wir die Beschriftungen mit den Attributen entfernen. Wir haben den Datensatz nun in zwei Hälften geteilt, eine zum Training und eine zum Testen. Dies wird mit der sklearn-Funktion train_test_split () erreicht.


von sklearn. model_selection import train_test_split

from sklearn.tree import DecisionTreeClassifier

aus sklearn.metrics import precision_score


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

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

< /td>

Hier haben wir die dez ision-Tree-Klassifikator als Vorhersagemodell. Wir haben den Trainingsteil mit Daten zum Trainieren des Modells versehen.
Nach Abschluss des Trainings validieren wir die Genauigkeit des Modells, indem wir einige der Daten zum Testen des Modells bereitstellen.
Dadurch erreichen wir eine Genauigkeit von etwa 84 %. Um dieses Modell nun mit neuen unbekannten Daten zu verwenden, müssen wir das Modell speichern, damit wir später Werte vorhersagen können. Dazu verwenden wir Pickle in Python, einen leistungsstarken Algorithmus zum Serialisieren und Deserialisieren der Struktur von Python-Objekten.


< / 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 (Kriterium = "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 )

Ausgabe:

 Entscheidungsbaum mit Gini-Index-Genauigkeit ist 83.13031016480704 

Nun, Infusion —
Kolben — Es ist ein Python-basiertes Mikro-Framework, das für die Entwicklung kleiner Websites verwendet wird. Flask ist sehr einfach, Restful-APIs mit Python zu erstellen. An diesem Punkt haben wir ein model.pkl -Modell entwickelt, das die Datenklasse basierend auf verschiedenen Datenattributen vorhersagen kann. Klassenbezeichnung — Gehalt" = 50K oder "50K .
Jetzt werden wir eine Webanwendung entwerfen, in der der Benutzer alle Attributwerte eingibt, und die Daten vom Modell empfangen werden, basierend auf dem Training, das dem Modell, dem Modell, gegeben wurde wird vorhersagen, wie hoch das Gehalt der Person sein sollte, deren Daten eingegeben wurden.

HTML-Formular —
Um das Einkommen aus verschiedenen Attributen vorherzusagen, müssen wir zuerst Daten (neue Attributwerte) sammeln und dann das oben erstellte Entscheidungsbaummodell verwenden, um vorherzusagen, ob das Einkommen mehr als 50.000 oder weniger betragen wird. Um Daten zu sammeln, erstellen wir daher ein HTML-Formular, das alle verschiedenen Optionen zur Auswahl aus jedem Attribut enthält. Hier haben wir ein einfaches Formular erstellt, das nur HTML verwendet. Wenn Sie das Formular interaktiver gestalten möchten, können Sie dies tun.


" html "

" body "

" h3 " Formular zur Einkommensvorhersage "/ h3 "


" div "

" form action = "/ result" method = "POST" "

" Label für = "Alter" " Alter "/ label "

" input type = "text" id = "age" name = "age" & gt ;

" br "

" Label für = "w_class" " Arbeiterklasse "/ label "

" select id = "w_class" name = "w_class" < Code-Klasse = "einfach">"

" option value = "0" " Bundesregierung "/ Option "

" option value = "1" " Kommunalverwaltung "/ Option "

" option value = "2" " Nie gearbeitet "/ Option "

" option value = "3" " Privat "/ Option "

" option value = "4" " Self-emp-inc "/ Option "

" option value = "5" " Self-emp-not-inc "/ Option "

" option value = "6" " Landesregierung "/ Option "

" option value = "7" " Ohne Bezahlung "/ Option "

"/ auswählen "

" br "

" Label für = "edu" " Bildung "/ label "

" select id = "edu" name = "edu" < Code-Klasse = "einfach">"

" option value = "0" " 10. "/ Option "

" option value = "1" " 11. "/ Option "

" option value = "2" " 12. < / Option "

" option value = "3" " 1.-4. "/ Option "

" option value = "4" " 5.-6. "/ Option "

" option value = "5" " 7.-8. "/ Option "

" option value = "6" " 9. "/ Option "

" option value = "7" " Assoc-acdm "/ Option "

" option value = "8" " Assoc-voc "/ Option "

" option value = "9" " Junggesellen "/ Option "

" option value = "10" " Promotion "/ Option "

" option value = "11" " HS-grad "/ Option "

" option value = "12" " Meister "/ Option "

" option value = "13" " Vorschule "/ Option "

" option value = "14" " Prof-Schule "/ Option "

" option value = "15" " 16 - Irgendein College "/ Option "

"/ auswählen "

" br "

" Label für = "martial_stat" " Familienstand "/ label "

" select id = "martial_stat" name = "martial_stat" < Code-Klasse = "einfach">"

" option value = "0" " geschieden "/ Option "

" option value = "1" " verheiratet "/ Option "

" option value = "2" " nicht verheiratet "/ Option "

"/ auswählen "

" br "

code class = "plain">" geschieden "/ Option "

" option value = "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