ee.Classifier.smileKNN

Erstellt einen leeren k-NN-Klassifikator.

Der k-Nearest Neighbor-Algorithmus (k-NN) ist eine Methode zur Klassifizierung von Objekten durch eine Mehrheitsabstimmung ihrer Nachbarn. Das Objekt wird der Klasse zugewiesen, die unter seinen k nächsten Nachbarn am häufigsten vorkommt. „k“ ist eine positive Ganzzahl, in der Regel klein und ungerade.

NutzungAusgabe
ee.Classifier.smileKNN(k, searchMethod, metric)Klassifikator
ArgumentTypDetails
kGanzzahl, Standard: 1Die Anzahl der Nachbarn für die Klassifizierung.
searchMethodString, Standard: „AUTO“Suchmethode. Gültige Werte sind [AUTO, LINEAR_SEARCH, KD_TREE, COVER_TREE]:

  • `AUTO`: Wählt je nach Anzahl der Dimensionen zwischen KD_TREE und COVER_TREE aus. Wenn die Features weniger als 10 Dimensionen haben, wird KD_TREE verwendet.
  • `LINEAR_SEARCH`: In höherdimensionalen Räumen leistungsfähiger als Ansätze zur Raumaufteilung (z. B. K-D-Bäume).
  • `KD_TREE`: Methode zur Suche nach dem nächsten Nachbarn, bei der eine raumaufteilende Dataset-Struktur zum Organisieren von Punkten in einem k-dimensionalen Raum verwendet wird. KD-Bäume eignen sich nicht, um den nächsten Nachbarn in hochdimensionalen Räumen effizient zu finden. In der Regel gilt: Wenn die Dimensionalität D ist, sollte die Anzahl der Punkte im Dataset N >> 2^D sein.
  • `COVER_TREE`: Der Cover-Baum ist eine Datenstruktur für die allgemeine Suche nach dem nächsten Nachbarn, die besonders effizient in Räumen mit geringer intrinsischer Dimension ist.

Die Ergebnisse können je nach Suchmethode für Distanzverbindungen und Wahrscheinlichkeitswerte variieren. Da Leistung und Ergebnisse variieren können, sollten Sie die SMILE-Dokumentation und andere Literatur konsultieren.

metricString, Standard: „EUCLIDEAN“Der zu verwendende Distanzmesswert. HINWEIS: Bei KD_TREE (und AUTO für niedrige Dimensionen) wird der ausgewählte Messwert nicht verwendet. Folgende Optionen sind verfügbar:
  • `EUCLIDEAN`: Euklidischer Abstand.
  • `MAHALANOBIS`: Mahalanobis-Distanz.
  • `MANHATTAN`: Manhattan-Distanz.
  • `BRAYCURTIS`: Bray-Curtis-Distanz.

Beispiele

Code-Editor (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']});

Python einrichten

Weitere Informationen zur Python API und zur Verwendung von geemap für die interaktive Entwicklung finden Sie auf der Seite Python-Umgebung.

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