今日分享:
Google Earth Engine(GEE)支援向量機分類
上一篇文章簡單實作了随機森林分類Google Earth Engine(GEE)随機森林分類,然後選的樣本點有點問題,導緻分類精度不高。
今天在上一次選樣本點的基礎上,又選了些樣本點進行分類,發現分類精度還是可以的。

是以今天來換一種分類方法,支援向量機分類(SVM)
主要參考Google Earth Engine(GEE)的官方文檔
01
—
GEE部分實作代碼
選擇研究區和資料集
var roi = ee.Geometry.Polygon(
[[[105.76168216373424, 38.90136066495491],
[105.76168216373424, 37.81375799864711],
[106.89327396060924, 37.81375799864711],
[106.89327396060924, 38.90136066495491]]], null, false);
Map.centerObject(roi,10)
// 定義一個對 Landsat 8 表面反射率圖像進行縮放和遮罩的函數。
function prepSrL8(image) {
// Develop masks for unwanted pixels (fill, cloud, cloud shadow).
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 getFactorImg = function(factorNames) {
var factorList = image.toDictionary().select(factorNames).values();
return ee.Image.constant(factorList);
};
var scaleImg = getFactorImg([
'REFLECTANCE_MULT_BAND_.|TEMPERATURE_MULT_BAND_ST_B10']);
var offsetImg = getFactorImg([
'REFLECTANCE_ADD_BAND_.|TEMPERATURE_ADD_BAND_ST_B10']);
var scaled = image.select('SR_B.|ST_B10').multiply(scaleImg).add(offsetImg);
// Replace original bands with scaled bands and apply masks.
return image.addBands(scaled, null, true)
.updateMask(qaMask).updateMask(saturationMask);
}
var landsat8col = ee.ImageCollection('LANDSAT/LC08/C02/T1_L2')
.filterDate('2021-07-01', '2021-09-30')
.filterBounds(roi)
.filter(ee.Filter.lte('CLOUD_COVER',5))//雲量設定
.map(prepSrL8)
.median();
var clip_L8_ = landsat8col.clip(roi)
還是與上一篇文章一樣Google Earth Engine(GEE)随機森林分類
建立并選擇樣本點,樣本點與之前随機分類選擇的樣本一緻
var training = Crop.merge(grassland).merge(Forest).merge(Urban).merge(Water).merge(Bareland);
print(training);
var trainingData = training.randomColumn('random')
var sample_training = trainingData.filter(ee.Filter.lte("random", 0.8));
var sample_validate = trainingData.filter(ee.Filter.gt("random", 0.8));
Map.addLayer(sample_training,{color:'red'},'分類樣本')
Map.addLayer(sample_validate,{color:'blue'},'驗證樣本')
然後就可以調用模型進行支援向量機分類(SVM)了
// Create an SVM classifier with custom parameters.
var classifier = ee.Classifier.libsvm({
kernelType: 'RBF',
gamma: 0.5,
cost: 10
});
// Train the classifier.
var trained = classifier.train(training, 'class', bands);
// Classify the image.
var classified_SVM = clip_L8_.classify(trained)
Map.addLayer(classified_SVM.clip(roi),{min: 0, max: 5,
palette: ['c0c220','26ff4a','7eff8d','ff4e28','319599',"989990"]}, 'classified_SVM');
然後就可以用混淆矩陣法去計算分類精度和kappa系數
// 總體分類精度
var accuracy = testAccuracy.accuracy();
// Kappa系數
var kappa = testAccuracy.kappa();
最後就是導出分類後的結果了
Export.image.toDrive({
image: classified_SVM,
description: 'SVM2021a',
crs: "EPSG:32649",
scale: 30,
region: roi,
maxPixels: 1e13,
folder: 'classified'
});
02
—
結果顯示