ee.Classifier.libsvm

建立空白的支援向量機分類器。

用量傳回
ee.Classifier.libsvm(decisionProcedure, svmType, kernelType, shrinking, degree, gamma, coef0, cost, nu, terminationEpsilon, lossEpsilon, oneClass)分類器
引數類型詳細資料
decisionProcedure字串,預設值為「投票」用於分類的決策程序。可以是「Voting」或「Margin」。不適用於迴歸。
svmType字串,預設值為「C_SVC」SVM 類型。`C_SVC`、`NU_SVC`、`ONE_CLASS`、`EPSILON_SVR` 或 `NU_SVR` 其中之一。
kernelType字串,預設值為「LINEAR」核心類型。LINEAR (u′×v)、POLY ((γ×u′×v + coef₀)ᵈᵉᵍʳᵉᵉ)、RBF (exp(-γ×|u-v|²)) 或 SIGMOID (tanh(γ×u′×v + coef₀))。
shrinking布林值,預設值為 true是否使用縮減啟發式方法。
degree整數,預設值為 null多項式的次數。適用於 POLY 核心。
gamma浮點值,預設值為空值核心函式中的 Gamma 值。預設值為特徵數量的倒數。適用於 POLY、RBF 和 SIGMOID 核心。
coef0浮點值,預設值為空值核心函式中的 coef₀ 值。預設值為 0。適用於 POLY 和 SIGMOID 核心。
cost浮點值,預設值為空值費用 (C) 參數。默認為1。僅適用於 C-SVC、epsilon-SVR 和 nu-SVR。
nu浮點值,預設值為空值nu 參數。預設值為 0.5。僅適用於 nu-SVC、單一類別 SVM 和 nu-SVR。
terminationEpsilon浮點值,預設值為空值終止條件容差 (e)。預設值為 0.001。僅適用於 epsilon-SVR。
lossEpsilon浮點值,預設值為空值損失函式 (p) 中的 epsilon。預設值為 0.1。僅適用於 epsilon-SVR。
oneClass整數,預設值為 null單一類別 SVM 中要訓練的訓練資料類別。預設值為 0。僅適用於單一類別 SVM。可能的值為 0 和 1。分類器輸出內容為二進位 (0/1),且會與判定為屬於該類別的資料相符。

範例

程式碼編輯器 (JavaScript)

// A Sentinel-2 surface reflectance image, reflectance bands selected,
// serves as the source for training and prediction in this contrived example.
var img = ee.Image('COPERNICUS/S2_SR/20210109T185751_20210109T185931_T10SEG')
              .select('B.*');

// ESA WorldCover land cover map, used as label source in classifier training.
var lc = ee.Image('ESA/WorldCover/v100/2020');

// Remap the land cover class values to a 0-based sequential series.
var classValues = [10, 20, 30, 40, 50, 60, 70, 80, 90, 95, 100];
var remapValues = ee.List.sequence(0, 10);
var label = 'lc';
lc = lc.remap(classValues, remapValues).rename(label).toByte();

// Add land cover as a band of the reflectance image and sample 100 pixels at
// 10 m scale from each land cover class within a region of interest.
var roi = ee.Geometry.Rectangle(-122.347, 37.743, -122.024, 37.838);
var sample = img.addBands(lc).stratifiedSample({
  numPoints: 100,
  classBand: label,
  region: roi,
  scale: 10,
  geometries: true
});

// Add a random value field to the sample and use it to approximately split 80%
// of the features into a training set and 20% into a validation set.
sample = sample.randomColumn();
var trainingSample = sample.filter('random <= 0.8');
var validationSample = sample.filter('random > 0.8');

// Train an SVM classifier (C-SVM classification, voting decision procedure,
// linear kernel) from the training sample.
var trainedClassifier = ee.Classifier.libsvm().train({
  features: trainingSample,
  classProperty: label,
  inputProperties: img.bandNames()
});

// Get information about the trained classifier.
print('Results of trained classifier', trainedClassifier.explain());

// Get a confusion matrix and overall accuracy for the training sample.
var trainAccuracy = trainedClassifier.confusionMatrix();
print('Training error matrix', trainAccuracy);
print('Training overall accuracy', trainAccuracy.accuracy());

// Get a confusion matrix and overall accuracy for the validation sample.
validationSample = validationSample.classify(trainedClassifier);
var validationAccuracy = validationSample.errorMatrix(label, 'classification');
print('Validation error matrix', validationAccuracy);
print('Validation accuracy', validationAccuracy.accuracy());

