Een machine learning-model implementeren met Flask

| | | | | | | | | | |

Om ze te gebruiken om nieuwe gegevens te voorspellen, moeten we deze via internet inzetten, zodat de buitenwereld ze kan gebruiken. In dit artikel zullen we het hebben over hoe we een machine learning-model hebben getraind en er een webtoepassing op hebben gebouwd met Flask.

We moeten veel noodzakelijke bibliotheken installeren die in dit model zullen worden gebruikt. Gebruik pip om alle bibliotheken te installeren.

pip install pandas pip install numpy pip install sklearn 

Beslisboom —
Beslisboom — het is een bekend algoritme voor machinaal leren onder supervisie omdat het gemakkelijk te gebruiken, elastisch en flexibel is. Ik heb het algoritme geïmplementeerd op een volwassen dataset uit de UCI machine learning repository.

Haal de gegevens op —
Je kunt de dataset ophalen via deze link .

Het verkrijgen van de dataset is niet het einde. We moeten de gegevens voorbewerken, wat betekent dat we de dataset moeten wissen. Het opschonen van datasets omvat verschillende soorten processen, zoals het verwijderen van ontbrekende waarden, het invullen van NA-waarden, enz.


# import dataset < / p>

import panda`s

import numpy

van sklearn import voorbewerking


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

df.head ()

Uitvoer:

Voorverwerking van gegevensset —
Het bestaat uit 14 attributen en een klasselabel dat aangeeft of het inkomen van een persoon minder of meer is dan 50 duizend per jaar. Deze kenmerken variëren van de leeftijd van een persoon, het label van de arbeidersklasse, tot de relatiestatus en het ras waartoe de persoon behoort. Informatie over alle attributen vindt u hier.

Eerst zoeken en verwijderen we alle ontbrekende waarden ‚Äã‚Äãuit de gegevens. We hebben de ontbrekende waarden ‚Äã‚Äã vervangen door de moduswaarde in deze kolom. Er zijn veel andere manieren om ontbrekende waarden te vervangen, maar dit leek de beste voor dit type dataset.


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

col_names = df.columns


voor c in col_names:

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

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

Het machine learning-algoritme kan geen categorische gegevenswaarden aan. Het kan alleen numerieke waarden aan.
Om de gegevens in het prognosemodel te passen, moeten we de categorische waarden ‚Äã‚Äãomrekenen naar numerieke waarden. Voordat we dit doen, zullen we beoordelen of er transformaties nodig zijn op de categorische kolommen.

Discretie — is een veelgebruikte manier om categorische gegevens nauwkeuriger en zinvoller te maken. We hebben discretisatie toegepast op de kolom marital_status , waar ze worden beperkt tot alleen gehuwde of ongehuwde waarden. Later zullen we de label-encoder toepassen op de resterende gegevenskolommen. Er zijn ook twee redundante kolommen {' onderwijs ', ' educatieve-num '} , dus we hebben er een verwijderd.


df.replace ([ `Gescheiden` , `Getrouwd- AF-echtgenoot` ,

` Married-civ-spouse` , ` Married-spouse-absent` ,

`Nooit getrouwd` , `Gescheiden` , `weduwe` ],

[ `gescheiden` , `getrouwd` , ` getrouwd` , `getrouwd` ,

`niet getrouwd` , ` niet getrouwd` , `niet getrouwd` ], inplace = True )


category_col = [ `workclass` , ` race` , `onderwijs` , `huwelijkse staat` , `bezetting` ,

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

labelEncoder = preprocessing.LabelEncoder ()


mapping_dict = {}

voor col in category_col:

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


le_name_mapping = dict ( zip (labelEncoder.classes_,

labelEncoder.transformatie (labelEncoder.classes_)))


mapping_dict [col] = le_name_mapping

print (mapping_dict)

Uitvoer:

{`workclass`: {`?`: 0, `Federal-gov`: 1, `Local-gov`: 2, `Nooit gewerkt`: 3, `Privé`: 4, `Self-emp-inc`: 5, `Self-emp-not-inc`: 6, `State-gov`: 7,` Zonder loon `: 8},` ras `: {` Amer-Indian-Eskimo `: 0,` Asian-Pac-Islander `: 1,` Black `: 2,` Other `: 3,` White `: 4},` onderwijs `: {` 10e `: 0,` 11e `: 1,` 12e `: 2,` 1e-4e `: 3,` 5e-6e `: 4,` 7e-8e `: 5,` 9e `: 6,` Assoc- acdm `: 7,` Assoc-voc `: 8,` Bachelors`: 9, `Doctoraat`: 10, `HS-grad`: 11, `Masters`: 12,` Preschool `: 13,` Prof-school ` : 14, `Some-college`: 15}, `huwelijkse staat`: {` Gescheiden `: 0,` Getrouwd-AF-echtgenoot `: 1,` Getrouwd-civ-echtgenoot `: 2,` Getrouwd-echtgenoot- afwezig `: 3,` Nooit getrouwd `: 4,` Gescheiden `: 5,` Weduwnaar `: 6},` Beroep `: {`? `: 0,` Adm-clerical `: 1,` Armed-Forces`: 2, `Craft-repair`: 3, `Exec-managerial`: 4, `Farming-fishing`: 5, `Handlers-cleaners`: 6, `Machine-op-inspct`: 7, `Other-service`: 8, `Priv-house-serv`: 9, `Prof-specialty`: 10, `Protective-serv`: 11, `Sales`: 12, `Tech-support`: 13, `Transport-moving`: 14} , `relatie`: {`Man`: 0, `Niet-in-familie`: 1, `Overige familie`: 2, `Eigen -kind`: 3, `Ongehuwd`: 4, `Vrouw`: 5} , `geslacht`: { `Vrouwelijk`: 0, `Man`: 1}, `native-country`: {`?`: 0, `Cambodja`: 1, `Canada`: 2, `China`: 3, `Columbia`: 4, `Cuba`: 5, `Dominicaanse Republiek`: 6, `Ecuador`: 7, `El-Salvador`: 8, `Engeland`: 9, `Frankrijk`: 10, `Duitsland`: 11, `Griekenland`: 12, `Guatemala`: 13, `Haïti`: 14, `Holand-Nederland`: 15, `Honduras`: 16, `Hong`: 17, `Hongarije`: 18, `India`: 19, `Iran`: 20, `Ierland`: 21, `Italië`: 22, `Jamaica`: 23, `Japan`: 24, `Laos`: 25,` Mexico `: 26,` Nicaragua `: 27,` Afgelegen-VS (Guam -USVI-etc) `: 28,` Peru `: 29,` Filippijnen`: 30, `Polen`: 31 , `Portugal`: 32, `Puerto-Rico` : 33, `Schotland`: 34, `Zuid`: 35, `Taiwan`: 36, `Thailand`: 37, `Trinadad & amp; Tobago`: 38, `Verenigde Staten`: 39, `Vietnam`: 40, `Yugos lavia`: 41}, `inkomen`: { `50K`: 1}}


Het model passen —
Na voorbewerking zijn de gegevens klaar om te worden overgedragen naar het machine learning-algoritme. Vervolgens splitsen we de gegevens op door de labels met de attributen te strippen. We hebben de dataset nu in twee helften gesplitst, een voor training en een voor testen. Dit wordt bereikt met de train_test_split () sklearn-functie.


van sluw. model_selection import train_test_split

van sklearn.tree import DecisionTreeClassifier

van sklearn.metrics import nauwkeurigheid_score


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

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

< /td>

Hier hebben we de dec gebruikt ision tree classifier als het voorspellingsmodel. We hebben het trainingsgedeelte voorzien van gegevens voor het trainen van het model.
Na voltooiing van de training valideren we de nauwkeurigheid van het model door enkele gegevens te verstrekken om het model te testen.
Hierdoor bereiken we een nauwkeurigheid van ongeveer 84%. Om dit model nu te gebruiken met nieuwe onbekende gegevens, moeten we het model opslaan zodat we later waarden kunnen voorspellen. Hiervoor gebruiken we Pickle in Python, een krachtig algoritme voor het serialiseren en deserialiseren van de structuur van Python-objecten.


< / 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 (criterium = "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 ( "Beslisboom met behulp van de nauwkeurigheid van de Gini Index is" ,

nauwkeurigheidsscore (y_test, y_pred_gini) * 100 )

Uitvoer:

 Desicion Tree met behulp van Gini Index Nauwkeurigheid is 83.13031016480704 

Nu, infusie —
Kol — het is een op Python gebaseerd microframework dat wordt gebruikt voor het ontwikkelen van kleine websites. Flask is heel eenvoudig om Restful API`s te bouwen met Python. Op dit moment hebben we een model.pkl -model ontwikkeld dat de dataklasse kan voorspellen op basis van verschillende data-attributen. Klassenlabel — Salaris" = 50K of "50K .
Nu gaan we een webtoepassing ontwerpen waarin de gebruiker alle attribuutwaarden invoert en de gegevens worden ontvangen door het model, op basis van de training die aan het model is gegeven, het model zal voorspellen wat het salaris zou moeten zijn van de persoon wiens gegevens zijn ingevoerd.

