我想对包含多边形形式的湖泊的两个FeatureCollections执行二进制精度评估(ErrorMatrix)。一个集合包含分类结果(需要将光栅转换为矢量,以计算区域大小并删除较小的对象),另一个集合包含表示现实的验证数据。多边形表示属性为landcover 1的湖泊。如何合并两个集合以拥有执行ErrorMatrix()所需的特定列?我尝试使用这里描述的https://developers.google.com/earth-engine/guides/joins_spatial方法,但似乎对ErrorMatrix()不起作用。有没有其他方法可以为两个FeatureCollections创建混淆矩阵?
发布于 2020-08-30 13:09:01
我找到了以下问题的解决方案:我可以使用ROC分析的方法来计算真假分类区域。下面是我的函数:
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);
};
https://stackoverflow.com/questions/63601925
复制