En esta sección, repasamos los tipos de modelos de IA disponibles en MindsDB. Estos son modelos de regresión, modelos de clasificación, modelos de series temporales y modelos de lenguaje de gran tamaño (LLMs).

Descargo de responsabilidad

En esta sección, describimos el comportamiento predeterminado utilizando el motor de ML Lightwood para modelos de regresión, clasificación y series temporales. Otros manejadores de ML pueden comportarse de manera diferente. Por ejemplo, algunos pueden no realizar la validación automáticamente al crear un modelo, ya que numerosos comportamientos son específicos del manejador.

¿Qué es un modelo de IA?

Un modelo de aprendizaje automático (ML) es un programa entrenado utilizando los datos disponibles para aprender a reconocer patrones y comportamientos para predecir datos futuros. Existen varios tipos de modelos de IA que utilizan diferentes paradigmas de aprendizaje, pero los modelos de MindsDB son todos supervisados porque aprenden de pares de datos de entrada y salida esperada.

Ingresas datos en un modelo de IA. Este procesa estos datos de entrada, buscando patrones y correlaciones. Después de eso, el modelo de IA devuelve datos de salida definidos en base a los datos de entrada.

Características

Las características son variables que un modelo de IA utiliza como datos de entrada para buscar patrones y predecir la variable objetivo. En conjuntos de datos tabulares, las características generalmente corresponden a columnas individuales.

Objetivo

El objetivo es una variable de interés que un modelo de IA predice basándose en la información extraída de las características.

Conjunto de datos de entrenamiento

El conjunto de datos de entrenamiento se utiliza durante la fase de entrenamiento de un modelo de IA. Contiene tanto variables de características como una variable objetivo. Como su nombre indica, se utiliza para entrenar un modelo de IA.

El modelo de IA toma todo el conjunto de datos de entrenamiento como entrada. Aprende los patrones y relaciones entre las variables de características y los valores objetivo.

Una vez que se completa el proceso de entrenamiento, se puede pasar a la fase de validación.

Conjunto de datos de validación

El conjunto de datos de validación se utiliza durante la fase de validación de un modelo de IA. Contiene tanto variables de características como una variable objetivo, al igual que el conjunto de datos de entrenamiento. Pero como su nombre indica, se utiliza para validar las predicciones realizadas por un modelo de IA. No tiene superposición con el conjunto de datos de entrenamiento, ya que es un conjunto reservado para simular un escenario real donde el modelo genera predicciones para nuevos datos de entrada.

El modelo de IA toma solo las variables de características del conjunto de datos de validación como entrada. Basándose en lo que el modelo aprende durante el proceso de entrenamiento, hace predicciones para los valores de una variable objetivo.

Ahora viene el paso de validación. Para evaluar la precisión del modelo de IA, se comparan los valores de la variable objetivo del conjunto de datos de validación con los valores de la variable objetivo predichos por el modelo de IA. Cuanto más cercanos sean estos valores entre sí, mejor será la precisión del modelo de IA.

Conjunto de datos de entrada

Después de completar las fases de entrenamiento y validación, se puede proporcionar el conjunto de datos de entrada que consiste solo en las variables de características para predecir los valores de la variable objetivo.

¿Cómo se crea un modelo de IA?

En MindsDB, usamos la declaración CREATE MODEL para crear, entrenar y validar un modelo.

Fase de entrenamiento

Veamos nuestro conjunto de datos de entrenamiento. Contiene tanto características como un objetivo.

SELECT *
FROM files.salary_dataset
LIMIT 5;

Al ejecutar, obtenemos:

+---------+--------------+-----------+---------+--------+---------------+-------------------+------+
|companyId|jobType       |degree     |major    |industry|yearsExperience|milesFromMetropolis|salary|
+---------+--------------+-----------+---------+--------+---------------+-------------------+------+
|COMP37   |CFO           |MASTERS    |MATH     |HEALTH  |10             |83                 |130   |
|COMP19   |CEO           |HIGH_SCHOOL|NONE     |WEB     |3              |73                 |101   |
|COMP52   |VICE_PRESIDENT|DOCTORAL   |PHYSICS  |HEALTH  |10             |38                 |137   |
|COMP38   |MANAGER       |DOCTORAL   |CHEMISTRY|AUTO    |8              |17                 |142   |
|COMP7    |VICE_PRESIDENT|BACHELORS  |PHYSICS  |FINANCE |8              |16                 |163   |
+---------+--------------+-----------+---------+--------+---------------+-------------------+------+

