Como implantar um modelo de aprendizado de máquina com Flask

| | | | | | | | | | |

Para usá-los para prever novos dados, precisamos implantá-los na Internet para que o mundo exterior possa usá-los. Neste artigo, falaremos sobre como treinamos um modelo de aprendizado de máquina, construímos um aplicativo da Web usando o Flask.

Precisamos instalar muitas bibliotecas necessárias que serão usadas nesse modelo. Use pip para instalar todas as bibliotecas.

pip install pandas pip install numpy pip install sklearn 

Árvore de decisão —
Árvore de decisão — é um algoritmo de aprendizado de máquina supervisionado bem conhecido porque é fácil de usar, elástico e flexível. Implementei o algoritmo em um conjunto de dados adulto do repositório de aprendizado de máquina da UCI.

Recupere os dados —
Você pode recuperar o conjunto de dados este link .

Obter o conjunto de dados não é o fim. Temos que pré-processar os dados, o que significa que precisamos limpar o conjunto de dados. A limpeza do conjunto de dados envolve vários tipos de processos, como remover valores ausentes, preencher valores NA, etc.


# import dataset < / p>

import pandas

import numpy

from sklearn import pré-processamento


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

df.head()

Saída:

Pré-processamento do conjunto de dados —
É composto por 14 atributos e um rótulo de classe indicando se a renda de um indivíduo é inferior ou superior a 50 mil por ano. Esses atributos variam desde a idade de uma pessoa, o rótulo da classe trabalhadora, o status de relacionamento e a raça à qual a pessoa pertence. Informações sobre todos os atributos podem ser encontradas aqui.

Primeiro, encontramos e removemos todos os valores ausentes ‚Äã‚Äãdos dados. Substituímos os valores ausentes ‚Äã‚Äãpelo valor de moda nesta coluna. Há muitas outras maneiras de substituir valores ausentes, mas essa parece ser a melhor para esse tipo de conjunto de dados.


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

col_names = df.columns


para c em col_names:

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

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

O algoritmo de aprendizado de máquina não pode lidar com valores de dados categóricos. Ele só pode lidar com valores numéricos.
Para ajustar os dados ao modelo de previsão, precisamos converter os valores categóricos ‚Äã‚Äã em valores numéricos. Antes de fazer isso, avaliaremos se são necessárias transformações nas colunas categóricas.

A discrição — é uma maneira comum de tornar os dados categóricos mais precisos e significativos. Aplicamos a discretização à coluna marital_status , onde eles são reduzidos apenas a valores casados ou solteiros. Posteriormente, aplicaremos o codificador de rótulo nas colunas de dados restantes. Além disso, há duas colunas redundantes {' educação ', ' educacional-num '} , então removemos um deles.


df.replace ([ `Divorciado` , `Casado- AF-spouse` ,

` Cônjuge-casado` , ` Cônjuge-casado-ausente` ,

`Nunca se casou` , `Separado` , `Viúvo` ],

[ `divorciado` , `casado` , `casado` , `casado` ,

`não casado` , `não casado` > , `não casado` ], inplace = Verdadeiro )


category_col = [ `workclass` , ` raça` , `education` , `estado civil` , `ocupação` ,

`relacionamento` , ` gênero` , `native-country` , `renda` ]

labelEncoder = preprocessing.LabelEncoder ()


mapping_dict = {}

para col em 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)

Saída:

{`workclass`: {`? `: 0, `Federal-gov`: 1, `Local-gov`: 2, `Nunca trabalhou`: 3, `Privado`: 4, `Auto-emp-inc`: 5, `Auto-emp-not -inc`: 6, `State-gov`: 7,` Sem remuneração `: 8},` raça `: {` Amer-Indian-Eskimo `: 0,` Asian-Pac-Islander `: 1,` Preto `: 2,` Outro `: 3,` Branco `: 4},` educação `: {` 10º `: 0,` 11º `: 1,` 12º `: 2,` 1º-4º `: 3,` 5º-6º `: 4,` 7º-8º `: 5,` 9º `: 6,` Assoc-acdm `: 7,` Assoc-voc `: 8,` Bacharel`: 9, `Doutorado`: 10, ` HS-grad`: 11, `Mestrado`: 12,` Pré-escola `: 13,` Prof-escola `: 14, `Alguma faculdade`: 15}, `estado civil`: {` Divorciado `: 0,` Casado-AF-cônjuge `: 1,` Casado-civ-cônjuge `: 2,` Casado-cônjuge-ausente `: 3,` Nunca casado `: 4,` Separado `: 5,` Viúvo `: 6}, ` ocupação `: {`? `: 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, `Suporte técnico`: 13, `Transporte-mudança`: 14} , `relacionamento`: {`Marido`: 0, `Sem família`: 1, `Outro parente`: 2, `Próprio -filho`: 3, `Solteiro`: 4, `Esposa`: 5} , `gênero`: { `Feminino`: 0, `Homem`: 1}, `país nativo`: {`? `: 0, `Camboja`: 1, `Canadá`: 2, `China`: 3, `Columbia`: 4, `Cuba`: 5, `República Dominicana`: 6, `Equador`: 7, `El -Salvador`: 8, `Inglaterra`: 9, `França`: 10, `Alemanha`: 11, `Grécia`: 12, `Guatemala`: 13, `Haiti`: 14, `Holanda-Holanda`: 15, `Honduras`: 16, `Hong`: 17, `Hungria`: 18, `Índia`: 19, `Irã`: 20, `Irlanda`: 21, `Itália`: 22, `Jamaica`: 23, `Japão `: 24, `Laos`: 25,` México `: 26,` Nicarágua `: 27,` Outlying-US (Guam -USVI-etc) `: 28,` Peru `: 29,` Filipinas`: 30, ` Polônia`: 31, `Portugal`: 32, `Porto-Rico`: 33, `Escócia`: 34, `Sul`: 35, `Taiwan`: 36, `Tailândia`: 37, `Trinadad & amp; Tobago`: 38, `Estados Unidos`: 39, `Vietnã`: 40, `Yugos lavia`: 41}, `income`: { `50K`: 1}}


Ajustando o modelo —
Após o pré-processamento, os dados estão prontos para serem transferidos para o algoritmo de aprendizado de máquina. Em seguida, dividimos os dados removendo os rótulos com os atributos. Agora dividimos o conjunto de dados em duas metades, uma para treinamento e outra para teste. Isso é feito com a função train_test_split() sklearn.


from sklearn. model_selection importar train_test_split

de sklearn.tree importar DecisionTreeClassifier

de sklearn.metrics import precision_score


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

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

< /td>

Aqui usamos o dec classificador de árvore de isões como modelo de previsão. Fornecemos à parte de treinamento dados para treinar o modelo.
Após a conclusão do treinamento, validamos a precisão do modelo fornecendo alguns dados para testar o modelo.
Graças a isso, alcançamos uma precisão de aproximadamente 84%. Agora, para usar este modelo com novos dados desconhecidos, precisamos salvar o modelo para que possamos prever valores ‚Äã‚Äãmais tarde. Para fazer isso, usamos Pickle em Python, que é um algoritmo poderoso para serializar e desserializar a estrutura de objetos 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 (critério = "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 ( "Árvore de decisão usando Gini Index Accuracy is" ,

precisão_score (y_test, y_pred_gini) * 100 )

Saída:

 Árvore de decisão usando a precisão do índice Gini é 83.13031016480704 

Agora, a infusão —
Frasco — é um micro-framework baseado em Python usado para desenvolver pequenos sites. Flask é muito fácil de construir APIs Restful usando Python. Neste ponto, desenvolvemos um modelo model.pkl que pode prever a classe de dados com base em vários atributos de dados. Rótulo de classe — Salário" = 50K ou < 50K .
Agora vamos projetar uma aplicação web na qual o usuário irá inserir todos os valores dos atributos ‚Äã‚Äãe os dados serão recebidos pelo modelo, com base no treinamento dado ao modelo, o modelo irá prever qual deve ser o salário da pessoa cujos dados foram alimentados.

Formulário HTML —
Para prever a receita de vários atributos, primeiro precisamos coletar dados (novos valores de atributo) e, em seguida, usar o modelo de árvore de decisão que construímos acima para prever se a receita será superior a 50 mil ou menos. Portanto, para coletar dados, criamos um formulário HTML que conterá todas as diferentes opções de seleção de cada atributo. Aqui criamos um formulário simples usando apenas HTML. Se você quiser tornar o formulário mais interativo, você pode fazê-lo.


" html "

" corpo "

" h3 " Formulário de Previsão de Renda "/ h3 "


" div "

" formulário ação = "/ resultado" método = "POST" "

" label para = "idade" " Idade "/ etiqueta "

" entrada tipo = "texto" id = "idade" nome = "idade" & gt ;

" br "

" label para = "w_class" " Classe Trabalhadora "/ etiqueta "

" selecione id = "w_class" nome = "w_class" < classe de código = "simples">"

" opção valor = "0" " Federal-gov "/ opção "

" opção valor = "1" " Local-gov "/ opção "

" opção valor = "2" " Nunca trabalhou "/ opção "

" opção valor = "3" " Privado "/ opção "

" opção valor = "4" " Self-emp-inc "/ opção "

" opção valor = "5" " Self-emp-não-inc "/ opção "

" opção valor = "6" " Governo do Estado "/ opção "

" opção valor = "7" " Sem-pagamento "/ opção "

"/ selecione "

" br "

" label para = "edu" " Educação "/ etiqueta "

" selecione id = "edu" nome = "edu" < classe de código = "simples">"

" opção valor = "0" " 10º "/ opção "

" opção valor = "1" " 11º "/ opção "

" opção valor = "2" " 12º "/ opção "

" opção valor = "3" " 1º-4º "/ opção "

" opção valor = "4" " 5º-6º "/ opção "

" opção valor = "5" " 7º-8º "/ opção "

" opção valor = "6" " 9º "/ opção "

" opção valor = "7" " Assoc-acdm "/ opção "

" opção valor = "8" " Assoc-voc "/ opção "

" opção valor = "9" " Bacharel "/ opção "

" opção valor = "10" " Doutorado "/ opção "

" opção valor = "11" " HS-grad "/ opção "

" opção valor = "12" " Mestres "/ opção "

" opção valor = "13" " Pré-escolar "/ opção "

" opção valor = "14" " Prof-escola "/ opção "

" opção valor = "15" " 16 - Alguns-faculdade "/ opção "

"/ selecione "

" br "

" label para = "martial_stat" " Estado civil "/ etiqueta "

" selecione id = "martial_stat" nome = "martial_stat" < classe de código = "simples">"

" opção valor = "0" " divorciado "/ opção "

" opção valor = "1" " casado "/ opção "

" opção valor = "2" " não casado "/ opção "

"/ selecione "

" br "

code class = "plain">" divorciado "/ opção "

" opção valor = "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