Развертывание модели машинного обучения с помощью Flask

| | | | | | | | | | |

Чтобы использовать их для прогнозирования новых данных, мы должны развернуть их через Интернет, чтобы их мог использовать внешний мир. В этой статье мы расскажем о том, как мы обучили модель машинного обучения, построили на ней веб-приложение с помощью Flask.

Нам предстоит установить множество необходимых библиотек, которые будут использоваться в этой модели. Используйте pip для установки всех библиотек.

pip install pandas pip install numpy pip install sklearn 

Дерево решений —
Дерево решений — это хорошо известный контролируемый алгоритм машинного обучения, поскольку он прост в использовании, эластичен и гибок. Я применил алгоритм к набору данных для взрослых из репозитория машинного обучения UCI.

Получить данные —
Вы можете получить набор данных по по этой ссылке .

Получение набора данных — это еще не конец. Нам нужно предварительно обработать данные, что означает, что нам нужно очистить набор данных. Очистка набора данных включает в себя различные типы процессов, такие как удаление пропущенных значений, заполнение значений NA и т. д.


# import dataset < / p>

import pandas

import numpy

from sklearn import предварительная обработка


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

df.head()

Вывод:

Предварительная обработка набора данных —
Он состоит из 14 атрибутов и метки класса, указывающей, является ли доход человека меньше или больше 50 тысяч в год. Эти атрибуты варьируются от возраста человека, ярлыка рабочего класса до статуса отношений и расы, к которой принадлежит человек. Информацию обо всех атрибутах можно найти здесь.

Сначала мы находим и удаляем из данных все пропущенные значения. Мы заменили отсутствующие значения ‚Äã‚Äãзначением режима в этом столбце. Есть много других способов заменить отсутствующие значения, но этот оказался лучшим для этого типа набора данных.


df = df.drop ([ `fnlwgt` , `educational- число` ], ось = 1 )

col_names = df.columns


для c in col_names:

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

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

Алгоритм машинного обучения не может обрабатывать категориальные значения данных. Он может обрабатывать только числовые значения.
Чтобы вписать данные в модель прогнозирования, нам нужно преобразовать категориальные значения в числовые значения. Прежде чем сделать это, мы оценим, нужны ли какие-либо преобразования в категориальных столбцах.

Дискретность —  – это распространенный способ сделать категориальные данные более точными и значимыми. Мы применили дискретизацию к столбцу Семейное_статус , где они сужены до значений, состоящих или не состоящих в браке. Позже мы применим кодировщик меток к остальным столбцам данных. Кроме того, есть два избыточных столбца {' образование ', ' образовательный номер '} , поэтому мы удалили один из них.


df.replace ([ `Разведен` , `Женатый- AF-супруга` ,

` Женат-гражданская-супруга` , ` Женат-супруга-отсутствует` ,

`Никогда не состоял в браке` , `Разделенный` , `Вдовец` ],

[ `разведенный` , `женат` , ` женат` , `женат` ,

`не женат` , ` не женат` , `не замужем` ], inplace = True )


category_col = [ `workclass` , ` раса` , `образование` , "семейное положение" , `occupation` ,

`relationship` , ` Пол` , `родная страна` , ` доход` ]

labelEncoder = preprocessing.LabelEncoder ()


mapping_dict = {}

для 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)

Выходные данные:

