Ga naar inhoud

Verbeteren van de classificatie

In de gesuperviseerde classificaties testten we reeds 3 'classifiers', waarvan de Random Forest classifier leidde tot een iets betere algemene accuraatheid. Desondanks ze al tot acceptabele percentages leidden, bestaan er enkele opties om de classificatie nog te verbeteren.

Aanpassen van het aantal trainingssamples en aanpassen sampling-strategie

De opgemaakte trainingssamples kunnen worden verbeterd door het aantal samples omhoog te trekken, of door de sampling-strategie aan te passen. In dit voorbeeld tekenden we zelf polygonen in op basis van visuele inspectie, waardoor we enkel de pixels werden aangeduid waar we relatief zeker waren van de desbetreffende klasse.

Een betere techniek zou erin bestaan om op voorhand willekeurige locaties door de computer aan te laten duiden, eventueel gestratificeerd per landbedekkingsklasse ('stratified sampling'). Deze methode zorgt er ook voor dat de bias zo goed als mogelijk wordt gereduceerd.

Hyperparameter tuning

In voorgaand classificatievoorbeeld hebben we de Random Forest classifier gebruikt, zonder veel aan de classifier te sleutelen. De manier waarop deze wordt toegepast kan wel een belangrijke invloed op de finale accuraatheid van het model. De initiele parameters waarmee het model worden kunnen worden gewijzigd, wat kan leiden tot een verbeterd resultaat. Zo kunnen we de belangrijkste parameters ntrees laten varieren en nagaan hoe dit de accuraatheid beïnvloedt.

   // Hyperparameter tuning. Lijst aanmaken met parameters te gebruiken voor nTrees: 
   var numTrees = ee.List.sequence(10, 100, 5); 

   //Functie aanmaken die de classifier traint en de accuraatheid bepaalt;
   var trainTestClassifier = function(ntree) {
      var classifier = ee.Classifier.smileRandomForest(ntree).train({
      features: traindata,
      classProperty: 'class',
      inputProperties: bands 
    });
   return testdata   //de testdata, na extractie van de S2-banden
         .classify(classifier)
         .errorMatrix('val','classification')
         .accuracy();
    }

   // Functie toepassen over elke ntree-waarde uit de ntree-lijst (mappen)
   var accuracies = numTrees.map(trainTestClassifier)

   // Simpele 'graph' die de accuraatheid per geteste ntrees weergeeft
   var ntreeGraph = ui.Chart.array.values({
    array: ee.Array(accuracies), 
    axis: 0, 
    xLabels: numTrees }).setOptions({ 
    hAxis: { title: 'Number of trees' }, 
    vAxis: { title: 'Accuracy' }, 
    title: 'Accuracy per number of trees' 
    })

  // Grafiek weergeven
   print(ntreeGraph)

Toevoegen van extra datalagen

Ook door de input-banden aan te passen of extra banden toe te voegen, kan er voor zorgen dat de onderscheiding van de klassen wordt verbeterd. Zo kan:

  • er hoogtedata (zgn. Digital Elevation Model of DEM) worden toegevoegd, waaruit bv de hellingsgraad van het terrein kan worden berekend. Zo kunnen landfeatures met een specifieke topografie zoals basins, kanalen, toppen, dalen, hellingen gemakkelijker worden geïdentificeerd.

  • er informatie uit berekende indices helpen voor versterking van verschillen tussen klassen, zoals NDVI, MNDWI of in de context van mangrove-classificatie de MVI.

Opdracht

Tracht je classificatie te verbeteren door:

  • enkele indices toe aan het Sentinel-2 beeld van vorige oefening, zoals de MVI, NDVI en NDWI.

  • Textuurmatrices toe te voegen. Zie hiervoor P5 - Textuur Gebruik deze keer enkel de Random Forest classifier. Bekijk de bekomen accuraatheid. Merk je verbeteringen op?