Aquí, las características son companyId, jobType, degree, major, industry, yearsExperience, y milesFromMetropolis.

Y la variable objetivo es salary.

Vamos a crear y entrenar un modelo de IA usando este conjunto de datos de entrenamiento.

CREATE MODEL salary_predictor
FROM files
    (SELECT * FROM salary_dataset)
PREDICT salary;

Al ejecutar, obtenemos:

Query successfully completed

Progreso

Así es como se verifica si el proceso de entrenamiento está completado:

DESCRIBE salary_predictor;

Una vez que el estado es complete, la fase de entrenamiento está completada.

Fase de validación

Por defecto, la declaración CREATE MODEL realiza la validación del modelo.

Además, podemos validar el modelo manualmente consultándolo y proporcionando los valores de las características en la cláusula WHERE de esta manera:

SELECT salary, salary_explain
FROM mindsdb.salary_predictor
WHERE companyId = 'COMP37'
AND jobType = 'MANAGER'
AND degree = 'DOCTORAL'
AND major = 'MATH'
AND industry = 'FINANCE'
AND yearsExperience = 5
AND milesFromMetropolis = 50;

Al ejecutar, obtenemos:

+------+------------------------------------------------------------------------------------------------------------------------------------------+
|salary|salary_explain                                                                                                                            |
+------+------------------------------------------------------------------------------------------------------------------------------------------+
|128   |{"predicted_value": 128, "confidence": 0.67, "anomaly": null, "truth": null, "confidence_lower_bound": 109, "confidence_upper_bound": 147}|
+------+------------------------------------------------------------------------------------------------------------------------------------------+

Comparando los valores reales de salario para los individuos definidos y los valores de salario predichos, se puede determinar la precisión del modelo de IA.

Ten en cuenta que MindsDB calcula la precisión del modelo por defecto al ejecutar la declaración CREATE MODEL. Sin embargo, no se garantiza que todos los motores de ML hagan esto.

Por defecto, la declaración CREATE MODEL hace lo siguiente:

  • crea un modelo,
  • divide los datos de entrada en conjuntos de datos de entrenamiento y validación,
  • entrena un modelo usando el conjunto de datos de entrenamiento,
  • valida un modelo usando el conjunto de datos de validación,
  • compara los valores verdaderos y predichos de un objetivo para definir la precisión del modelo.

Veamos los tipos básicos de modelos de IA.

Tipos de modelos de IA

Modelos de regresión

La regresión es un tipo de modelado predictivo que analiza datos de entrada, incluyendo relaciones entre variables dependientes e independientes y la variable objetivo que se va a predecir.

En el caso de los modelos de regresión, la variable objetivo pertenece a un conjunto de valores continuos. Por ejemplo, teniendo datos sobre bienes raíces, como el número de habitaciones, ubicación y precio de alquiler, se puede predecir el precio de alquiler usando regresión. El precio de alquiler se predice basándose en los datos de entrada, y su valor es cualquier valor de un rango entre los valores mínimo y máximo de precio de alquiler de los datos de entrenamiento.

Ejemplo

Primero, veamos nuestros datos de entrada.

SELECT *
FROM example_db.demo_data.home_rentals
LIMIT 5;

Al ejecutar, obtenemos:

+---------------+-------------------+----+--------+--------------+--------------+------------+
|number_of_rooms|number_of_bathrooms|sqft|location|days_on_market|neighborhood  |rental_price|
+---------------+-------------------+----+--------+--------------+--------------+------------+
|2              |1                  |917 |great   |13            |berkeley_hills|3901        |
|0              |1                  |194 |great   |10            |berkeley_hills|2042        |
|1              |1                  |543 |poor    |18            |westbrae      |1871        |
|2              |1                  |503 |good    |10            |downtown      |3026        |
|3              |2                  |1066|good    |13            |thowsand_oaks |4774        |
+---------------+-------------------+----+--------+--------------+--------------+------------+

Aquí, las características son number_of_rooms, number_of_bathrooms, sqft, location, days_on_market, y neighborhood.

Y la variable objetivo es rental_price.

Vamos a crear y entrenar un modelo de IA.

CREATE MODEL mindsdb.home_rentals_model
FROM example_db
  (SELECT * FROM demo_data.home_rentals)
PREDICT rental_price;

Al ejecutar, obtenemos:

Query successfully completed

Una vez que el proceso de entrenamiento está completado, podemos consultar para obtener predicciones.

SELECT rental_price, rental_price_explain
FROM mindsdb.home_rentals_model
WHERE sqft = 823
AND location='good'
AND neighborhood='downtown'
AND days_on_market=10;

Al ejecutar, obtenemos:

+--------------+-----------------------------------------------------------------------------------------------------------------------------------------------+
| rental_price | rental_price_explain                                                                                                                          |
+--------------+-----------------------------------------------------------------------------------------------------------------------------------------------+
| 4394         | {"predicted_value": 4394, "confidence": 0.99, "anomaly": null, "truth": null, "confidence_lower_bound": 4313, "confidence_upper_bound": 4475} |
+--------------+-----------------------------------------------------------------------------------------------------------------------------------------------+

Para más detalles, consulta este tutorial.

Modelos de clasificación

La clasificación es un tipo de modelado predictivo que analiza datos de entrada, incluyendo relaciones entre variables dependientes e independientes y la variable objetivo que se va a predecir.

En el caso de los modelos de clasificación, la variable objetivo pertenece a un conjunto de valores discretos. Por ejemplo, teniendo datos sobre cada cliente de una compañía de telecomunicaciones, se puede predecir la posibilidad de abandono usando clasificación. El abandono se predice basándose en los datos de entrada, y su valor es ya sea Yes o No. Este es un caso especial llamado clasificación binaria.

Ejemplo

Primero, veamos nuestros datos de entrada.

SELECT *
FROM example_db.demo_data.customer_churn
LIMIT 5;

Al ejecutar, obtenemos:

+----------+------+-------------+-------+----------+------+------------+----------------+---------------+--------------+------------+----------------+-----------+-----------+---------------+--------------+----------------+-------------------------+--------------+------------+------+
|customerid|gender|seniorcitizen|partner|dependents|tenure|phoneservice|multiplelines   |internetservice|onlinesecurity|onlinebackup|deviceprotection|techsupport|streamingtv|streamingmovies|contract      |paperlessbilling|paymentmethod            |monthlycharges|totalcharges|churn |
+----------+------+-------------+-------+----------+------+------------+----------------+---------------+--------------+------------+----------------+-----------+-----------+---------------+--------------+----------------+-------------------------+--------------+------------+------+
|7590-VHVEG|Female|0            |Yes    |No        |1     |No          |No phone service|DSL            |No            |Yes         |No              |No         |No         |No             |Month-to-month|Yes             |Electronic check         |$29.85        |$29.85      |No    |
|5575-GNVDE|Male  |0            |No     |No        |34    |Yes         |No              |DSL            |Yes           |No          |Yes             |No         |No         |No             |One year      |No              |Mailed check             |$56.95        |$1,889.50   |No    |
|3668-QPYBK|Male  |0            |No     |No        |2     |Yes         |No              |DSL            |Yes           |Yes         |No              |No         |No         |No             |Month-to-month|Yes             |Mailed check             |$53.85        |$108.15     |Yes   |
|7795-CFOCW|Male  |0            |No     |No        |45    |No          |No phone service|DSL            |Yes           |No          |Yes             |Yes        |No         |No             |One year      |No              |Bank transfer (automatic)|$42.30        |$1,840.75   |No    |
|9237-HQITU|Female|0            |No     |No        |2     |Yes         |No              |Fiber optic    |No            |No          |No              |No         |No         |No             |Month-to-month|Yes             |Electronic check         |$70.70        |$151.65     |Yes   |
+----------+------+-------------+-------+----------+------+------------+----------------+---------------+--------------+------------+----------------+-----------+-----------+---------------+--------------+----------------+-------------------------+--------------+------------+------+

Aquí, las características soncustomerid,gender,seniorcitizen,partner,dependents,tenure,phoneservice,multiplelines,internetservice,onlinesecurity,onlinebackup,deviceprotection,techsupport,streamingtv,streamingmovies,contract,paperlessbilling,paymentmethod,monthlycharges, ytotalcharges.

Y la variable objetivo eschurn.

Vamos a crear y entrenar modelos de IA.

CREATE MODEL churn_predictor
FROM example_db
    (SELECT * FROM demo_data.customer_churn)
PREDICT churn;

Al ejecutar, obtenemos:

Query successfully completed

Una vez que se completa el proceso de entrenamiento, podemos consultar para obtener predicciones.

SELECT churn, churn_confidence, churn_explain
FROM mindsdb.customer_churn_predictor
WHERE seniorcitizen=0
AND partner='Yes'
AND dependents='No'
AND tenure=1
AND phoneservice='No'
AND multiplelines='No phone service'
AND internetservice='DSL';

Al ejecutar, obtenemos:

+-------+---------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Churn | Churn_confidence    | Churn_explain                                                                                                                                                    |
+-------+---------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| Yes   | 0.7752808988764045  | {"predicted_value": "Yes", "confidence": 0.7752808988764045, "anomaly": null, "truth": null, "probability_class_No": 0.4756, "probability_class_Yes": 0.5244}    |
+-------+---------------------+------------------------------------------------------------------------------------------------------------------------------------------------------------------+

Para más detalles, consultaeste tutorial.

Modelos de Series Temporales

Los modelos de series temporales caen en la categoría de regresión o clasificación. Pero lo que los distingue es que ordenamos los datos por fecha, hora o cualquier valor que defina el orden secuencial de los eventos. Usualmente, las predicciones hechas por modelos de series temporales se denominanpronósticos.

Un modelo de series temporales predice un objetivo que proviene de un conjunto continuo (regresión) o un conjunto discreto (clasificación).

Hay una cláusula obligatoriaORDER BYseguida de una columna secuencial, como una fecha. Ordena todas las filas en consecuencia.

Si quieres agrupar tus predicciones, hay una cláusula opcionalGROUP BY. Al seguir esta cláusula con un nombre de columna, o múltiples nombres de columnas, se pueden hacer predicciones para particiones de datos definidas por estas columnas.

En el caso de los modelos de series temporales, se debe definir cuántas filas de datos se utilizan para entrenar el modelo. La cláusulaWINDOWseguida de un número entero hace precisamente eso.

Hay una cláusula opcionalHORIZONdonde puedes definir cuántas filas, o qué tan lejos en el futuro, quieres predecir. Por defecto, es uno.

Ejemplo

Primero, veamos nuestros datos de entrada.

SELECT *
FROM example_db.demo_data.house_sales
LIMIT 5;

Al ejecutar, obtenemos:

+----------+------+-----+--------+
|saledate  |ma    |type |bedrooms|
+----------+------+-----+--------+
|2007-09-30|441854|house|2       |
|2007-12-31|441854|house|2       |
|2008-03-31|441854|house|2       |
|2008-06-30|441854|house|2       |
|2008-09-30|451583|house|2       |
+----------+------+-----+--------+

Aquí, las características sonsaledate,type, ybedrooms.

Y la variable objetivo esma.

Vamos a crear y entrenar modelos de IA.

CREATE MODEL mindsdb.house_sales_predictor
FROM files
  (SELECT * FROM house_sales)
PREDICT MA
ORDER BY saledate
GROUP BY bedrooms, type
-- the target column to be predicted stores one row per quarter
WINDOW 8      -- using data from the last two years to make forecasts (last 8 rows)
HORIZON 4;    -- making forecasts for the next year (next 4 rows)

Al ejecutar, obtenemos:

Query successfully completed

Una vez que se completa el proceso de entrenamiento, podemos consultar para obtener predicciones.

SELECT m.saledate AS date, m.MA AS forecast, MA_explain
FROM mindsdb.house_sales_predictor AS m
JOIN files.house_sales AS t
WHERE t.saledate > LATEST
AND t.type = 'house'
AND t.bedrooms = 2
LIMIT 4;

Al ejecutar, obtenemos:

+-------------+-------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| date        | forecast          | MA_explain                                                                                                                                                                                    |
+-------------+-------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| 2019-12-31  | 441413.5849598734 | {"predicted_value": 441413.5849598734, "confidence": 0.99, "anomaly": true, "truth": null, "confidence_lower_bound": 440046.28237074096, "confidence_upper_bound": 442780.88754900586}        |
| 2020-04-01  | 443292.5194586229 | {"predicted_value": 443292.5194586229, "confidence": 0.9991, "anomaly": null, "truth": null, "confidence_lower_bound": 427609.3325864327, "confidence_upper_bound": 458975.7063308131}        |
| 2020-07-02  | 443292.5194585953 | {"predicted_value": 443292.5194585953, "confidence": 0.9991, "anomaly": null, "truth": null, "confidence_lower_bound": 424501.59192981094, "confidence_upper_bound": 462083.4469873797}       |
| 2020-10-02  | 443292.5194585953 | {"predicted_value": 443292.5194585953, "confidence": 0.9991, "anomaly": null, "truth": null, "confidence_lower_bound": 424501.59192981094, "confidence_upper_bound": 462083.4469873797}       |
+-------------+-------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+

Para más detalles, consultaeste tutorial.

Modelos de Lenguaje Grande

Los modelos de lenguaje grande son sistemas avanzados de inteligencia artificial diseñados para procesar y generar lenguaje similar al humano. Estos modelos aprovechan técnicas de aprendizaje profundo, como las arquitecturas de transformadores, para analizar grandes cantidades de datos de texto y aprender patrones y relaciones complejas dentro del lenguaje.

Los modelos de lenguaje grande tienen aplicaciones en chatbots, generación de contenido, traducción de idiomas, análisis de sentimientos y diversas tareas de procesamiento del lenguaje natural.

Ejemplo

Consulta ejemplos aquí:

Cómo Funciona en el Fondo

MindsDB utiliza el motor ML Lightwood por defecto. Esta sección examina más de cerca cómo este paquete elige automáticamente qué tipo de modelo usar.

Los modelos en Lightwood siguen un patrón de codificador-mezclador-decodificador, donde las representaciones refinadas, o codificadas, de todas las características se mezclan para producir predicciones objetivo. Aquí estánlos mezcladores utilizados por Lightwood.

Ten en cuenta que hay un paso de ensamblaje después de entrenar todos los mezcladores en caso de que se utilicen múltiples mezcladores. Sigue leyendo para saber más.

Para darte algunos detalles sobre cómo MindsDB crea un modelo usando diferentes mezcladores, aquí estáel código completo.

Y aquí viene el desglose:

  • Estefragmento de códigoañade mezcladores al arraysubmodelsdependiendo del tipo de modelo y el tipo de datos de la variable objetivo.
  • Yaquí, elegimos el mejor de los submodelos para ser utilizado para crear, entrenar y validar nuestros modelos de IA.

Profundicemos en los detalles de cómo MindsDB elige los mezcladores.

Aquí está elfragmento de códigoque se está analizando.

Si tratamos con un par simple de codificador/decodificador realizando la tarea, usamos el mezcladorUnitque puede considerarse como un mezclador de bypass.

Un buen ejemplo es elmodelo Clasificador de Spam de Hugging Faceporque utiliza una sola columna como entrada.

De lo contrario, elegimos entre una gama de otros mezcladores dependiendo de las siguientes condiciones:


MindsDB puede usar uno o múltiples mixers mientras prepara un modelo. Dependiendo del tipo de modelo y el tipo de datos de la variable objetivo, se elige un mixer o se ensambla un conjunto de mixers para crear, entrenar y validar modelos de IA.

Los tres casos anteriores describen cómo MindsDB elige los candidatos a mixer y los almacena en el submodels array.

Por defecto, después de entrenar todos los mixers relevantes en el submodels array, MindsDB usa el BestOf ensemble para seleccionar el mejor mixer como el modelo final.

Pero siempre puedes usar un ensemble diferente que puede agregar múltiples mixers por modelo, como el MeanEnsemble, ModeEnsemble, StackedEnsemble, TsStackedEnsemble, o WeightedMeanEnsemble tipo de ensemble. Aquí, encontrarás implementaciones de todos los tipos de ensemble.