HTML-formulier —
Om het inkomen uit verschillende kenmerken te voorspellen, moeten we eerst gegevens verzamelen (nieuwe kenmerkwaarden) en vervolgens het beslisboommodel gebruiken dat we hierboven hebben gebouwd om te voorspellen of het inkomen meer dan 50.000 of minder zal zijn. Om gegevens te verzamelen, maken we daarom een HTML-formulier dat alle verschillende opties bevat om uit elk attribuut te selecteren. Hier hebben we een eenvoudig formulier gemaakt met alleen HTML. Als u het formulier interactiever wilt maken, kunt u dat doen.


" html "

" body "

" h3 " Inkomensvoorspellingsformulier "/ h3 "


" div "

" vorm actie = "/ resultaat" methode = "POST" "

" label voor = "leeftijd" " Leeftijd "/ label "

" invoer typ = "tekst" id = "leeftijd" naam = "leeftijd" & gt ;

" br "

" label voor = "w_class" " Arbeidersklasse "/ label "

" selecteer id = "w_class" naam = "w_class" "

" optie waarde = "0" " Federale regering "/ optie "

" optie waarde = "1" " Lokale overheid "/ optie "

" optie waarde = "2" " Nooit gewerkt "/ optie "

" optie waarde = "3" " Privé "/ optie "

