Distribuzione di un modello di apprendimento automatico tramite Flask

| | | | | | | | | | |

Per utilizzarli per prevedere nuovi dati, dobbiamo distribuirli su Internet in modo che il mondo esterno possa utilizzarli. In questo articolo parleremo di come abbiamo addestrato un modello di apprendimento automatico, creato un`applicazione Web su di esso utilizzando Flask.

Dobbiamo installare molte librerie necessarie che verranno utilizzate in questo modello. Usa pip per installare tutte le librerie.

pip install pandas pip install numpy pip install sklearn 

Albero decisionale —
Albero decisionale — è un noto algoritmo di apprendimento automatico supervisionato perché è facile da usare, elastico e flessibile. Ho implementato l`algoritmo su un set di dati per adulti dal repository di machine learning UCI.

Recupera i dati —
Puoi recuperare il set di dati questo link .

Il recupero del set di dati non è la fine. Dobbiamo preelaborare i dati, il che significa che dobbiamo cancellare il set di dati. La pulizia del set di dati coinvolge vari tipi di processi come la rimozione dei valori mancanti, il riempimento di valori NA, ecc.


# import dataset < / p>

import panda

import numpy

from sklearn import preelaborazione


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

df.head ()

Uscita:

Preelaborazione del set di dati —
Si compone di 14 attributi e un`etichetta di classe che indica se il reddito di un individuo è inferiore o superiore a 50 mila all`anno. Questi attributi vanno dall`età di una persona, all`etichetta della classe operaia, allo stato della relazione e alla razza a cui appartiene la persona. Le informazioni su tutti gli attributi possono essere trovate qui.

In primo luogo, troviamo e rimuoviamo tutti i valori mancanti ‚Äã‚Äãdai dati. Abbiamo sostituito i valori mancanti ‚Äã‚Äãcon il valore della modalità in questa colonna. Esistono molti altri modi per sostituire i valori mancanti, ma questo sembrava essere il migliore per questo tipo di set di dati.


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

col_names = df.columns


for c in col_names:

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

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

