Wdrażanie modelu uczenia maszynowego za pomocą Flask

| | | | | | | | | | |

Aby użyć ich do przewidywania nowych danych, musimy wdrożyć je przez Internet, aby świat zewnętrzny mógł z nich korzystać. W tym artykule porozmawiamy o tym, jak wyszkoliliśmy model uczenia maszynowego, zbudowaliśmy na nim aplikację internetową za pomocą Flask.

Musimy zainstalować wiele niezbędnych bibliotek, które będą używane w tym modelu. Użyj pip, aby zainstalować wszystkie biblioteki.

pip install pandas pip install numpy pip install sklearn 

Drzewo decyzyjne —
Drzewo decyzyjne — jest to dobrze znany nadzorowany algorytm uczenia maszynowego, ponieważ jest łatwy w użyciu, elastyczny i elastyczny. Zaimplementowałem algorytm na zbiorze danych dla dorosłych z repozytorium uczenia maszynowego UCI.

Pobierz dane —
Zbiór danych możesz pobrać, ten link .

Pobranie zestawu danych to nie koniec. Musimy wstępnie przetworzyć dane, co oznacza, że musimy wyczyścić zbiór danych. Czyszczenie zestawu danych obejmuje różne rodzaje procesów, takie jak usuwanie brakujących wartości, uzupełnianie wartości NA itp.


# importuj zestaw danych < / p>

importuj pandy

importuj numpy

from sklearn import wstępne przetwarzanie


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

df.head ()

Wyjście:

Wstępne przetwarzanie zestawu danych —
Składa się z 14 atrybutów i etykiety klasy wskazującej, czy dochód jednostki wynosi mniej czy więcej 50 tysięcy rocznie. Atrybuty te wahają się od wieku osoby, etykiety klasy robotniczej, po status związku i rasę, do której należy dana osoba. Informacje o wszystkich atrybutach można znaleźć tutaj.

Najpierw znajdujemy i usuwamy z danych wszystkie brakujące wartości. Zastąpiliśmy brakujące wartości „Ę” wartością trybu w tej kolumnie. Istnieje wiele innych sposobów zastępowania brakujących wartości, ale wydaje się, że jest to najlepsze dla tego typu zestawu danych.


df = df.drop ([ `fnlwgt` , `education- num` ], oś = 1 )

col_names = df.columns


for c in col_names:

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

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

Algorytm uczenia maszynowego nie obsługuje kategorycznych wartości danych. Obsługuje tylko wartości numeryczne.
Aby dopasować dane do modelu prognostycznego, musimy przekonwertować wartości kategorialne na wartości liczbowe. Zanim to zrobimy, ocenimy, czy potrzebne są jakiekolwiek przekształcenia w kolumnach kategorialnych.

Dyskrecja — jest powszechnym sposobem na zwiększenie dokładności i znaczenia danych kategorycznych. Zastosowaliśmy dyskretyzację w kolumnie marital_status , gdzie są one zawężone do wartości tylko w związku małżeńskim lub nieżonatym. Później zastosujemy koder etykiet do pozostałych kolumn danych. Ponadto istnieją dwie nadmiarowe kolumny {' edukacja &, & Education-num '} , więc usunęliśmy jeden z nich.


df.replace ([ `Rozwiedziony` , `Żonaty- AF-współmałżonka` ,

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

`Nigdy nie żonaty` , „Oddzielne” , „Wdowa” ],

[ `rozwiedziony` , `żonaty` , ` żonaty` , `żonaty` ,

`niezamężna` , ` niezamężna` , `nie w związku małżeńskim` ], inplace = True )


category_col = [ `workclass` , ` race` , `edukacja` , `stan cywilny` , `zawód` ,

`związek` , ` gender` , `native-country` , ` dochód` ]

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)

Wyjście:

