Clasificación no supervisada (agrupamiento en clústeres)

El paquete ee.Clusterer controla la clasificación no supervisada (o agrupamiento) en Earth Engine. Actualmente, estos algoritmos se basan en los algoritmos con el mismo nombre en Weka. Puedes obtener más detalles sobre cada Clusterer en los documentos de referencia.

Los agrupadores se usan de la misma manera que los clasificadores en Earth Engine. El flujo de trabajo general para el agrupamiento es el siguiente:

  1. Reúne atributos con propiedades numéricas en las que encontrar clústeres.
  2. Crea una instancia de un agrupador. Establece sus parámetros si es necesario.
  3. Entrena el clúster con los datos de entrenamiento.
  4. Aplica el agrupador a una imagen o a una colección de componentes.
  5. Etiqueta los clústeres.

Los datos de entrenamiento son un FeatureCollection con propiedades que se ingresarán al agrupador. A diferencia de los clasificadores, no hay un valor de clase de entrada para un Clusterer. Al igual que los clasificadores, se espera que los datos de los pasos de entrenamiento y aplicación tengan la misma cantidad de valores. Cuando se aplica un agrupador entrenado a una imagen o tabla, asigna un ID de clúster de número entero a cada píxel o componente.

Este es un ejemplo sencillo de cómo compilar y usar un ee.Clusterer:

Editor de código (JavaScript)

// Define a region in which to generate a segmented map.
var region = ee.Geometry.Rectangle(29.7, 30, 32.5, 31.7);

// Load a Landsat composite for input.
var input = ee.ImageCollection('LANDSAT/COMPOSITES/C02/T1_L2_32DAY')
  .filterDate('2001-05', '2001-06')
  .first()
  .clip(region);

// Display the sample region.
Map.setCenter(31.5, 31.0, 8);
Map.addLayer(ee.Image().paint(region, 0, 2), {}, 'region');

// Make the training dataset.
var training = input.sample({
  region: region,
  scale: 30,
  numPixels: 5000
});

// Instantiate the clusterer and train it.
var clusterer = ee.Clusterer.wekaKMeans(15).train(training);

// Cluster the input using the trained clusterer.
var result = input.cluster(clusterer);

// Display the clusters with random colors.
Map.addLayer(result.randomVisualizer(), {}, 'clusters');

Configuración de Python

Consulta la página Entorno de Python para obtener información sobre la API de Python y el uso de geemap para el desarrollo interactivo.

import ee
import geemap.core as geemap

Colab (Python)

# Define a region in which to generate a segmented map.
region = ee.Geometry.Rectangle(29.7, 30, 32.5, 31.7)

# Load a Landsat composite for input.
input = (
    ee.ImageCollection('LANDSAT/COMPOSITES/C02/T1_L2_32DAY')
    .filterDate('2001-05', '2001-06')
    .first()
    .clip(region)
)

# Display the sample region.
m = geemap.Map()
m.set_center(31.5, 31.0, 8)
m.add_layer(ee.Image().paint(region, 0, 2), {}, 'region')

# Make the training dataset.
training = input.sample(region=region, scale=30, numPixels=5000)

# Instantiate the clusterer and train it.
clusterer = ee.Clusterer.wekaKMeans(15).train(training)

# Cluster the input using the trained clusterer.
result = input.cluster(clusterer)

# Display the clusters with random colors.
m.add_layer(result.randomVisualizer(), {}, 'clusters')
m

Nota:

  • Las mismas entradas siempre deben producir los mismos resultados, pero reordenarlas puede cambiar los resultados.
  • El entrenamiento con tan solo 10 bandas × 100,000 puntos puede producir un error de memoria insuficiente.
  • Cobweb puede tardar mucho tiempo en terminar y producir una gran cantidad de clústeres.
  • Los clústeres de salida y sus IDs dependen del algoritmo y de las entradas.