Implementación de un modelo de aprendizaje automático con Flask

| | | | | | | | | | |

Para usarlos para predecir nuevos datos, tenemos que implementarlos en Internet para que el mundo exterior pueda usarlos. En este artículo, hablaremos sobre cómo entrenamos un modelo de aprendizaje automático y creamos una aplicación web en él usando Flask.

Tenemos que instalar muchas bibliotecas necesarias que se usarán en este modelo. Use pip para instalar todas las bibliotecas.

pip install pandas pip install numpy pip install sklearn 

Árbol de decisiones —
Árbol de decisiones — es un algoritmo de aprendizaje automático supervisado muy conocido porque es fácil de usar, elástico y flexible. Implementé el algoritmo en un conjunto de datos para adultos del repositorio de aprendizaje automático de UCI.

Recuperar los datos —
Puede recuperar el conjunto de datos mediante este enlace .

Obtener el conjunto de datos no es el final. Tenemos que preprocesar los datos, lo que significa que necesitamos borrar el conjunto de datos. La limpieza de conjuntos de datos implica varios tipos de procesos, como eliminar valores faltantes, completar valores NA, etc.


# importar conjunto de datos

importar pandas

importar numpy

de sklearn importar preprocesamiento


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

df.head ()

Salida:

Preprocesamiento de conjuntos de datos —
Consta de 14 atributos y una etiqueta de clase que indica si el ingreso de un individuo es menor o mayor a 50 mil al año. Estos atributos van desde la edad de una persona, la etiqueta de clase trabajadora, el estado civil y la raza a la que pertenece la persona. La información sobre todos los atributos se puede encontrar aquí.

Primero, buscamos y eliminamos todos los valores faltantes ‚Äã‚Äãde los datos. Hemos reemplazado los valores faltantes ‚Äã‚Äãcon el valor de la moda en esta columna. Hay muchas otras formas de reemplazar los valores faltantes, pero esta parece ser la mejor para este tipo de conjunto de datos.


df = df.drop ([ `fnlwgt` , `educativo- num` ], eje = 1 )

col_names = df.columnas


para c en col_names:

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

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

El algoritmo de aprendizaje automático no puede manejar valores de datos categóricos. Solo puede manejar valores numéricos.
Para ajustar los datos en el modelo de pronóstico, necesitamos convertir los valores categóricos "a valores numéricos. Antes de hacer esto, evaluaremos si se necesitan transformaciones en las columnas categóricas.

La discreción — es una forma común de hacer que los datos categóricos sean más precisos y significativos. Hemos aplicado la discretización a la columna marital_status donde se reducen a solo valores casados o solteros. Más tarde, aplicaremos el codificador de etiquetas en las columnas de datos restantes. Además, hay dos columnas redundantes {' educación ', ' número educativo '} , por lo que eliminamos uno de ellos.


df.replace ([ `Divorciado` , `Casado- AF-cónyuge` ,

` Casado-civ-cónyuge` , ` Casado-cónyuge-ausente` ,

`nunca casado` , `Separados` , `Viuda` ],

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

`no casado` , ` no casado` , `no casado` ], en lugar = Verdadero )


category_col = [ `workclass` , ` carrera` , `educación` , `estado civil` , `ocupación` ,

`relación` , `género` , `país nativo` , ` ingresos` ]

labelEncoder = preprocesamiento.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

imprimir (mapping_dict)

Salida:

{`workclass`: {`?`: 0, `Gobierno federal`: 1, `Gobierno local`: 2, `Nunca trabajó`: 3, `Privado`: 4, `Auto-emp-inc`: 5, `Self-emp-not-inc`: 6, `State-gov`: 7, `Sin pago`: 8}, `ra ce`: {`Amer-Indian-Eskimo`: 0, `Asian-Pac-Islander`: 1, `Black`: 2, `Other`: 3, `White`: 4}, `education `: {` 10`: 0,` 11th`: 1,` 12th`: 2,` 1st-4th`: 3,` 5th-6th`: 4,` 7th-8th`: 5,` 9th`: 6,` Asoc- acdm `: 7,` Assoc-voc `: 8,` Bachelors`: 9, `Doctorate`: 10, `HS-grad`: 11, `Masters`: 12,` Preschool `: 13,` Prof-school ` : 14, `Alguna universidad`: 15}, `estado civil`: {` Divorciado `: 0,` Casado-cónyuge-AF`: 1,` Casado-civ-cónyuge`: 2,` Casado-cónyuge- ausente`: 3, `nunca casado`: 4, `separado`: 5, `viudo`: 6}, `ocupación`: {`? `: 0,` Adm-clerical `: 1,` Armed-Forces`: 2, `Artesanía-reparación`: 3, `Exec-gerencial`: 4, `Agricultura-pesca`: 5, `Manejadores-limpiadores`: 6, `Machine-op-inspct`: 7, `Other-service`: 8, `Priv-house-serv`: 9, `Prof-specialty`: 10, `Protective-serv`: 11, `Ventas`: 12, `Soporte técnico`: 13, `Transporte-mudanza`: 14} , `relación`: {`Esposo`: 0, `No es de la familia`: 1, `Otro familiar`: 2, `Propio -niño`: 3, `Soltero`: 4, `Esposa`: 5} , `género`: { `Mujer`: 0, `Hombre`: 1}, `país nativo`: {`?`: 0, `Camboya`: 1, `Canadá`: 2, `China`: 3, `Columbia`: 4, `Cuba`: 5, `República-Dominicana`: 6, `Ecuador`: 7, `El-Salvador`: 8, `Inglaterra`: 9, `Francia`: 10, `Alemania`: 11, `Grecia`: 12, `Guatemala`: 13, `Haití`: 14, `Holanda-Holanda`: 15, `Honduras`: 16, `Hong`: 17, `Hungría`: 18, `India`: 19, `Irán`: 20, `Irlanda`: 21, `Italia`: 22, `Jamaica`: 23, `Japón`: 24, `Laos`: 25, `México`: 26, `Nicaragua`: 27, `Outlying-US (Guam -USVI-etc)`: 28, `Perú`: 29, `Filipinas`: 30, `Polonia`: 31 , `Portugal`: 32, `Puerto-Rico` : 33, `Escocia`: 34, `Sur`: 35, `Taiwán`: 36, `Tailandia`: 37, `Trinadad & amp; Tobago`: 38, `Estados Unidos`: 39, `Vietnam`: 40, `Yugos lavia`: 41}, `ingresos`: { `50K`: 1}}


Ajuste del modelo —
Después del procesamiento previo, los datos están listos para transferirse al algoritmo de aprendizaje automático. Luego cortamos los datos quitando las etiquetas con los atributos. Ahora hemos dividido el conjunto de datos en dos mitades, una para entrenamiento y otra para prueba. Esto se logra con la función train_test_split() sklearn.


from sklearn. model_selection importar train_test_split

from sklearn.tree importar DecisionTreeClassifier

< clase de código = "palabra clave"> de sklearn.metrics importar precision_score


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

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

< /td>

Aquí hemos usado el dec clasificador de árboles de isión como modelo de predicción. Hemos proporcionado datos a la parte de entrenamiento para entrenar el modelo.
Al finalizar el entrenamiento, validamos la precisión del modelo proporcionando algunos de los datos para probar el modelo.
Gracias a esto, logramos una precisión de aproximadamente el 84%. Ahora, para usar este modelo con nuevos datos desconocidos, necesitamos guardar el modelo para que podamos predecir los valores más adelante. Para hacer esto, usamos Pickle en Python, que es un poderoso algoritmo para serializar y deserializar la estructura de los objetos de Python.


< / p>

X_train, X_test, y_train , y_test = train_test_split (

X, Y, tamaño_prueba = 0.3 , estado_aleatorio = 100 )


dt_clf_gini = DecisionTreeClassifier (criterio = "gini" ,

estado_aleatorio = 100 ,

profundidad_máx = 5 ,

min_samples_leaf = 5 )


< clase de código = "simple"> dt_clf_gini.fit (tren_X, tren_y)

y_pred_gini = dt_clf_gini.predict (X_test)


print ( "Árbol de decisión que usa la precisión del índice Gini es" ,

precision_score (y_test, y_pred_gini) * 100 )

Salida:

 Árbol de decisión usando el índice de Gini La precisión es 83.13031016480704 

Ahora, la infusión —
Frasco — es un micro-framework basado en Python que se utiliza para desarrollar sitios web pequeños. Flask es muy fácil de construir API Restful usando Python. En este punto, hemos desarrollado un modelo model.pkl que puede predecir la clase de datos en función de varios atributos de datos. Etiqueta de clase — Salario" = 50K o < 50K .
Ahora diseñaremos una aplicación web en la que el usuario ingresará todos los valores de los atributos ‚Äã‚Äãy los datos serán recibidos por el modelo, en base al entrenamiento dado al modelo, el modelo predecirá cuál debería ser el salario de la persona cuyos datos se han alimentado.

Formulario HTML —
Para predecir los ingresos de varios atributos, primero debemos recopilar datos (nuevos valores de atributos) y luego usar el modelo de árbol de decisiones que creamos anteriormente para predecir si los ingresos serán superiores a 50 000 o menos. Por lo tanto, para recopilar datos, creamos un formulario HTML que contendrá todas las diferentes opciones para seleccionar de cada atributo. Aquí hemos creado un formulario simple usando solo HTML. Si desea que el formulario sea más interactivo, puede hacerlo.


" html "

" cuerpo "

" h3 " Formulario de predicción de ingresos "/ h3 "


" div "

" formulario action = "/resultado" método = "POST" "

" etiqueta para = "edad" " Edad < / etiqueta "

" entrada tipo = "texto" id = "edad" < código clase = "color1"> nombre = "edad" & gt ;

" br "

" etiqueta para = "w_class" " Clase obrera "/ etiqueta "

" seleccione id = "w_class" nombre = "w_class" < código clase = "simple">"

" opción valor = "0" " Gobierno federal "/ opción "

" opción valor = "1" " Gobierno local "/ opción "

" opción valor = "2" " Nunca trabajado "/ opción "

" opción valor = "3" " Privado < / opción "

" opción valor = "4" " Auto-emp-inc "/ opción "

" opción valor = "5" " Auto-emp-no-inc "/ opción "

" opción valor = "6" " Estado-gobierno "/ opción "

" opción valor = "7" " Sin pago "/ opción "

"/ select "

" br "

" etiqueta para = "edu" " Educación < / etiqueta "

" seleccione id = "edu" nombre = "edu" < código clase = "simple">"

" opción valor = "0" " 10 "/ opción "

" opción valor = "1" " 11 "/ opción "

" opción valor = "2" " 12 "/ opción "

" opción valor = "3" " 1º-4º < / opción "

" opción valor = "4" " 5to-6to < / opción "

" opción valor = "5" " 7-8 y lt; / opción "

" opción valor = "6" " 9º "/ opción "

" opción valor = "7" " Asociación-acdm "/ opción "

" opción valor = "8" " Asociación-voc "/ opción "

" opción valor = "9" " Licenciaturas "/ opción "

" opción valor = "10" " Doctorado < / opción "

" opción valor = "11" " Graduado de HS "/ opción "

" opción valor = "12" " Maestros < / opción "

" opción valor = "13" " Preescolar "/ opción "

" opción valor = "14" " Prof-escuela "/ opción "

" opción valor = "15" " 16 - Algo de universidad "/ opción "

"/ select "

" br "

" etiqueta para = "martial_stat" " Estado Civil < / etiqueta "

" seleccione id = "estadística_marcial" nombre = "stat_marcial" < código clase = "simple">"

" opción valor = "0" " divorciado < / opción "

" opción valor = "1" " casado < / opción "

" opción valor = "2" " no casado < / opción "

"/ select "

" br "

clase de código = "simple">" divorciado < / opción "

" opción 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

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