ML UDFs en Actian Data Platform, VectorH, y Vector - Parte 1
Corporación Actian
6 de agosto de 2020

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.
Suscríbase al blog de Actian
Suscríbase al blog de Actian para recibir información sobre datos directamente en su correo electrónico.
- Manténgase informado: reciba lo último en análisis de datos directamente en su bandeja de entrada.
- No se pierda ni una publicación: recibirá actualizaciones automáticas por correo electrónico que le avisarán cuando se publiquen nuevas publicaciones.
- Todo depende de usted: cambie sus preferencias de entrega para adaptarlas a sus necesidades.