L`algoritmo di apprendimento automatico non può gestire valori di dati categoriali. Può gestire solo valori numerici.
Per adattare i dati al modello di previsione, dobbiamo convertire i valori categoriali ‚Äã‚Äãin valori numerici. Prima di farlo, valuteremo se sono necessarie trasformazioni nelle colonne categoriali.

La discrezionalità — è un modo comune per rendere i dati delle categorie più accurati e significativi. Abbiamo applicato la discretizzazione alla colonna stato_coniugale in cui sono limitati ai soli valori coniugati o non sposati. Successivamente, applicheremo il codificatore di etichette alle restanti colonne di dati. Inoltre, sono presenti due colonne ridondanti {' istruzione ', ' educational-num '} , quindi ne abbiamo rimosso uno.


df.replace ([ `Divorziato` , `Sposato- AF-coniuge` ,

` Sposato-civ-coniuge` , ` Sposato-coniuge-assente` ,

`Mai sposato` , `Separato` , `Vedova` ],

[ `divorziato` , `sposato` , ` sposato` , `sposato` ,

`non sposato` , ` non sposato` , `non sposato` ], inplace = True )


category_col = [ `workclass` , ` race` , `istruzione` , `stato-coniugale` , `occupazione` ,

`relazione` , ` gender` , `nativo-paese` , ` reddito` ]

labelEncoder = preprocessing.LabelEncoder()


mapping_dict = {}

for 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

print (mapping_dict)

Risultato:

{`workclass`: {`?`: 0, `Federal-gov`: 1, `Local-gov`: 2, `Mai-lavorato`: 3, `Privato`: 4, `Self-emp-inc`: 5, `Self-emp-not-inc`: 6, `State-gov`: 7,` Senza-pay `: 8},` race `: {` Amer-Indian-Eskimo `: 0,` Asian-Pac-Islander `: 1,` Black `: 2,` Other `: 3,` White `: 4},` education `: {` 10° `: 0,` 11° `: 1,` 12° `: 2,` 1°-4° `: 3,` 5°-6° `: 4,` 7°-8° `: 5,` 9° `: 6,` Assoc- acdm `: 7,` Assoc-voc `: 8,` Bachelors`: 9, `Dottorato`: 10, `HS-grad`: 11, `Masters`: 12,` Preschool `: 13,` Prof-school ` : 14, `Some-college`: 15}, `stato-coniugale`: {` Divorziato `: 0,` Sposato-coniuge-AF `: 1,` Sposato-coniuge-civ `: 2,` Sposato-coniuge- assente `: 3,` Mai sposati `: 4,` Separati `: 5,` Vedova `: 6},` occupazione `: {`? `: 0,` Adm-impiegato `: 1,` Forze armate`: 2, `Craft-repair`: 3, `Exec-manager`: 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, `Supporto tecnico`: 13, `Trasloco-trasporto`: 14} , `relazione`: {`Marito`: 0, `Non-in-famiglia`: 1, `Altro-parente`: 2, `Proprio -figlio`: 3, `Non sposato`: 4, `Moglie`: 5} , `genere`: { `Femmina`: 0, `Maschio`: 1}, `paese nativo`: {`?`: 0, `Cambogia`: 1, `Canada`: 2, `Cina`: 3, `Columbia`: 4, `Cuba`: 5, `Repubblica Dominicana`: 6, `Ecuador`: 7, `El-Salvador`: 8, `Inghilterra`: 9, `Francia`: 10, `Germania`: 11, `Grecia`: 12, `Guatemala`: 13, `Haiti`: 14, `Olanda-Paesi Bassi`: 15, `Honduras`: 16, `Hong`: 17, `Ungheria`: 18, `India`: 19, `Iran`: 20, `Irlanda`: 21, `Italia`: 22, `Giamaica`: 23, `Giappone`: 24, `Laos`: 25,` Messico `: 26,` Nicaragua `: 27,` Outlying-US (Guam -USVI-ecc) `: 28,` Perù `: 29,` Filippine`: 30, `Polonia`: 31 , `Portogallo`: 32, `Porto-Rico` : 33, `Scozia`: 34, `Sud` : 35, `Taiwan`: 36, `Thailandia`: 37, `Trinadad & amp; Tobago`: 38, `Stati Uniti`: 39, `Vietnam`: 40, `Yugos lavia`: 41}, `reddito`: { `50K`: 1}}


Montaggio del modello —
Dopo la preelaborazione, i dati sono pronti per essere trasferiti all`algoritmo di apprendimento automatico. Quindi suddividiamo i dati rimuovendo le etichette con gli attributi. Ora abbiamo diviso il set di dati in due metà, una per l`addestramento e una per i test. Ciò si ottiene con la funzione sklearn train_test_split() .


from sklearn. model_selection import train_test_split

da sklearn.tree import DecisionTreeClassifier

from sklearn.metrics import precision_score


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

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

< /td>

Qui abbiamo usato il dec classificatore dell`albero di ision come modello di previsione. Abbiamo fornito alla parte di addestramento i dati per l`addestramento del modello.
Al completamento dell`addestramento, convalidiamo l`accuratezza del modello fornendo alcuni dati per testare il modello.
Grazie a questo, otteniamo un`accuratezza di circa l`84%. Ora, per utilizzare questo modello con nuovi dati sconosciuti, dobbiamo salvare il modello in modo da poter prevedere i valori "in seguito". Per fare ciò, utilizziamo Pickle in Python, che è un potente algoritmo per serializzare e deserializzare la struttura degli oggetti 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 (criterio = "gini" ,

random_state = 100 ,

max_depth = 5 ,

min_samples_leaf = 5 )


dt_clf_gini.fit (X_train, y_train)

y_pred_gini = code> dt_clf_gini.predict (X_test)


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

precision_score (y_test, y_pred_gini) * 100 )

Risultato:

 Desicion Tree che utilizza la precisione dell`indice Gini è 83.13031016480704 

