ee.Classifier.smileKNN

Crée un classificateur k-NN vide.

L'algorithme des k plus proches voisins (k-NN) est une méthode de classification des objets par vote majoritaire de leurs voisins. L'objet est attribué à la classe la plus courante parmi ses k plus proches voisins (k est un entier positif, généralement petit et impair).

UtilisationRenvoie
ee.Classifier.smileKNN(k, searchMethod, metric)Classificateur
ArgumentTypeDétails
kEntier, valeur par défaut : 1Nombre de voisins pour la classification.
searchMethodChaîne, valeur par défaut : "AUTO"Méthode de recherche. Les valeurs valides sont les suivantes : [AUTO, LINEAR_SEARCH, KD_TREE, COVER_TREE].

  • `AUTO` : choisit entre KD_TREE et COVER_TREE en fonction du nombre de dimensions. Si les caractéristiques comportent moins de 10 dimensions, KD_TREE est utilisé.
  • `LINEAR_SEARCH` : plus performant que les approches de partitionnement de l'espace (telles que les arbres k-d) dans les espaces de plus grande dimension.
  • `KD_TREE` : méthode de recherche du voisin le plus proche à l'aide d'une structure d'ensemble de données de partitionnement de l'espace pour organiser les points dans un espace k-dimensionnel. Les arbres k-d ne sont pas adaptés pour trouver efficacement le voisin le plus proche dans les espaces de grande dimension. En règle générale, si la dimensionnalité est D, le nombre de points dans l'ensemble de données, N, doit être N >> 2^D.
  • `COVER_TREE` : structure de données pour la recherche générique du voisin le plus proche, particulièrement efficace dans les espaces de petite dimension intrinsèque.

Les résultats peuvent varier entre les différentes méthodes de recherche pour les égalités de distance et les valeurs de probabilité. Étant donné que les performances et les résultats peuvent varier, consultez la documentation de SMILE et d'autres documents.

metricChaîne, valeur par défaut : "EUCLIDEAN"Métrique de distance à utiliser. REMARQUE : KD_TREE (et AUTO pour les faibles dimensions) n'utilisent pas la métrique sélectionnée. Options disponibles :
  • `EUCLIDEAN` : distance euclidienne.
  • `MAHALANOBIS` : distance de Mahalanobis.
  • `MANHATTAN` : distance de Manhattan.
  • `BRAYCURTIS` : distance de Bray-Curtis.

Exemples

Éditeur de code (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']});

Configuration de Python

Pour en savoir plus sur l'API Python et sur l'utilisation de geemap pour le développement interactif, consultez la page Environnement Python.

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