{`workclass`: {`? `: 0, `Federal-gov`: 1, `Local-gov`: 2, `Nigdy nie pracował`: 3, `Prywatny`: 4, `Sam-zatrudniony`: 5, `Sam-pracownik-nie -inc`: 6, `State-gov`: 7, `Bez wynagrodzenia`: 8},` race `: {`Amer-Indian-Eskimo `: 0,` Asian-Pac-Islander `: 1,` Czarny `: 2, `Inny `: 3,` Biały `: 4},` wykształcenie `: {` 10 `: 0,` 11 `: 1,` 12 `: 2,` 1-4 `: 3,` 5-6 `: 4, `7-8`: 5, `9`: 6, `dok.-dok.`: 7, `dok. HS-grad`: 11, `Magister`: 12, `Przedszkole`: 13, `Professional`: 14, `Some-college`: 15}, `stan cywilny`: {`Rozwiedziony`: 0,` Żonaty AF `: 1, `Żonaty-cywilny-małżonek`: 2, `Żonaty-małżonek-nieobecny`: 3, `Nigdy nie żonaty`: 4, `W separacji`: 5, `Wdowa`: 6}, ` zawód `: {`? `: 0`, `Adm-urzędnik`: 1,` Siły Zbrojne`: 2, `Naprawa rzemieślnicza`: 3, `Kierownik-kierownik`: 4, `Rolnictwo-rybołówstwo`: 5, `Przewoźnicy-sprzątacze`: 6, „Inspekcja maszynowa”: 7, „Inna usługa”: 8, „Priv-house-serv”: 9, „Specjalizacja zawodowa”: 10, „Serwis ochronny”: 11, „Sprzedaż”: 12, `Wsparcie techniczne`: 13, `Przeprowadzki transportowe`: 14} , `relationship`: {`Mąż`: 0, `Nie w rodzinie`: 1, `Inny krewny`: 2, `Własny -dziecko`: 3, `Niezamężna`: 4, `Żona`: 5} , `Płeć`: { `Kobieta`: 0, `Mężczyzna`: 1}, `Ojczysty-kraj`: {`? `: 0, `Kambodża`: 1, `Kanada`: 2, `Chiny`: 3, `Kolumbia`: 4, `Kuba`: 5, `Dominikana`: 6, `Ekwador`: 7, `El -Salvador: 8, „Anglia”: 9, „Francja”: 10, „Niemcy”: 11, „Grecja”: 12, „Gwatemala”: 13, „Haiti”: 14, „Holandia-Holandia”: 15, „Honduras”: 16, „Hong”: 17, „Węgry”: 18, „Indie”: 19, „Iran”: 20, „Irlandia”: 21, „Włochy”: 22, „Jamajka”: 23, „Japonia” `: 24, `Laos`: 25, `Meksyk`: 26, `Nikaragua`: 27, `Outly-US (Guam-USVI-etc) `: 28, `Peru`: 29,` Filipiny`: 30, ` Polska”: 31, „Portugalia”: 32, „Puerto-Rico”: 33, „Szkocja”: 34, „Południe”: 35, „Tajwan”: 36, „Tajlandia”: 37, „Trinadad & amp; Tobago”: 38, „Stany Zjednoczone”: 39, „Wietnam”: 40, „Yugos lavia”: 41}, „dochód”: { „50K”: 1}}


Dopasowanie modelu —
Po wstępnym przetworzeniu dane są gotowe do przesłania do algorytmu uczenia maszynowego. Następnie dzielimy dane, usuwając etykiety z atrybutami. Podzieliliśmy teraz zbiór danych na dwie połowy, jedną do treningu, a drugą do testowania. Osiąga się to za pomocą funkcji train_test_split() sklearn.


from chudy. model_selection importuj train_test_split

z sklearn.tree import DecisionTreeClassifier

from sklearn.metrics import dokładność_score


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

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

< /td>

Tutaj użyliśmy dec klasyfikator drzewa ison jako model predykcyjny. Do części szkoleniowej dostarczyliśmy dane do trenowania modelu.
Po zakończeniu szkolenia weryfikujemy dokładność modelu, dostarczając część danych do testowania modelu.
Dzięki temu uzyskujemy dokładność około 84%. Teraz, aby użyć tego modelu z nowymi nieznanymi danymi, musimy zapisać model, aby móc przewidzieć wartości później. Aby to zrobić, używamy Pickle w Pythonie, który jest potężnym algorytmem do serializacji i deserializacji struktury obiektów Pythona.


< / 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 (kryterium = "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 ( "Drzewo decyzji przy użyciu dokładności indeksu Gini to" ,

dokładność_score (y_test, y_pred_gini) * 100 )