{`workclass`: {`?`: 0, `Federal-gov`: 1, `Local-gov`: 2, «Никогда не работал»: 3, «Частное лицо»: 4, «Самооплата без вкл.»: 5, «Самооплата без вкл.»: 6, «Государственное управление»: 7, «Без оплаты»: 8}, `раса`: {`Амеро-индейско-эскимосский`: 0, `Азиатско-тихоокеанский островитянин`: 1, `Черный`: 2, `Другое`: 3, `Белый`: 4},` образование `: {` 10-я`: 0, `11-я`: 1, `12-я`: 2, `1-4-я`: 3, `5-6-я`: 4, `7-8-я`: 5, `9-я`: 6, `Ассоц- acdm’: 7, ‘Assoc-voc’: 8, ‘Бакалавриат’: 9, ‘Докторская степень’: 10, ‘Высшая школа’: 11, ‘Магистр’: 12, ‘Дошкольное’: 13, ‘Профессиональная школа’ : 14, `Некоторый колледж`: 15}, `семейное положение`: {`Разведен`: 0, `Замужем-AF-супруга`: 1, `Женатый-гражданский-супруг`: 2, `Женатый-супруга- отсутствует `: 3, `Никогда не был женат`: 4, `Расстались`: 5, `Вдовец`: 6}, `Род занятий`: {`? `: 0, `Адм-канцелярский`: 1, `Вооруженные Силы`: 2, `Ремесленно-ремонтный`: 3, `Исполнительно-управленческий`: 4, `Сельскохозяйственно-рыболовный`: 5, `Хендлеры-уборщики`: 6, «Машиностроение»: 7, «Прочие услуги»: 8, «Частный дом-сервис»: 9, «Проф-специальность»: 10, «Защита-сервис»: 11, «Продажи»: 12, `Техподдержка`: 13, `Транспорт-переезд`: 14} , `Отношения`: {`Муж`: 0, `Не в семье`: 1, `Другой родственник`: 2, `Свой -ребенок`: 3, `Незамужем`: 4, `Жена`: 5}, `пол`: { `Женщина`: 0, `Мужчина`: 1}, `родная страна`: {`?`: 0, «Камбоджа»: 1, «Канада»: 2, «Китай»: 3, «Колумбия»: 4, «Куба»: 5, «Доминиканская Республика»: 6, «Эквадор»: 7, «Сальвадор»: 8, «Англия»: 9, «Франция»: 10, «Германия»: 11, «Греция»: 12, «Гватемала»: 13, «Гаити»: 14, «Голландия-Нидерланды»: 15, «Гондурас»: 16, «Гонконг»: 17, «Венгрия»: 18, «Индия»: 19, «Иран»: 20, «Ирландия»: 21, «Италия»: 22, «Ямайка»: 23, «Япония»: 24, «Лаос»: 25, «Мексика»: 26, «Никарагуа»: 27, «Окраина-США (Гуам-USVI-и т. д.)»: 28, «Перу»: 29, «Филиппины»: 30, «Польша»: 31 , «Португалия»: 32, «Пуэрто-Рико» : 33, «Шотландия»: 34, «Юг»: 35, «Тайвань»: 36, «Таиланд»: 37, «Тринадад и amp; Тобаго»: 38, «США»: 39, «Вьетнам»: 40, «Югос Лавия»: 41}, «доход»: { «50K»: 1}}


Подгонка модели —
После предварительной обработки данные готовы к передаче алгоритму машинного обучения. Затем мы нарезаем данные, удаляя метки с атрибутами. Теперь мы разделили набор данных на две половины: одну для обучения и одну для тестирования. Это достигается с помощью функции sklearn train_test_split() .


from sklearn. model_selection import train_test_split

from sklearn.tree import DecisionTreeClassifier

from sklearn.metrics import precision_score


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

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

< /td>

Здесь мы использовали dec классификатор дерева идей в качестве модели прогнозирования. Мы предоставили обучающей части данные для обучения модели.
По завершении обучения мы проверяем точность модели, предоставляя некоторые данные для проверки модели.
Благодаря этому мы достигаем точности примерно 84%. Теперь, чтобы использовать эту модель с новыми неизвестными данными, нам нужно сохранить модель, чтобы мы могли прогнозировать значения позже. Для этого мы используем Pickle в Python, который представляет собой мощный алгоритм сериализации и десериализации структуры объектов 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 (критерий = "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 ( "Дерево решений с использованием точности индекса Джини" ,

показатель точности (y_test, y_pred_gini) * 100 )

Вывод:

 Дерево решений с использованием индекса Джини Точность составляет 83,13031016480704 

Теперь вливание —
Фласк — это микрофреймворк на основе Python, используемый для разработки небольших веб-сайтов. Flask очень легко создает Restful API с помощью Python. На данный момент мы разработали модель model.pkl , которая может прогнозировать класс данных на основе различных атрибутов данных. Ярлык класса — Заработная плата" = 50K или < lt; 50K .
Теперь мы разработаем веб-приложение, в котором пользователь будет вводить все значения атрибутов ‚Äã‚Äã, и данные будут получены моделью на основе обучения, данного модели, модель предскажет, какой должна быть зарплата человека, чьи данные были переданы.

HTML-форма —
Чтобы предсказать доход от различных атрибутов, нам сначала нужно собрать данные (новые значения атрибутов), а затем использовать модель дерева решений, которую мы построили выше, чтобы предсказать, будет ли доход больше 50 000 или меньше. Поэтому для сбора данных мы создаем HTML-форму, которая будет содержать все различные параметры для выбора из каждого атрибута. Здесь мы создали простую форму, используя только HTML. Если вы хотите сделать форму более интерактивной, вы можете сделать это.


" html "

" body "

" h3 " Форма прогнозирования доходов "/ h3 "


" div "

" form action = "/ результат" method = "POST" >

" label for = "возраст" " Возраст < / label "

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

" br "

" label for = "w_class" " Рабочий класс "/ label "

" select id = "w_class" name = "w_class" < класс кода = "обычный"> & GT;

" option value = "0" " Федеральное правительство "/ option "

" option value = "1" " Местное правительство "/ option "

" option value = "2" " Никогда не работал "/ option "

" option value = "3" " Частный "/ option "

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

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

" option value = "6" " Государство-прав "/ option "

" option value = "7" " Без оплаты "/ option "

"/ select "

" br "

" label for = "edu" " Образование "/ label "

" select id = "edu" name = "edu" < класс кода = "обычный"> & GT;

" 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" " Бакалавры "/ option "

" option value = "10" " Докторантура < / option "

" option value = "11" " HS-град< / option "

" option value = "12" " Мастера "/ option "

" option value = "13" " Дошкольное "/ option "

" option value = "14" " Проф-школа "/ option "

" option value = "15" " 16 - Some-college "/ option "

"/ select "

" br "

" label for = "martial_stat" " Семейное положение < / label "

" select id = "martial_stat" name = "martial_stat" < класс кода = "обычный"> & GT;

" option value = "0" " разведены "/ option "

" option value = "1" " женат "/ option "

" option value = "2" " не женат "/ option "

"/ select "

" br "

code class = "plain">" разведены "/ 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