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.
Algorytm uczenia maszynowego nie obsługuje kategorycznych wartości danych. Obsługuje tylko wartości numeryczne. Dyskrecja — jest powszechnym sposobem na zwiększenie dokładności i znaczenia danych kategorycznych. Zastosowaliśmy dyskretyzację w kolumnie
|
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
]
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"
,
=
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"