Wyjście:

 Drzewo decyzji wykorzystujące Dokładność indeksu Gini wynosi 83.13031016480704 

Teraz infuzja —
Kolba — jest to mikro-framework oparty na Pythonie używany do tworzenia małych stron internetowych. Flask jest bardzo łatwy do zbudowania Restful API przy użyciu Pythona. W tym momencie opracowaliśmy model model.pkl , który może przewidywać klasę danych na podstawie różnych atrybutów danych. Etykieta klasy — Wynagrodzenie" = 50K lub "50K .
Teraz zaprojektujemy aplikację webową, w której użytkownik wprowadzi wszystkie wartości atrybutów „Ę”, a dane będą odbierane przez model, na podstawie szkolenia przekazanego modelowi, model przewidzi, jaka powinna być pensja osoby, której dane zostały nakarmione.

Formularz HTML —
Aby przewidzieć dochód na podstawie różnych atrybutów, najpierw musimy zebrać dane (nowe wartości atrybutów), a następnie użyć modelu drzewa decyzyjnego, który zbudowaliśmy powyżej, aby przewidzieć, czy dochód będzie większy niż 50 000 lub mniej. Dlatego, aby zebrać dane, tworzymy formularz HTML, który będzie zawierał wszystkie różne opcje do wyboru z każdego atrybutu. Tutaj stworzyliśmy prosty formularz używając tylko HTML. Jeśli chcesz, aby formularz był bardziej interaktywny, możesz to zrobić.


" html "

" body "

" h3 " Formularz prognozy dochodów "/ h3 "


" div "

" formularz akcja = "/ wynik" metoda = "POST" "

" etykieta for = "wiek" " Wiek "/ label "

" input type = "text" id = "wiek" nazwa = "wiek" & gt ;

" br "

" etykieta for = "w_class" " Klasa robotnicza "/ label "

" select id = "w_class" nazwa = "w_class" < klasa kodu = "zwykły">"

" opcja wartość = "0" " rząd federalny "/ opcja "

" opcja wartość = "1" " Samorząd lokalny "/ opcja "

" opcja wartość = "2" " Nigdy nie pracował "/ opcja "

" opcja wartość = "3" " Prywatne "/ opcja "

" opcja wartość = "4" " Samozatrudnienie "/ opcja "

" opcja wartość = "5" " Self-emp-not-inc "/ opcja "

" opcja wartość = "6" " rząd stanowy "/ opcja "

" opcja wartość = "7" " Bez wynagrodzenia "/ opcja "

"/ wybierz "

" br "

" etykieta for = "edu" " Edukacja "/ label "

" select id = "edu" nazwa = "edu" < klasa kodu = "zwykły">"

" opcja wartość = "0" " 10-ty "/ opcja "

" opcja wartość = "1" " 11 "/ opcja "

" opcja wartość = "2" " 12 "/ opcja "

" opcja wartość = "3" " 1-4 "/ opcja "

" opcja wartość = "4" " 5-6 "/ opcja "

" opcja wartość = "5" " 7-8 "/ opcja "

" opcja wartość = "6" " 9 "/ opcja "

" opcja wartość = "7" " Assoc-acdm "/ opcja "

" opcja wartość = "8" " Assoc-voc "/ opcja "

" opcja wartość = "9" " Kawalerowie "/ opcja "

" opcja wartość = "10" " Doktorat "/ opcja "

" opcja wartość = "11" " Stopień HS "/ opcja "

" opcja wartość = "12" " Mistrzowie "/ opcja "

" opcja wartość = "13" " Przedszkole "/ opcja "

" opcja wartość = "14" " Prof-szkoła "/ opcja "

" opcja wartość = "15" " 16 - Jakiś kolegium "/ opcja "

"/ wybierz "

" br "

" etykieta for = "martial_stat" " Stan cywilny "/ label "

" select id = "martial_stat" nazwa = "martial_stat" < klasa kodu = "zwykły">"

" opcja wartość = "0" " rozwiedziony "/ opcja "

" opcja wartość = "1" " żonaty "/ opcja "

" opcja wartość = "2" " nie żonaty "/ opcja "

"/ wybierz "

" br "

code class = "plain">" rozwiedziony "/ opcja "

" opcja wartość = "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