// Classify the reflectance image from the trained classifier.
var imgClassified = img.classify(trainedClassifier);

// Add the layers to the map.
var classVis = {
  min: 0,
  max: 10,
  palette: ['006400' ,'ffbb22', 'ffff4c', 'f096ff', 'fa0000', 'b4b4b4',
            'f0f0f0', '0064c8', '0096a0', '00cf75', 'fae6a0']
};
Map.setCenter(-122.184, 37.796, 12);
Map.addLayer(img, {bands: ['B11', 'B8', 'B3'], min: 100, max: 3500}, 'img');
Map.addLayer(lc, classVis, 'lc');
Map.addLayer(imgClassified, classVis, 'Classified');
Map.addLayer(roi, {color: 'white'}, 'ROI', false, 0.5);
Map.addLayer(trainingSample, {color: 'black'}, 'Training sample', false);
Map.addLayer(validationSample, {color: 'white'}, 'Validation sample', false);

Python 設定

請參閱 Python 環境頁面,瞭解 Python API 和如何使用 geemap 進行互動式開發。

import ee
import geemap.core as geemap

Colab (Python)

# A Sentinel-2 surface reflectance image, reflectance bands selected,
# serves as the source for training and prediction in this contrived example.
img = ee.Image(
    'COPERNICUS/S2_SR/20210109T185751_20210109T185931_T10SEG'
).select('B.*')

# ESA WorldCover land cover map, used as label source in classifier training.
lc = ee.Image('ESA/WorldCover/v100/2020')

# Remap the land cover class values to a 0-based sequential series.
class_values = [10, 20, 30, 40, 50, 60, 70, 80, 90, 95, 100]
remap_values = ee.List.sequence(0, 10)
label = 'lc'
lc = lc.remap(class_values, remap_values).rename(label).toByte()

# Add land cover as a band of the reflectance image and sample 100 pixels at
# 10 m scale from each land cover class within a region of interest.
roi = ee.Geometry.Rectangle(-122.347, 37.743, -122.024, 37.838)
sample = img.addBands(lc).stratifiedSample(
    numPoints=100, classBand=label, region=roi, scale=10, geometries=True
)

# Add a random value field to the sample and use it to approximately split 80%
# of the features into a training set and 20% into a validation set.
sample = sample.randomColumn()
training_sample = sample.filter('random <= 0.8')
validation_sample = sample.filter('random > 0.8')

# Train an SVM classifier (C-SVM classification, voting decision procedure,
# linear kernel) from the training sample.
trained_classifier = ee.Classifier.libsvm().train(
    features=training_sample,
    classProperty=label,
    inputProperties=img.bandNames(),
)

# Get information about the trained classifier.
display('Results of trained classifier', trained_classifier.explain())

# Get a confusion matrix and overall accuracy for the training sample.
train_accuracy = trained_classifier.confusionMatrix()
display('Training error matrix', train_accuracy)
display('Training overall accuracy', train_accuracy.accuracy())

# Get a confusion matrix and overall accuracy for the validation sample.
validation_sample = validation_sample.classify(trained_classifier)
validation_accuracy = validation_sample.errorMatrix(label, 'classification')
display('Validation error matrix', validation_accuracy)
display('Validation accuracy', validation_accuracy.accuracy())

# Classify the reflectance image from the trained classifier.
img_classified = img.classify(trained_classifier)

# Add the layers to the map.
class_vis = {
    'min': 0,
    'max': 10,
    'palette': [
        '006400',
        'ffbb22',
        'ffff4c',
        'f096ff',
        'fa0000',
        'b4b4b4',
        'f0f0f0',
        '0064c8',
        '0096a0',
        '00cf75',
        'fae6a0',
    ],
}
m = geemap.Map()
m.set_center(-122.184, 37.796, 12)
m.add_layer(
    img, {'bands': ['B11', 'B8', 'B3'], 'min': 100, 'max': 3500}, 'img'
)
m.add_layer(lc, class_vis, 'lc')
m.add_layer(img_classified, class_vis, 'Classified')
m.add_layer(roi, {'color': 'white'}, 'ROI', False, 0.5)
m.add_layer(training_sample, {'color': 'black'}, 'Training sample', False)
m.add_layer(
    validation_sample, {'color': 'white'}, 'Validation sample', False
)
m