ee.Classifier.smileKNN

יוצרת מסווג k-NN ריק.

אלגוריתם השכן הקרוב ביותר (k-NN) הוא שיטה לסיווג אובייקטים לפי רוב קולות של השכנים שלהם. האובייקט משויך לסיווג הנפוץ ביותר מבין k השכנים הקרובים ביותר שלו (k הוא מספר שלם חיובי, בדרך כלל קטן, בדרך כלל אי-זוגי).

שימושהחזרות
ee.Classifier.smileKNN(k, searchMethod, metric)מסווג
ארגומנטסוגפרטים
kמספר שלם, ברירת מחדל: 1מספר השכנים לסיווג.
searchMethodמחרוזת, ברירת מחדל: AUTOשיטת החיפוש. הערכים הבאים הם חוקיים [AUTO, LINEAR_SEARCH, KD_TREE, COVER_TREE]:

  • ‫`AUTO` המערכת בוחרת בין KD_TREE לבין COVER_TREE בהתאם למספר המאפיינים. אם למאפיינים יש פחות מ-10 ממדים, נעשה שימוש ב-KD_TREE.
  • ‫`LINEAR_SEARCH` ביצועים טובים יותר בהשוואה לגישות של חלוקת המרחב (כמו עצי K-D) במרחבים עם יותר מממד אחד.
  • שיטת חיפוש השכן הקרוב ביותר `KD_TREE` באמצעות מבנה של מערך נתונים עם חלוקת מרחב לארגון נקודות במרחב k-ממדי. עצי KD לא מתאימים למציאת השכן הקרוב ביותר ביעילות במרחבים רב-ממדיים. ככלל, אם המימד הוא D, מספר הנקודות במערך הנתונים, N, צריך להיות N >> 2^D.
  • ‫`COVER_TREE` Cover tree הוא מבנה נתונים לחיפוש כללי של השכן הקרוב ביותר, שיעיל במיוחד במרחבים עם ממד פנימי קטן.

התוצאות עשויות להיות שונות בין שיטות החיפוש השונות של קשרי מרחק וערכי הסתברות. הביצועים והתוצאות עשויים להשתנות, ולכן מומלץ לעיין במסמכי התיעוד של SMILE ובספרות אחרת.

metricמחרוזת, ברירת מחדל: EUCLIDEANמדד המרחק שבו רוצים להשתמש. הערה: KD_TREE (ו-AUTO לממדים נמוכים) לא ישתמשו במדד שנבחר. האפשרויות הן:
  • ‫`EUCLIDEAN` – מרחק אוקלידי.
  • ‫`MAHALANOBIS` – מרחק מהלנוביס.
  • ‫‎`MANHATTAN` – מרחק מנהטן.
  • ‫`BRAYCURTIS` – מרחק בריי-קרטיס.

דוגמאות

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

בדף סביבת Python מפורט מידע על Python API ועל השימוש ב-geemap לפיתוח אינטראקטיבי.

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