" optie waarde = "4" " Self-emp-inc "/ optie "

" optie waarde = "5" " Zelf-emp-niet-inc "/ optie "

" optie waarde = "6" " Staat-gov "/ optie "

" optie waarde = "7" " Zonder loon "/ optie "

"/ selecteer "

" br "

" label voor = "edu" " Onderwijs "/ label "

" selecteer id = "edu" naam = "edu" "

" optie waarde = "0" " 10e "/ optie "

" optie waarde = "1" " 11e "/ optie "

" optie waarde = "2" " 12e "/ optie "

" optie waarde = "3" " 1e-4e "/ optie "

" optie waarde = "4" " 5e-6e "/ optie "

" optie waarde = "5" " 7e-8e "/ optie "

" optie waarde = "6" " 9e "/ optie "

" optie waarde = "7" " Assoc-acdm "/ optie "

" optie waarde = "8" " Assoc-voc "/ optie "

" optie waarde = "9" " Bachelor "/ optie "

" optie waarde = "10" " doctoraat "/ optie "

" optie waarde = "11" " HS-grad "/ optie "

" optie waarde = "12" " Meesters "/ optie "

" optie waarde = "13" " Kleuterschool "/ optie "

" optie waarde = "14" " Prof-school "/ optie "

" optie waarde = "15" " 16 - Sommige-college "/ optie "

"/ selecteer "

" br "

" label voor = "martial_stat" " Burgerlijke staat "/ label "

" selecteer id = "martial_stat" naam = "martial_stat" "

" optie waarde = "0" " gescheiden "/ optie "

" optie waarde = "1" " getrouwd "/ optie "

" optie waarde = "2" " niet getrouwd "/ optie "

"/ selecteer "

" br "

code class = "plain">" gescheiden "/ optie "

" optie waarde = "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