Klasyfikacja nienadzorowana (klasteryzacja)

Pakiet ee.Clusterer obsługuje klasyfikację bez nadzoru (czyli zagnieżdżanie) w Earth Engine. Obecnie te algorytmy są oparte na algorytmach o tej samej nazwie w Weka. Więcej informacji o każdym Clusterer znajdziesz w dokumentacji referencyjnej.

Używa się ich w taki sam sposób jak klasyfikatorów w Earth Engine. Ogólny proces grupowania:

  1. Zbierz cechy z właściwościami liczbowymi, w których chcesz znaleźć klastry.
  2. Tworzenie instancji klasyfikatora. W razie potrzeby ustaw jego parametry.
  3. Wytrenuj klasyfikator za pomocą danych treningowych.
  4. Zastosuj klasyfikator do obrazu lub zbioru cech.
  5. Oznacz klastry.

Dane szkoleniowe to FeatureCollection z właściwościami, które zostaną podane do użycia w klasterze. W przeciwieństwie do klasyfikatorów w przypadku elementu Clusterer nie ma wartości klasy wejściowej. Podobnie jak w przypadku klasyfikatorów, dane na potrzeby kroków trenowania i stosowania powinny mieć taką samą liczbę wartości. Gdy wytrenowany klasyfikator zostanie zastosowany do obrazu lub tabeli, przypisze on identyfikator liczbowy klastra do każdego piksela lub elementu.

Oto prosty przykład tworzenia i używania elementu ee.Clusterer:

Edytor kodu (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');

Konfiguracja Pythona

Informacje o interfejsie Python API i o używaniu pakietu geemap do programowania interaktywnego znajdziesz na stronie Python Environment.

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

Uwaga:

  • Te same dane wejściowe powinny zawsze dawać te same wyniki, ale ich zmiana może zmienić wyniki.
  • Trenowanie z zastosowaniem zaledwie 10 pasm * 100 tys. punktów może spowodować błąd braku pamięci.
  • Wykonywanie analizy metodą Cobweb może zająć dużo czasu i wygenerować dużą liczbę klastrów.
  • Wyjściowe klastry i ich identyfikatory zależą od algorytmu i danych wejściowych.