Tutorial: Creación de modelos de agrupación en clústeres k-means
En este tutorial, utilizará Amazon Redshift ML para crear, entrenar e implementar un modelo de machine learning basado en el algoritmo k-means. Este algoritmo resuelve problemas en clústeres en los que desea descubrir agrupaciones en los datos. K-means ayuda a agrupar datos que aún no se han etiquetado. Para obtener más información sobre la agrupación en clústeres k-means, consulte Funcionamiento de la agrupación en clústeres de k-means en la Guía para desarrolladores de Amazon SageMaker.
Utilizará una operación CREATE MODEL para crear un modelo k-means a partir de un clúster de Amazon Redshift. Se puede utilizar un comando CREATE MODEL para exportar datos de entrenamiento, entrenar un modelo, importar ese modelo y preparar una función de predicción de Amazon Redshift. Utilice la operación CREATE MODEL para especificar los datos de entrenamiento en forma de tabla o con la instrucción SELECT.
En este tutorial, utilizará k-means en el conjunto de datos de Global Database of Events, Language, and Tone (GDELT)
Ejemplos de casos de uso
Puede resolver otros problemas de agrupamiento en clústeres con Amazon Redshift ML, como el agrupamiento de clientes que tienen hábitos de visualización similares en un servicio de streaming. También puede usar Redshift ML para predecir la cantidad óptima de centros de envío para un servicio de entrega.
Tareas
-
Requisitos previos
-
Paso 1: Cargar los datos desde Amazon S3 en Amazon Redshift
-
Paso 2: Crear el modelo de machine learning
-
Paso 3: Realizar predicciones con el modelo
Requisitos previos
Para completar este tutorial, debe realizar el procedimiento de configuración administrativa de Amazon Redshift ML.
Paso 1: Cargar los datos desde Amazon S3 en Amazon Redshift
-
Use el editor de consultas de Amazon Redshift v2 para ejecutar la siguiente consulta. La consulta descarta la tabla
gdelt_data
en el esquema público si existe y crea una tabla con el mismo nombre en el esquema público.DROP TABLE IF EXISTS gdelt_data CASCADE; CREATE TABLE gdelt_data ( GlobalEventId bigint, SqlDate bigint, MonthYear bigint, Year bigint, FractionDate double precision, Actor1Code varchar(256), Actor1Name varchar(256), Actor1CountryCode varchar(256), Actor1KnownGroupCode varchar(256), Actor1EthnicCode varchar(256), Actor1Religion1Code varchar(256), Actor1Religion2Code varchar(256), Actor1Type1Code varchar(256), Actor1Type2Code varchar(256), Actor1Type3Code varchar(256), Actor2Code varchar(256), Actor2Name varchar(256), Actor2CountryCode varchar(256), Actor2KnownGroupCode varchar(256), Actor2EthnicCode varchar(256), Actor2Religion1Code varchar(256), Actor2Religion2Code varchar(256), Actor2Type1Code varchar(256), Actor2Type2Code varchar(256), Actor2Type3Code varchar(256), IsRootEvent bigint, EventCode bigint, EventBaseCode bigint, EventRootCode bigint, QuadClass bigint, GoldsteinScale double precision, NumMentions bigint, NumSources bigint, NumArticles bigint, AvgTone double precision, Actor1Geo_Type bigint, Actor1Geo_FullName varchar(256), Actor1Geo_CountryCode varchar(256), Actor1Geo_ADM1Code varchar(256), Actor1Geo_Lat double precision, Actor1Geo_Long double precision, Actor1Geo_FeatureID bigint, Actor2Geo_Type bigint, Actor2Geo_FullName varchar(256), Actor2Geo_CountryCode varchar(256), Actor2Geo_ADM1Code varchar(256), Actor2Geo_Lat double precision, Actor2Geo_Long double precision, Actor2Geo_FeatureID bigint, ActionGeo_Type bigint, ActionGeo_FullName varchar(256), ActionGeo_CountryCode varchar(256), ActionGeo_ADM1Code varchar(256), ActionGeo_Lat double precision, ActionGeo_Long double precision, ActionGeo_FeatureID bigint, DATEADDED bigint );
-
La siguiente consulta carga los datos de muestra en la tabla
gdelt_data
.COPY gdelt_data FROM 's3://gdelt-open-data/events/1979.csv' REGION 'us-east-1' IAM_ROLE default CSV DELIMITER '\t';
Examinar los datos de entrenamiento (opcional)
Para ver en qué datos se entrenará su modelo, utilice la siguiente consulta.
SELECT AvgTone, EventCode, NumArticles, Actor1Geo_Lat, Actor1Geo_Long, Actor2Geo_Lat, Actor2Geo_Long FROM gdelt_data LIMIT 100;
Paso 2: Crear el modelo de machine learning
El siguiente ejemplo utiliza el comando CREATE MODEL para crear un modelo que agrupa los datos en siete clústeres. El valor K es el número de clústeres en los que se dividen los puntos de datos. El modelo clasifica los puntos de datos en clústeres en los que los puntos de datos son más similares entre sí. A través de la agrupación en clústeres de los puntos de datos en grupos, el algoritmo k-means determina de forma iterativa el mejor centro del clúster. A continuación, el algoritmo asigna cada punto de datos al centro del clúster más cercano. Los miembros más cercanos al mismo centro del clúster pertenecen al mismo grupo. Los miembros de un grupo son lo más parecido posible a otros miembros del mismo grupo y lo más diferente posible de los miembros de otros grupos. El valor K es subjetivo y depende de los métodos que miden las similitudes entre los puntos de datos. Puede cambiar el valor K para suavizar los tamaños de los clústeres si están distribuidos de manera desigual.
En el siguiente ejemplo, reemplace amzn-s3-demo-bucket por el bucket de Amazon S3 propio.
CREATE MODEL news_data_clusters FROM ( SELECT AvgTone, EventCode, NumArticles, Actor1Geo_Lat, Actor1Geo_Long, Actor2Geo_Lat, Actor2Geo_Long FROM gdelt_data ) FUNCTION news_monitoring_cluster IAM_ROLE default AUTO OFF MODEL_TYPE KMEANS PREPROCESSORS 'none' HYPERPARAMETERS DEFAULT EXCEPT (K '7') SETTINGS (S3_BUCKET 'amzn-s3-demo-bucket');
Comprobar el estado del entrenamiento del modelo (opcional)
Puede utilizar el comando SHOW MODEL para saber cuándo está listo el modelo.
Para comprobar el estado del modelo, utilice la siguiente operación SHOW MODEL y determine si Model State
es Ready
.
SHOW MODEL NEWS_DATA_CLUSTERS;
Cuando el modelo esté listo, la salida de la operación anterior debería mostrar que Model State
es Ready
. A continuación se muestra un ejemplo de la salida de la operación SHOW MODEL.
+--------------------------+------------------------------------------------------------------------------------------------------+ | Model Name | news_data_clusters | +--------------------------+------------------------------------------------------------------------------------------------------+ | Schema Name | public | | Owner | awsuser | | Creation Time | Fri, 17.06.2022 16:32:19 | | Model State | READY | | train:msd | 2973.822754 | | train:progress | 100.000000 | | train:throughput | 237114.875000 | | Estimated Cost | 0.004983 | | | | | TRAINING DATA: | | | Query | SELECT AVGTONE, EVENTCODE, NUMARTICLES, ACTOR1GEO_LAT, ACTOR1GEO_LONG, ACTOR2GEO_LAT, ACTOR2GEO_LONG | | | FROM GDELT_DATA | | | | | PARAMETERS: | | | Model Type | kmeans | | Training Job Name | redshiftml-20220617163219978978-kmeans | | Function Name | news_monitoring_cluster | | Function Parameters | avgtone eventcode numarticles actor1geo_lat actor1geo_long actor2geo_lat actor2geo_long | | Function Parameter Types | float8 int8 int8 float8 float8 float8 float8 | | IAM Role | default-aws-iam-role | | S3 Bucket | amzn-s3-demo-bucket | | Max Runtime | 5400 | | | | | HYPERPARAMETERS: | | | feature_dim | 7 | | k | 7 | +--------------------------+------------------------------------------------------------------------------------------------------+
Paso 3: Realizar predicciones con el modelo
Identificar los clústeres
Puede encontrar agrupaciones discretas identificadas en los datos por su modelo, también conocidas como clústeres. Un clúster es el conjunto de puntos de datos que está más cerca de su centro de clúster que de cualquier otro centro de clúster. Dado que el valor K representa el número de clústeres del modelo, también representa el número de centros de clúster. La siguiente consulta identifica los clústeres mostrando el clúster asociado a cada globaleventid
.
SELECT globaleventid, news_monitoring_cluster ( AvgTone, EventCode, NumArticles, Actor1Geo_Lat, Actor1Geo_Long, Actor2Geo_Lat, Actor2Geo_Long ) AS cluster FROM gdelt_data;
Comprobar la distribución de los datos
Puede comprobar la distribución de los datos entre los clústeres para ver si el valor K que eligió ha provocado que los datos se distribuyeran de manera uniforme. Utilice la siguiente consulta para determinar si los datos están distribuidos de manera uniforme en los clústeres.
SELECT events_cluster, COUNT(*) AS nbr_events FROM ( SELECT globaleventid, news_monitoring_cluster( AvgTone, EventCode, NumArticles, Actor1Geo_Lat, Actor1Geo_Long, Actor2Geo_Lat, Actor2Geo_Long ) AS events_cluster FROM gdelt_data ) GROUP BY 1;
Puede cambiar el valor K para suavizar los tamaños de los clústeres si no están distribuidos de manera uniforme.
Determinar los centros de clúster
Un punto de datos está más cerca de su centro de clúster que de cualquier otro centro de clúster. Por lo tanto, encontrar los centros de clúster le ayuda a definir los clústeres.
Ejecute la siguiente consulta para determinar los centros de clúster en función del número de artículos por código de evento.
SELECT news_monitoring_cluster ( AvgTone, EventCode, NumArticles, Actor1Geo_Lat, Actor1Geo_Long, Actor2Geo_Lat, Actor2Geo_Long ) AS events_cluster, eventcode, SUM(numArticles) AS numArticles FROM gdelt_data GROUP BY 1, 2;
Mostrar información sobre puntos de datos en un clúster
Utilice la siguiente consulta para devolver los datos de los puntos asignados al quinto clúster. Los artículos seleccionados deben tener dos actores.
SELECT news_monitoring_cluster ( AvgTone, EventCode, NumArticles, Actor1Geo_Lat, Actor1Geo_Long, Actor2Geo_Lat, Actor2Geo_Long ) AS events_cluster, eventcode, actor1name, actor2name, SUM(numarticles) AS totalarticles FROM gdelt_data WHERE events_cluster = 5 AND actor1name <> ' ' AND actor2name <> ' ' GROUP BY 1, 2, 3, 4 ORDER BY 5 desc;
Mostrar datos sobre eventos con actores del mismo código étnico
La siguiente consulta cuenta la cantidad de artículos escritos sobre eventos de tono positivo. La consulta también requiere que los dos actores tengan el mismo código étnico y devuelve a qué grupo está asignado cada evento.
SELECT news_monitoring_cluster ( AvgTone, EventCode, NumArticles, Actor1Geo_Lat, Actor1Geo_Long, Actor2Geo_Lat, Actor2Geo_Long ) AS events_cluster, SUM(numarticles) AS total_articles, eventcode AS event_code, Actor1EthnicCode AS ethnic_code FROM gdelt_data WHERE Actor1EthnicCode = Actor2EthnicCode AND Actor1EthnicCode <> ' ' AND Actor2EthnicCode <> ' ' AND AvgTone > 0 GROUP BY 1, 3, 4 HAVING (total_articles) > 4 ORDER BY 1, 2 ASC;
Temas relacionados de
Para obtener más información sobre Amazon Redshift ML, consulte la siguiente documentación:
Para obtener más información sobre machine learning, consulte la siguiente documentación: