Tutorial: Creazione di modelli di clustering K-means - Amazon Redshift

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Tutorial: Creazione di modelli di clustering K-means

In questo tutorial, viene utilizzato Amazon Redshift ML per creare, addestrare e distribuire un modello di machine learning basato sull'algoritmo k-means. Questo algoritmo risolve i problemi di clustering in cui si desidera individuare i raggruppamenti nei dati. K-means aiuta a raggruppare i dati non ancora etichettati. Per ulteriori informazioni sul clustering K-means, consulta How K-means Clustering Works nella Amazon Developer Guide. SageMaker

Utilizzerai un'CREATEMODELoperazione per creare un modello K-means da un cluster Amazon Redshift. Puoi usare un CREATE MODEL comando per esportare dati di addestramento, addestrare un modello, importare il modello e preparare una funzione di previsione di Amazon Redshift. Usa l'CREATEMODELoperazione per specificare i dati di addestramento come tabella o dichiarazioneSELECT.

In questo tutorial, utilizzi K-means sul set di dati Global Database of Events, Language, and Tone (GDELT), che monitora le notizie mondiali in tutto il mondo e i dati vengono archiviati per ogni secondo di ogni giorno. K-means raggrupperà eventi con toni, soggetti o luoghi simili. I dati vengono archiviati in più file su Amazon Simple Storage Service, in due cartelle diverse. Le cartelle sono storiche, ovvero riferite agli 1979-2013, con aggiornamenti quotidiani riferiti agli anni 2013 e successivi. In questo esempio, viene usato formato storico e vengono acquisiti i dati relativi al 1979.

Esempi di casi d'uso

Puoi risolvere altri problemi di clustering con Amazon Redshift ML, ad esempio il raggruppamento di clienti con abitudini di visualizzazione simili su un servizio di streaming. Puoi anche utilizzare Redshift ML per prevedere il numero ottimale di centri di spedizione per un servizio di consegna.

Attività

  • Prerequisiti

  • Passaggio 1: caricamento dei dati da Amazon S3 ad Amazon Redshift

  • Passaggio 2: creazione del modello di machine learning

  • Passaggio 3: esecuzione di previsioni con il modello

Prerequisiti

Per completare questo tutorial, è necessario completare la configurazione amministrativa di Amazon Redshift ML.

Passaggio 1: caricamento dei dati da Amazon S3 ad Amazon Redshift

  1. Utilizza l'editor di query v2 di Amazon Redshift per eseguire la seguente query. La query elimina la tabella gdelt_data nello schema pubblico, se esiste, e crea una tabella con lo stesso nome nello schema pubblico.

    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 );
  2. La seguente query carica i dati di esempio nella tabella gdelt_data.

    COPY gdelt_data FROM 's3://gdelt-open-data/events/1979.csv' REGION 'us-east-1' IAM_ROLE default CSV DELIMITER '\t';

Verifica dei dati di addestramento (facoltativo)

Per vedere in base a quali dati verrà addestrato il modello, usa la seguente query.

SELECT AvgTone, EventCode, NumArticles, Actor1Geo_Lat, Actor1Geo_Long, Actor2Geo_Lat, Actor2Geo_Long FROM gdelt_data LIMIT 100;

Passaggio 2: creazione del modello di machine learning

L'esempio seguente utilizza il CREATE MODEL comando per creare un modello che raggruppa i dati in sette cluster. Il valore K è il numero di cluster in cui sono suddivisi i punti dati. Il modello classifica i punti dati in cluster in cui i punti dati sono più simili tra loro. Suddividendo i punti dati in gruppi, l'algoritmo K-Means determina iterativamente il centroide del cluster migliore. L'algoritmo assegna quindi ogni punto dati al centroide del cluster più vicino. I membri più vicini allo stesso centroide del cluster appartengono allo stesso gruppo. I membri di un gruppo sono il più simili possibile agli altri membri dello stesso gruppo e il più possibile diversi dai membri di altri gruppi. Il valore K è soggettivo e dipende dai metodi che misurano le somiglianze tra i punti dati. È possibile modificare il valore K per uniformare le dimensioni dei cluster se i cluster sono distribuiti in modo non uniforme.

Nell'esempio seguente, sostituisci amzn-s3-demo-bucket con il tuo bucket Amazon S3.

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');

Verifica dello stato dell'addestramento del modello (facoltativo)

Puoi usare il comando per sapere quando il tuo modello è pronto. SHOW MODEL

Per verificare lo stato del modello, utilizzate la seguente SHOW MODEL operazione e verificate se lo Model State èReady.

SHOW MODEL NEWS_DATA_CLUSTERS;

Se il modello è pronto, l'output dell'operazione precedente dovrebbe indicare che Model State è Ready. Di seguito è riportato un esempio del risultato dell'SHOWMODELoperazione.

+--------------------------+------------------------------------------------------------------------------------------------------+ | 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 | +--------------------------+------------------------------------------------------------------------------------------------------+

Passaggio 3: esecuzione di previsioni con il modello

Identificazione dei cluster

È possibile trovare raggruppamenti discreti, noti anche come cluster, identificati nei dati dal modello. Un cluster è l'insieme di punti dati più vicini al centroide del cluster rispetto a qualsiasi altro centroide. Poiché il valore K rappresenta il numero di cluster nel modello, rappresenta anche il numero di centroidi del cluster. La seguente query identifica i cluster mostrando il cluster associato a ciascuno globaleventid.

SELECT globaleventid, news_monitoring_cluster ( AvgTone, EventCode, NumArticles, Actor1Geo_Lat, Actor1Geo_Long, Actor2Geo_Lat, Actor2Geo_Long ) AS cluster FROM gdelt_data;

Verifica della distribuzione dei dati

Puoi controllare la distribuzione dei dati tra i cluster per vedere se il valore K scelto ha causato una distribuzione uniforme dei dati. Utilizza la seguente query per determinare se i dati sono distribuiti uniformemente tra i cluster.

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;

Nota: è possibile modificare il valore K per uniformare le dimensioni dei cluster se i cluster sono distribuiti in modo non uniforme.

Determinazione dei centroidi dei cluster

Un punto dati è più vicino al relativo centroide del cluster rispetto a qualsiasi altro centroide. Pertanto, la ricerca dei centroidi consente di definire i cluster.

Esegui la seguente query per determinare i centroidi dei cluster in base al numero di articoli per codice 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;

Visualizzazione delle informazioni sui punti dati in un cluster

Utilizza la seguente query per restituire i dati per i punti assegnati al quinto cluster. Gli articoli selezionati devono avere due soggetti.

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;

Visualizzazione dei dati sugli eventi con soggetti aventi lo stesso codice etnico

La seguente query conteggia il numero di articoli scritti sugli eventi con un tono positivo. La query richiede inoltre che i due soggetti abbiano lo stesso codice etnico e restituisce il cluster a cui è assegnato ciascun 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;

Per ulteriori informazioni su Amazon Redshift ML, fare riferimento ai seguenti collegamenti:

Per ulteriori informazioni sul machine learning, consulta la documentazione seguente: