Ingeniería de datos

ML UDFs en Actian Data Platform, VectorH, y Vector - Parte 1

Corporación Actian

6 de agosto de 2020

Aprendizaje automático UDF que muestra una mano robótica y una mano humana

Recientemente en Actian Data Platform, VectorH 6.0, y Vector 6.0, Actian introdujo una capacidad para funciones Scalar definidas por el usuario (UDFs). Esto ha dado a Actian Data Platform, VectorH, y Vector una nueva dimensión para ejecutar modelos de Machine Learning (ML) en Python y JavaScript dentro de una base de datos. Puede encontrar más información sobre UDFs en nuestra documentación.

La creación de modelos es sencilla con tantas bibliotecas disponibles como Spark, Tensorflow, Python Scikit-learn (SKlearn), que es la más utilizada. Una vez creado un modelo de producción, es necesario desplegarlo en producción. Aquí Actian Data Platform, Vector, y VectorH obtienen una ventaja mediante el despliegue de estos modelos directamente en la base de datos, y por lo tanto el escaneo del modelo se utiliza para puntuar los datos directamente dentro de la base de datos.

Para demostrarlo, utilizamos Python SKlearn para entrenar el modelo. El objetivo de este blog es demostrar cómo funcionaría una UDF en el contexto del despliegue de un modelo de aprendizaje automático.

Encontramos un proyecto muy interesante llamado sklearn-porter, que transpila el modelo a JavaScript y m2cgen, que se puede utilizar para transpilar el modelo tanto a JavaScript como a Python. Actian Data Platform, Vector, y VectorH soportan UDFs tanto en JavaScript como en Python, y por lo tanto nuestra elección de librería es m2cgen. Dado que nuestros UDFs son UDFs escalares, necesitamos escribir algo de código adicional para que m2cgen devuelva valores escalares.

Para mostrar la UDF ML, elegí el conjunto de datos Iris. Sólo tiene 4 columnas y 150 filas, lo que hace que el caso de uso sea fácil de comprender. Demostraré un caso de prueba de principio a fin que crea la tabla, carga los datos en la base de datos, construye el modelo utilizando los datos de la base de datos y, por último, ejecuta el modelo dentro de la base de datos.

Iris jeu de données

El jeu de données Iris está fácilmente disponible. Se puede descargar desde Kaggle: https://www.kaggle.com/uciml/iris/data#

Sus campos son ID (int), SepalLengthCm (float), SepalWidthCm(float), PetalLengthCm(float), PetalWidthCm (float), Species (varchar (20)).

Detalles sobre la conexión de Python con Vector/VectorH

Se discute en https://www.actian.com/blog/data-warehouse/integrating-python-vector-ingres/ sobre cómo hacer conexiones ODBC o JDBC en python. En este tutorial, voy a utilizar conexiones ODBC.

Conectar a BD

import pyodbc como pdb
import pandas como pd
import numpy como np
conn = pdb.connect("dsn=Vector6;uid=actian;pwd=passwd" )
conn.setdecoding(pdb.SQL_CHAR, encoding='utf-8')
conn.setdecoding(pdb.SQL_WCHAR, encoding='utf-8')
conn.setencoding(encoding='utf-8')
cursor = conn.cursor()
iristbl='''crear tabla iris1(
id entero
sepallengthcm float,
sepalwidthcm float,
petallengthcm float,
petalwidthcm float,
species varchar(20))'''
conn.execute(iristbl)
conn.commit()

No he tomado ninguna partición como jeu de données tiene sólo 150 filas

Cargar datos en la base de datos

Esto ayudará en la carga masiva de los datos para CSV que descargamos de Kaggle

query ="COPY iris() VWLOAD FROM '/home/actian/vidisha/datasets_19_420_Iris.csv' with fdelim=',', insertmode ='Bulk' ,header"
conn.execute(query)
conn.commit()

Nota: datasets_19_420_Iris.csv es el jeu de données que descargué de Kaggle y utilicé vwload para cargar los datos en la base de datos.

Construir el modelo

La clasificación y la predicción son los dos aspectos más importantes del aprendizaje automático. Con el jeu de données Iris, vamos a crear un modelo de regresión logística simple para la clasificación de Iris. El enfoque aquí no es la construcción del modelo, sin embargo, mostrar cómo el modelo se puede ejecutar dentro de la base de datos.

Comprobación de los datos

sql_case="select sepallengthcm ,sepalwidthcm, petalwidthcm ,petalwidthcm , 
CASE 
WHEN species='Iris-setosa' THEN '1' 
WHEN species='Iris-versicolor' THEN '2' 
ELSE '3 
END como speciesclass 
FROM iris"
iris_case=pd.read_sql(sql_case, conn)
print(iris_case.shape)
iris_case.info(verbose=True)
iris_case.describe()
iris_case.head(10)

Dividir los datos de prueba y de entrenamiento

sql_case="select sepallengthcm ,sepalwidthcm, petalwidthcm ,petalwidthcm , 
CASE 
WHEN species='Iris-setosa' THEN '1' 
WHEN species='Iris-versicolor' THEN '2' 
ELSE '3 
END como speciesclass 
FROM iris"
iris_case=pd.read_sql(sql_case, conn)
print(iris_case.shape)
iris_case.info(verbose=True)
iris_case.describe()
iris_case.head(10)

En la segunda parte de este artículo de dos partes repasaremos los pasos para crear las UDF en la base de datos.

Para obtener más información sobre las capacidades de todos los productos Actian, visite nuestro sitio web.

logo avatar actian

Acerca de Actian Corporation

Actian hace que los datos sean fáciles. Nuestra plataforma de datos simplifica el modo en que las personas conectan, gestionan y analizan los datos en entornos en la nube, híbridos y locales. Con décadas de experiencia en gestión de datos y análisis, Actian ofrece soluciones de alto rendimiento que permiten a las empresas tomar decisiones basadas en datos. Actian cuenta con el reconocimiento de los principales analistas y ha recibido premios del sector por su rendimiento e innovación. Nuestros equipos comparten casos de uso probados en conferencias (por ejemplo, Strata Data) y contribuyen a proyectos de código abierto. En el blog de Actian, tratamos temas que van desde la ingesta de datos en tiempo real hasta el análisis basado en IA. Conozca al equipo directivo https://www.actian.com/company/leadership-team/