教師なし分類(クラスタリング)

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 は、アルゴリズムと入力によって異なります。