首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >对两个FeatureCollections执行准确性评估

对两个FeatureCollections执行准确性评估
EN

Stack Overflow用户
提问于 2020-08-26 16:32:17
回答 1查看 31关注 0票数 0

我想对包含多边形形式的湖泊的两个FeatureCollections执行二进制精度评估(ErrorMatrix)。一个集合包含分类结果(需要将光栅转换为矢量,以计算区域大小并删除较小的对象),另一个集合包含表示现实的验证数据。多边形表示属性为landcover 1的湖泊。如何合并两个集合以拥有执行ErrorMatrix()所需的特定列?我尝试使用这里描述的https://developers.google.com/earth-engine/guides/joins_spatial方法,但似乎对ErrorMatrix()不起作用。有没有其他方法可以为两个FeatureCollections创建混淆矩阵?

EN

回答 1

Stack Overflow用户

发布于 2020-08-30 13:09:01

我找到了以下问题的解决方案:我可以使用ROC分析的方法来计算真假分类区域。下面是我的函数:

代码语言:javascript
运行
AI代码解释
复制
var validateLakes = function(classified, truth){
  //clip classified lakes to sampleareas
  classified = classified.filterBounds(sampleareas);
  
  //convert required FeatureCollections to single multipolygon Feature
  var classified_union = ee.Feature(classified.union().first());
  truth = ee.Feature(truth.union().first());
  var area = ee.Feature(sampleareas.union().first());
  
  //calculate tp, tf, fp & fn areas
  var tp = classified_union.intersection(truth);
  var tn = area.difference(classified_union.union(truth));
  var fp = classified_union.difference(truth);
  var fn = truth.difference(classified_union);
  
  /*
  //check results
  Map.addLayer(tp, {palette: 'FF0000'}, 'tp');
  Map.addLayer(tn, {palette: 'FF0000'}, 'tn');
  Map.addLayer(fp, {palette: 'FF0000'}, 'fp');
  Map.addLayer(fn, {palette: 'FF0000'}, 'fn');
  */
  
  //calculate size of areas
  var tp_area = ee.Number(tp.area());
  var tn_area = ee.Number(tn.area());
  var fp_area = ee.Number(fp.area());
  var fn_area = ee.Number(fn.area());
  
  //calculate tpr, fdr and accuracy
  //tpr = tp / (tp + fn)
  var tpr = tp_area.divide(tp_area.add(fn_area));
  //fdr = tp / (fp + tp)
  var fdr = fp_area.divide(fp_area.add(tp_area));
  //accuracy = (tp + tn) / (tp + tn + fp + fn)
  var numerator = tp_area.add(tn_area);
  var denominator = tp_area.add(tn_area.add(fp_area.add(fn_area)));
  var accuracy = numerator.divide(denominator);

  //function for adding values to classfied FeatureCollection
  var addProps = function(feature){
    feature = feature.set('TPR', tpr);
    feature = feature.set('FDR', fdr);
    feature = feature.set('ACCURACY', accuracy);
    return feature;
  };

  //return classified Collection with new properties
  return classified.map(addProps);
};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63601925

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档