ee.Classifier.smileKNN

Tạo một trình phân loại k-NN trống.

Thuật toán k láng giềng gần nhất (k-NN) là một phương pháp phân loại các đối tượng bằng cách lấy phiếu đa số của các đối tượng láng giềng, trong đó đối tượng được chỉ định cho lớp phổ biến nhất trong số k đối tượng láng giềng gần nhất (k là một số nguyên dương, thường nhỏ, thường là số lẻ).

Cách sử dụngGiá trị trả về
ee.Classifier.smileKNN(k, searchMethod, metric)Công cụ phân loại
Đối sốLoạiThông tin chi tiết
kSố nguyên, mặc định: 1Số lượng lân cận để phân loại.
searchMethodChuỗi, mặc định: "AUTO"Phương thức tìm kiếm. Sau đây là các giá trị hợp lệ [AUTO, LINEAR_SEARCH, KD_TREE, COVER_TREE]. AUTO sẽ chọn giữa KD_TREE và COVER_TREE tuỳ thuộc vào số lượng phương diện. Kết quả có thể khác nhau giữa các phương pháp tìm kiếm khác nhau đối với các mối quan hệ về khoảng cách và giá trị xác suất. Vì hiệu suất và kết quả có thể khác nhau, hãy tham khảo tài liệu và các tài liệu khác của SMILE.
metricChuỗi, mặc định: "EUCLIDEAN"Chỉ số khoảng cách cần sử dụng. LƯU Ý: KD_TREE (và AUTO cho các phương diện thấp) sẽ không sử dụng chỉ số đã chọn. Các lựa chọn là:   "EUCLIDEAN" – Khoảng cách Euclide.   'MAHALANOBIS' – Khoảng cách Mahalanobis.   'MANHATTAN' – Khoảng cách Manhattan.   "BRAYCURTIS" – Khoảng cách Bray-Curtis.

Ví dụ

Trình soạn thảo mã (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']});

Thiết lập Python

Hãy xem trang Môi trường Python để biết thông tin về API Python và cách sử dụng geemap cho quá trình phát triển tương tác.

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