Ora, l`infusione —
Boccetta — è un micro-framework basato su Python utilizzato per lo sviluppo di piccoli siti web. Flask è molto facile da costruire API Restful usando Python. A questo punto, abbiamo sviluppato un modello model.pkl in grado di prevedere la classe di dati in base a vari attributi di dati. Etichetta di classe — Stipendio" = 50K o "50K .
Ora progetteremo un`applicazione web in cui l`utente inserirà tutti i valori degli attributi ‚Äã‚Äãe i dati saranno ricevuti dal modello, in base alla formazione data al modello, il modello predice quale dovrebbe essere lo stipendio della persona i cui dati sono stati inseriti.

Modulo HTML —
Per prevedere il reddito da vari attributi, dobbiamo prima raccogliere dati (nuovi valori di attributo) e quindi utilizzare il modello dell`albero decisionale che abbiamo creato sopra per prevedere se il reddito sarà superiore o inferiore a 50.000. Pertanto, per raccogliere i dati, creiamo un modulo HTML che conterrà tutte le diverse opzioni per selezionare da ciascun attributo. Qui abbiamo creato un semplice form usando solo HTML. Se vuoi rendere il modulo più interattivo, puoi farlo.


" html "

" corpo "

" h3 " Modulo di previsione del reddito "/ h3 "


" div "

" modulo azione = "/ risultato" metodo = "POST" "

" etichetta for = "età" " Età "/ etichetta "

" input tipo = "testo" id = "età" nome = "età" & gt ;

" br "

" etichetta for = "w_class" " Classe operaia "/ etichetta "

" seleziona id = "w_class" name = "w_class" < codice classe = "semplice">"

" opzione valore = "0" " governo federale "/ opzione "

" opzione valore = "1" " Governo locale "/ opzione "

" opzione valore = "2" " Mai lavorato "/ opzione "

" opzione valore = "3" " Privato "/ opzione "

" opzione valore = "4" " Auto-emp-inc "/ opzione "

" opzione valore = "5" " Self-emp-non-inc "/ opzione "

" opzione valore = "6" " Stato-gover "/ opzione "

" opzione valore = "7" " Senza pagare "/ opzione "

"/ seleziona "

" br "

" etichetta for = "edu" " Istruzione "/ etichetta "

" seleziona id = "edu" name = "edu" < codice classe = "semplice">"

" opzione valore = "0" " 10 "/ opzione "

" opzione valore = "1" " 11 "/ opzione "

" opzione valore = "2" " 12 "/ opzione "

" opzione valore = "3" " 1°-4° "/ opzione "

" opzione valore = "4" " 5°-6° "/ opzione "

" opzione valore = "5" " 7°-8° "/ opzione "

" opzione valore = "6" " 9 "/ opzione "

" opzione valore = "7" " Assoc-acdm "/ opzione "

" opzione valore = "8" " Assoc-voc "/ opzione "

" opzione valore = "9" " Lauree "/ opzione "

" opzione valore = "10" " Dottorato "/ opzione "

" opzione valore = "11" " HS-grad "/ opzione "

" opzione valore = "12" " Maestri "/ opzione "

" opzione valore = "13" " Scuola materna "/ opzione "

" opzione valore = "14" " Prof-scuola "/ opzione "

" opzione valore = "15" " 16 - Some-college "/ opzione "

"/ seleziona "

" br "

" etichetta for = "martial_stat" " Stato civile "/ etichetta "

" seleziona id = "martial_stat" name = "martial_stat" < codice classe = "semplice">"

" opzione valore = "0" " divorziato "/ opzione "

" opzione valore = "1" " sposato "/ opzione "

" opzione valore = "2" " non sposato "/ opzione "

"/ seleziona "

" br "

code class = "semplice">" divorziato "/ opzione "

" opzione valore = "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

News


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