Google Earth Engine(GEE)支持向量机分类

今日分享:

Google Earth Engine(GEE)支持向量机分类

上一篇文章简单实现了随机森林分类Google Earth Engine(GEE)随机森林分类,然后选的样本点有点问题,导致分类精度不高。

今天在上一次选样本点的基础上,又选了些样本点进行分类,发现分类精度还是可以的。

54407dfc36f5c0602008ff314b2b8ae6.png

所以今天来换一种分类方法,支持向量机分类(SVM)

主要参考Google Earth Engine(GEE)的官方文档

4e78ea9b9fa89be558f49b8e1ef16c7a.png

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

结果显示

33b99a5910af03865e0255076ed06365.png

kappa系数为0.879.....,分类结果还是可以的。

但是与随机森林分类相比,支持向量机分类(SVM)的分类精度还是略低

c92109b3299cf253999b62ddc91aab53.png

完整代码请在公众号后台私信“0905支持向量机分类”

感谢关注,欢迎转发!

声明:仅供学习使用!

希望关注的朋友们转发,如果对你有帮助的话记得给小编点个赞或者在看

## ****更多内容请关注微信公众号“生态遥感监测笔记”**

  • 6
    点赞
  • 59
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

生态遥感监测笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值