비지도 분류 (클러스터링)

ee.Clusterer 패키지는 Earth Engine에서 감독되지 않는 분류 (또는 클러스터링)를 처리합니다. 이러한 알고리즘은 현재 Weka에서 동일한 이름의 알고리즘을 기반으로 합니다. 각 Clusterer에 관한 자세한 내용은 참조 문서를 참고하세요.

클러스터링은 Earth Engine의 분류기와 동일한 방식으로 사용됩니다. 클러스터링의 일반적인 워크플로는 다음과 같습니다.

  1. 클러스터를 찾을 숫자 속성이 있는 지형지물을 조합합니다.
  2. 클러스터러를 인스턴스화합니다. 필요한 경우 매개변수를 설정합니다.
  3. 학습 데이터를 사용하여 클러스터링 도구를 학습시킵니다.
  4. 이미지 또는 지형지물 컬렉션에 클러스터링 도구를 적용합니다.
  5. 클러스터에 라벨을 지정합니다.

학습 데이터는 클러스터링 도구에 입력할 속성이 있는 FeatureCollection입니다. 분류기와 달리 Clusterer에는 입력 클래스 값이 없습니다. 분류기와 마찬가지로 학습 및 적용 단계의 데이터는 값의 개수가 동일해야 합니다. 학습된 클러스터링 도구를 이미지 또는 표에 적용하면 각 픽셀 또는 지형지물에 정수 클러스터 ID가 할당됩니다.

다음은 ee.Clusterer를 빌드하고 사용하는 간단한 예입니다.

코드 편집기 (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');

Python 설정

Python API 및 대화형 개발을 위한 geemap 사용에 관한 자세한 내용은 Python 환경 페이지를 참고하세요.

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

참고:

  • 동일한 입력은 항상 동일한 출력을 생성해야 하지만 입력 순서를 변경하면 결과가 달라질 수 있습니다.
  • 밴드 10개 * 점 10만 개로 학습하면 메모리 부족 오류가 발생할 수 있습니다.
  • Cobweb은 완료하는 데 시간이 오래 걸리고 다수의 클러스터를 생성할 수 있습니다.
  • 출력 클러스터와 클러스터 ID는 알고리즘과 입력에 따라 다릅니다.