ee.Classifier.smileKNN

Membuat pengklasifikasi k-NN kosong.

Algoritma k-nearest neighbor (k-NN) adalah metode untuk mengklasifikasikan objek berdasarkan suara terbanyak dari tetangganya, dengan objek yang ditetapkan ke kelas yang paling umum di antara k tetangga terdekatnya (k adalah bilangan bulat positif, biasanya kecil, biasanya ganjil).

PenggunaanHasil
ee.Classifier.smileKNN(k, searchMethod, metric)Pengklasifikasi
ArgumenJenisDetail
kBilangan bulat, default: 1Jumlah tetangga untuk klasifikasi.
searchMethodString, default: "AUTO"Metode penelusuran. Berikut adalah nilai yang valid [AUTO, LINEAR_SEARCH, KD_TREE, COVER_TREE]:

  • `AUTO` Memilih antara KD_TREE dan COVER_TREE, bergantung pada jumlah dimensi. Jika fitur memiliki kurang dari 10 dimensi, KD_TREE akan digunakan.
  • `LINEAR_SEARCH` Performa lebih baik daripada pendekatan partisi ruang (seperti K-D tree) dalam ruang dimensi yang lebih tinggi.
  • Metode penelusuran tetangga terdekat `KD_TREE` menggunakan struktur set data partisi ruang untuk mengatur titik dalam ruang k-dimensi. KD-tree tidak cocok untuk menemukan tetangga terdekat secara efisien dalam ruang berdimensi tinggi. Sebagai aturan umum, jika dimensi adalah D, maka jumlah titik dalam set data, N, harus N >> 2^D.
  • `COVER_TREE` Cover tree adalah struktur data untuk penelusuran tetangga terdekat generik, yang sangat efisien dalam ruang dengan dimensi intrinsik kecil.

Hasil dapat bervariasi antara metode penelusuran yang berbeda untuk kesamaan jarak dan nilai probabilitas. Karena performa dan hasil dapat bervariasi, lihat dokumentasi SMILE dan literatur lainnya.

metricString, default: "EUCLIDEAN"Metrik jarak yang akan digunakan. CATATAN: KD_TREE (dan AUTO untuk dimensi rendah) tidak akan menggunakan metrik yang dipilih. Opsinya adalah:
  • `EUCLIDEAN` - Jarak Euclidean.
  • `MAHALANOBIS` - Jarak Mahalanobis.
  • `MANHATTAN` - Jarak Manhattan.
  • `BRAYCURTIS` - Jarak Bray-Curtis.

Contoh

Editor Kode (JavaScript)

// Cloud masking for Landsat 8.
function maskL8sr(image) {
  var qaMask = image.select('QA_PIXEL').bitwiseAnd(parseInt('11111', 2)).eq(0);
  var saturationMask = image.select('QA_RADSAT').eq(0);

  // Apply the scaling factors to the appropriate bands.
  var opticalBands = image.select('SR_B.').multiply(0.0000275).add(-0.2);
  var thermalBands = image.select('ST_B.*').multiply(0.00341802).add(149.0);

  // Replace the original bands with the scaled ones and apply the masks.
  return image.addBands(opticalBands, null, true)
      .addBands(thermalBands, null, true)
      .updateMask(qaMask)
      .updateMask(saturationMask);
}

// Map the function over one year of data.
var collection = ee.ImageCollection('LANDSAT/LC08/C02/T1_L2')
                     .filterDate('2020-01-01', '2021-01-01')
                     .map(maskL8sr);

// Make a median composite.
var composite = collection.median();

// Demonstration labels.
var labels = ee.FeatureCollection('projects/google/demo_landcover_labels')

// Use these bands for classification.
var bands = ['SR_B2', 'SR_B3', 'SR_B4', 'SR_B5', 'SR_B6', 'SR_B7'];
// The name of the property on the points storing the class label.
var classProperty = 'landcover';

// Sample the composite to generate training data.  Note that the
// class label is stored in the 'landcover' property.
var training = composite.select(bands).sampleRegions(
    {collection: labels, properties: [classProperty], scale: 30});

// Train a kNN classifier.
var classifier = ee.Classifier.smileKNN(5).train({
  features: training,
  classProperty: classProperty,
});

// Classify the composite.
var classified = composite.classify(classifier);
Map.setCenter(-122.184, 37.796, 12);
Map.addLayer(classified, {min: 0, max: 2, palette: ['red', 'green', 'blue']});

Penyiapan Python

Baca halaman Lingkungan Python untuk mengetahui informasi tentang Python API dan penggunaan geemap untuk pengembangan interaktif.

import ee
import geemap.core as geemap

Colab (Python)

# Cloud masking for Landsat 8.
def mask_l8_sr(image):
  qa_mask = image.select('QA_PIXEL').bitwiseAnd(int('11111', 2)).eq(0)
  saturation_mask = image.select('QA_RADSAT').eq(0)

  # Apply the scaling factors to the appropriate bands.
  optical_bands = image.select('SR_B.').multiply(0.0000275).add(-0.2)
  thermal_bands = image.select('ST_B.*').multiply(0.00341802).add(149.0)

  # Replace the original bands with the scaled ones and apply the masks.
  return (
      image.addBands(optical_bands, None, True)
      .addBands(thermal_bands, None, True)
      .updateMask(qa_mask)
      .updateMask(saturation_mask)
  )


# Map the function over one year of data.
collection = (
    ee.ImageCollection('LANDSAT/LC08/C02/T1_L2')
    .filterDate('2020-01-01', '2021-01-01')
    .map(mask_l8_sr)
)

# Make a median composite.
composite = collection.median()

# Demonstration labels.
labels = ee.FeatureCollection('projects/google/demo_landcover_labels')

# Use these bands for classification.
bands = ['SR_B2', 'SR_B3', 'SR_B4', 'SR_B5', 'SR_B6', 'SR_B7']
# The name of the property on the points storing the class label.
class_property = 'landcover'

# Sample the composite to generate training data.  Note that the
# class label is stored in the 'landcover' property.
training = composite.select(bands).sampleRegions(
    collection=labels, properties=[class_property], scale=30
)

# Train a kNN classifier.
classifier = ee.Classifier.smileKNN(5).train(
    features=training, classProperty=class_property
)

# Classify the composite.
classified = composite.classify(classifier)

m = geemap.Map()
m.set_center(-122.184, 37.796, 12)
m.add_layer(
    classified, {'min': 0, 'max': 2, 'palette': ['red', 'green', 'blue']}
)
m