មេរៀនទី៦៖ ការចាត់ថ្នាក់គម្របដីដោយ Random Forest¶
ព័ត៌មានមេរៀន
រយៈពេលបង្រៀនដែលស្នើ៖ ៣ ម៉ោង · មេរៀនទី ៦ ក្នុងចំណោម ១៥
ផែនទីគម្របដី គឺជាផលិតផលដែលគេស្នើសុំញឹកញាប់បំផុតពីអ្នកជំនាញការយកព័ត៌មានពីចម្ងាយ៖ សម្រាប់ផែនការប្រើប្រាស់ដី ការគ្រប់គ្រងព្រៃឈើ ការវាយតម្លៃហានិភ័យទឹកជំនន់ និងការគណនាផ្ទៃដំណាំ។ ក្នុងសៀវភៅទី៣ យើងបានរៀនទ្រឹស្ដីនៃការចាត់ថ្នាក់ត្រួតពិនិត្យ លើរូបភាពមួយផ្ទាំងក្នុង QGIS។ មេរៀននេះធ្វើការងារដដែល ប៉ុន្តែលើខេត្តទាំងមូល ដោយប្រើ composite លក្ខណៈច្រើន និង Random Forest ក្នុង Earth Engine ហើយវាយតម្លៃភាពត្រឹមត្រូវឱ្យបានត្រឹមត្រូវ។
៦.១. គោលបំណងសិក្សា¶
បន្ទាប់ពីបញ្ចប់មេរៀន និស្សិតអាច៖
- ពិពណ៌នាលំហូរការងារចាត់ថ្នាក់ប្រាំបីជំហានក្នុង Earth Engine។
- រៀបចំលក្ខណៈ (ក្រុមរលក សន្ទស្សន៍ ទីសណ្ឋាន និងរដូវ) ជារូបភាពមួយសម្រាប់ classifier។
- ប្រមូល ឬនាំចូលចំណុចគំរូ ហើយបំបែកវាជាក្រុមបណ្ដុះបណ្ដាល និងផ្ទៀងផ្ទាត់ឱ្យបានត្រឹមត្រូវ។
- បណ្ដុះបណ្ដាល smileRandomForest ចាត់ថ្នាក់ composite ហើយពន្យល់ប៉ារ៉ាម៉ែត្រសំខាន់ៗ។
- គណនា និងបកស្រាយតារាងកំហុស OA PA UA និង Kappa ហើយគណនាផ្ទៃតាមថ្នាក់។
ចំណេះដឹងមុនត្រូវមាន¶
- មេរៀនទី៣៖ composite · មេរៀនទី៤៖ reducer ជាក្រុម និង pixelArea · មេរៀនទី៥៖ ហត្ថលេខាពេលវេលា។
- សៀវភៅទី៣៖ សញ្ញាណស្ពិចត្រាល់ ការចាត់ថ្នាក់ត្រួតពិនិត្យ និងតារាងកំហុស។
៦.២. ស្ថានភាពបើកមេរៀន៖ ផែនទីគម្របដីខេត្តកែប¶
មន្ទីររៀបចំដែនដីខេត្តកែប ត្រូវការផែនទីគម្របដីឆ្នាំ ២០២៤ ដែលមានថ្នាក់ប្រាំ៖ តំបន់សាងសង់ ដីទទេ ទឹក រុក្ខជាតិ និងស្រែ។ ពួកគេមានចំណុចត្រួតពិនិត្យដី (GCP) ជាច្រើនរយ ដែលប្រមូលរួចហើយពីការងារមុន។ ពួកគេក៏ចង់ដឹងថា ផែនទីត្រឹមត្រូវប៉ុណ្ណា និង ផ្ទៃនៃថ្នាក់នីមួយៗ ជាគីឡូម៉ែត្រការ៉េ។
សំណួរដែលមេរៀននេះឆ្លើយ៖
- តើត្រូវផ្ដល់អ្វីខ្លះឱ្យ classifier មើល ក្រៅពីក្រុមរលកពណ៌?
- តើចំណុចគំរូប៉ុន្មាន ហើយត្រូវដាក់នៅទីណា?
- តើ Random Forest ដំណើរការយ៉ាងដូចម្ដេច ហើយត្រូវកំណត់ប៉ារ៉ាម៉ែត្រអ្វីខ្លះ?
- តើត្រូវវាយតម្លៃភាពត្រឹមត្រូវដោយរបៀបណា ដើម្បីកុំឱ្យលេខនោះបំភាន់?
៦.៣. ទ្រឹស្ដីស្នូល¶
៦.៣.១. លំហូរការងារប្រាំបីជំហាន¶
អានរូបនេះ
- ជំហាន ១–២៖ រៀបចំរូបភាព និងលក្ខណៈ (features) ដែល classifier នឹងមើល។
- ជំហាន ៣–៦៖ ចំណុចគំរូ → តារាង → បណ្ដុះបណ្ដាល → ចាត់ថ្នាក់រូបភាពទាំងមូល។
- ជំហាន ៧–៨៖ វាយតម្លៃភាពត្រឹមត្រូវ មុនគណនាផ្ទៃ ឬចែករំលែកផែនទី។
ការចាត់ថ្នាក់ត្រួតពិនិត្យក្នុង Earth Engine មានប្រាំបីជំហាន៖ (១) composite ឥតពពក (២) បន្ថែមលក្ខណៈ (៣) ចំណុចគំរូដែលមានលក្ខណៈ landcover ជាលេខ ០ ១ ២… (៤) sampleRegions() ទាញតម្លៃក្រឡានៅចំណុចនីមួយៗ ទៅជាតារាង (៥) train() (៦) classify() (៧) វាយតម្លៃដោយ errorMatrix() និង (៨) គណនាផ្ទៃ និងនាំចេញ។ ជំហាន ១–២ និង ៧–៨ ជាញឹកញាប់សំខាន់ជាងការជ្រើស classifier ទៅទៀត។
៦.៣.២. លក្ខណៈ៖ អ្វីដែល classifier មើលឃើញ¶
អានរូបនេះ
- ទឹកទាបនៅ NIR និង SWIR (B5–B7)៖ ងាយបែងចែកបំផុត។
- តំបន់សាងសង់ និងដីទទេ ស្រដៀងគ្នានៅក្រុមរលកមើលឃើញ៖ ត្រូវការ SWIR ដើម្បីបែងចែក។
- របារបញ្ឈរ (± គម្លាតស្តង់ដារ) ត្រួតគ្នា៖ ដូច្នេះការចាត់ថ្នាក់មិនដែលល្អឥតខ្ចោះទេ។
Classifier មិន «មើល» រូបភាពដូចមនុស្សទេ។ វាឃើញតែតារាងលេខ៖ ក្រឡានីមួយៗ ជាជួរមួយ ហើយក្រុមរលកនីមួយៗ ជាជួរឈរមួយ។ ដូច្នេះគុណភាពនៃផែនទី អាស្រ័យលើថាជួរឈរទាំងនោះបែងចែកថ្នាក់បានល្អប៉ុណ្ណា។ លក្ខណៈដែលប្រើញឹកញាប់៖
| ប្រភេទ | ឧទាហរណ៍ | ជួយបែងចែក |
|---|---|---|
| ក្រុមរលកស្ពិចត្រាល់ | B2–B8 B11 B12 | ទឹក រុក្ខជាតិ ដី |
| សន្ទស្សន៍ | NDVI · NDBI · MNDWI · BSI | រុក្ខជាតិ · សំណង់ · ទឹក · ដីទទេ |
| ទីសណ្ឋាន | រយៈកម្ពស់ ជម្រាល (ALOS · SRTM) | ព្រៃភ្នំ ធៀបនឹងស្រែវាលទំនាប |
| រដូវ | composite ប្រាំង + វស្សា · ទំហំ harmonic | ស្រែ ធៀបនឹងស្មៅ និងព្រៃ |
| SAR | Sentinel-1 VV VH | ទឹក និងសំណង់ ក្នុងរដូវពពក |
function addIndices(img) {
var ndvi = img.normalizedDifference(['B8', 'B4']).rename('NDVI');
var ndbi = img.normalizedDifference(['B11', 'B8']).rename('NDBI');
var mndwi = img.normalizedDifference(['B3', 'B11']).rename('MNDWI');
var bsi = img.expression('((S + R) - (N + B)) / ((S + R) + (N + B))',
{S: img.select('B11'), R: img.select('B4'), N: img.select('B8'), B: img.select('B2')}).rename('BSI');
return img.addBands([ndvi, ndbi, mndwi, bsi]);
}
var alos = ee.ImageCollection('JAXA/ALOS/AW3D30/V3_2').select('DSM');
var dem = alos.mosaic().setDefaultProjection(alos.first().projection());
var terrain = dem.rename('elev').addBands(ee.Terrain.slope(dem).rename('slope'));
var features = addIndices(composite.select(['B2','B3','B4','B8','B11','B12']))
.addBands(terrain).clip(aoi);
ចំណាំ៖ ALOS AW3D30 ជា ImageCollection ដែលមានច្រើន tile ដូច្នេះត្រូវ mosaic()។ រូបភាព mosaic បាត់ប្រព័ន្ធកូអរដោនេដើម ហើយ ee.Terrain.slope() នឹងគណនាខុស លុះត្រាតែយើងដាក់វាវិញដោយ setDefaultProjection()។ Random Forest មិនត្រូវការ normalize ក្រុមរលកទេ ព្រោះវាបំបែកតាមកម្រិតនៃលក្ខណៈម្ដងមួយ។
៦.៣.៣. ចំណុចគំរូ¶
អានរូបនេះ
- ចំណុចត្រូវរាយពេញតំបន់ មិនប្រមូលផ្ដុំនៅកន្លែងតែមួយ។
- ថ្នាក់នីមួយៗត្រូវការចំណុចគ្រប់គ្រាន់ (៥០–១០០ ឡើងទៅ) និងតំណាងភាពខុសគ្នាក្នុងថ្នាក់ (ទឹកថ្លា ទឹកល្អក់…)។
- ចំណុចផ្ទៀងផ្ទាត់ ត្រូវតែដាច់ដោយឡែក៖ classifier មិនដែលឃើញវាពេលបណ្ដុះបណ្ដាលទេ។
ចំណុចគំរូ គឺជា «គ្រូ» របស់ classifier។ ចំណុចខ្សោយ ផ្ដល់ផែនទីខ្សោយ ទោះបីក្បួនដោះស្រាយល្អយ៉ាងណាក៏ដោយ។ គោលការណ៍៖
- គ្រប់គ្រាន់៖ យ៉ាងហោចណាស់ ៥០–១០០ ចំណុចក្នុងមួយថ្នាក់ ហើយច្រើនជាងនេះសម្រាប់ថ្នាក់ដែលចម្រុះ (ឧ. តំបន់សាងសង់ មានដំបូល ផ្លូវ និងដីចាក់បំពេញ)។
- រាយពេញតំបន់៖ មិនប្រមូលផ្ដុំនៅកន្លែងងាយស្រួលតែមួយ។
- តំណាងភាពខុសគ្នាក្នុងថ្នាក់៖ ទឹកថ្លា និងទឹកល្អក់ ស្រែមានទឹក និងស្រែស្ងួត។
- ច្បាស់លាស់៖ ជៀសវាងក្រឡាចម្រុះនៅគែមថ្នាក់ពីរ។
- លក្ខណៈជាលេខ៖
landcoverត្រូវជាចំនួនគត់ ០ ១ ២… មិនមែនអក្សរទេ។
ក្នុង Code Editor ប្រើ Geometry Tools គូរចំណុចសម្រាប់ថ្នាក់នីមួយៗជាស្រទាប់ដាច់ដោយឡែក ហើយកំណត់ Import as FeatureCollection ជាមួយលក្ខណៈ landcover។ ឬនាំចូលចំណុចពី QGIS (Shapefile · CSV) ទៅជា Asset។ បន្ទាប់មក៖
var gcps = urban.merge(bare).merge(water).merge(vegetation).merge(paddy);
var training = features.sampleRegions({
collection: gcps, properties: ['landcover'], scale: 10, tileScale: 16
});
print('ចំនួនជួរ', training.size(), training.first());
sampleRegions ត្រឡប់ FeatureCollection ដែលជួរនីមួយៗមាន landcover និងតម្លៃលក្ខណៈទាំងអស់។ ចំណុចដែលស្ថិតលើក្រឡាដែលបាន mask នឹង បាត់ ពីតារាង ដូច្នេះត្រូវពិនិត្យ size() ជានិច្ច។
៦.៣.៤. Random Forest¶
អានរូបនេះ
- ដើមឈើនីមួយៗរៀនពីគំរូចៃដន្យ (bootstrap) ហើយពិនិត្យតែផ្នែកនៃលក្ខណៈនៅការបំបែកនីមួយៗ។
- ដើមឈើខុសគ្នា ធ្វើកំហុសខុសគ្នា៖ ការបោះឆ្នោតភាគច្រើនកាត់បន្ថយកំហុសទាំងនោះ។
- ធន់នឹងលក្ខណៈច្រើន និងមិនត្រូវការ normalize ទិន្នន័យ៖ ៥០–១៥០ ដើមគ្រប់គ្រាន់ជាទូទៅ។
ដើមឈើសម្រេចចិត្ត (decision tree) បំបែកទិន្នន័យដោយសំណួរជាបន្តបន្ទាប់ ដូចជា «NDVI > ០,៤?» «MNDWI > ០?»។ ដើមឈើមួយងាយរៀនតាមលម្អិតនៃចំណុចគំរូ (overfitting)។ Random Forest បង្កើតដើមឈើរាប់សិប ឬរាប់រយ ដែលដើមនីមួយៗ៖
- រៀនពី គំរូចៃដន្យ នៃចំណុច (bootstrap · bagFraction)។
- ពិនិត្យតែ ផ្នែកចៃដន្យនៃលក្ខណៈ នៅការបំបែកនីមួយៗ (variablesPerSplit លំនាំដើម √ ចំនួនលក្ខណៈ)។
បន្ទាប់មកក្រឡានីមួយៗត្រូវបាន បោះឆ្នោតភាគច្រើន។ ដើមឈើខុសគ្នាធ្វើកំហុសខុសគ្នា ហើយការបោះឆ្នោតកាត់បន្ថយកំហុសទាំងនោះ។
var classifier = ee.Classifier.smileRandomForest({
numberOfTrees: 100, // ៥០–២០០ ជាទូទៅគ្រប់គ្រាន់
variablesPerSplit: null, // null = √ ចំនួនលក្ខណៈ
minLeafPopulation: 1,
bagFraction: 0.5,
seed: 42 // ឱ្យលទ្ធផលដដែលរាល់ពេលរត់
}).train({features: training, classProperty: 'landcover', inputProperties: features.bandNames()});
var classified = features.classify(classifier);
Map.addLayer(classified, {min: 0, max: 4, palette: ['red', '926829', '1488ff', 'green', 'fffcbf']}, 'គម្របដី');
Earth Engine មាន classifier ផ្សេងទៀត៖ smileCart (ដើមឈើតែមួយ ងាយពន្យល់) libsvm (SVM ត្រូវការ normalize) smileGradientTreeBoost និង minimumDistance។ Random Forest ជាជម្រើសលំនាំដើមល្អ ព្រោះវាធន់នឹងលក្ខណៈច្រើន មិនត្រូវការ normalize ហើយមានប៉ារ៉ាម៉ែត្រតិចដែលត្រូវកែ។
ពិសោធន៍៖ បណ្ដុះបណ្ដាល Random Forest លើរូបភាព Landsat ពិត
ជ្រើសចំនួនចំណុចក្នុងមួយថ្នាក់ ចំនួនដើមឈើ និងលក្ខណៈ រួចចុចបណ្ដុះបណ្ដាល។ Random Forest តូចមួយរត់ក្នុងកម្មវិធីរុករករបស់អ្នក លើរូបភាព Landsat 8 ពិតនៃភ្នំពេញ ហើយបង្ហាញផែនទី និងតារាងកំហុស។ សាកល្បងក្រុមរលកពណ៌តែបី ធៀបនឹងក្រុមរលកទាំងប្រាំមួយ។
៦.៣.៥. ការវាយតម្លៃភាពត្រឹមត្រូវ¶
អានរូបនេះ
- កំហុសប្រមូលផ្ដុំនៅគែមទីក្រុង និងរវាងដំណាំ/ស្មៅ ជាមួយដើមឈើ និងដីទទេ។
- ទឹក (ទន្លេមេគង្គ និងទន្លេសាប) ត្រឹមត្រូវស្ទើរទាំងស្រុង។
- នេះជាការចាត់ថ្នាក់ពិតលើរូបភាព Landsat 8 ពិត ប៉ុន្តែផែនទីយោងបានពីកម្រិតសន្ទស្សន៍ មិនមែនការស្ទង់វាលទេ។
អានរូបនេះ
- OA ៨៣% ប៉ុន្តែ PA នៃ «តំបន់សាងសង់» មានត្រឹម ៧០%៖ ថ្នាក់នេះច្រឡំច្រើនបំផុត។
- ជួរ = យោង · ជួរឈរ = ចាត់ថ្នាក់។ ក្រឡាក្រៅអង្កត់ទ្រូង ប្រាប់ថាថ្នាក់ណាច្រឡំជាមួយថ្នាក់ណា។
- ក្នុង Earth Engine៖ test.errorMatrix('landcover', 'classification') រួច .accuracy() .kappa() .producersAccuracy() .consumersAccuracy()។
ផែនទីដែលគ្មានការវាយតម្លៃភាពត្រឹមត្រូវ មិនមែនជាលទ្ធផលវិទ្យាសាស្ត្រទេ។ យើងទុកចំណុចមួយផ្នែក (ជាទូទៅ ៣០%) ដែល classifier មិនឃើញពេលបណ្ដុះបណ្ដាល ហើយប្រៀបធៀបថ្នាក់យោង និងថ្នាក់ដែលបានចាត់៖
var gcp = gcps.randomColumn('random', 42);
var trainGcp = gcp.filter(ee.Filter.lt('random', 0.7));
var validGcp = gcp.filter(ee.Filter.gte('random', 0.7)); // ត្រូវតែ 0.7 ដូចគ្នា
// ... train ជាមួយ trainGcp ...
var test = classified.sampleRegions({collection: validGcp, properties: ['landcover'], scale: 10, tileScale: 16});
var cm = test.errorMatrix('landcover', 'classification');
print('តារាងកំហុស', cm);
print('OA', cm.accuracy(), 'Kappa', cm.kappa());
print('PA', cm.producersAccuracy(), 'UA', cm.consumersAccuracy());
| រង្វាស់ | សំណួរដែលវាឆ្លើយ | ពីតារាង |
|---|---|---|
| Overall Accuracy (OA) | ចំណុចប៉ុន្មានភាគរយត្រូវបានចាត់ត្រឹមត្រូវ? | អង្កត់ទ្រូង ÷ សរុប |
| Producer's Accuracy (PA) | ក្នុងចំណោមស្រែពិត ប៉ុន្មានភាគរយត្រូវបានរកឃើញ? | អង្កត់ទ្រូង ÷ ផលបូកជួរដេក |
| User's Accuracy (UA) | ក្នុងចំណោមក្រឡាដែលផែនទីថាជាស្រែ ប៉ុន្មានភាគរយពិតជាស្រែ? | អង្កត់ទ្រូង ÷ ផលបូកជួរឈរ |
| Kappa | ល្អជាងការទាយដោយចៃដន្យប៉ុណ្ណា? | ០ = ចៃដន្យ · ១ = ឥតខ្ចោះ |
ក្នុង Earth Engine ជួរដេកគឺ យោង ហើយជួរឈរគឺ ចាត់ថ្នាក់។ UA ត្រូវបានហៅថា consumersAccuracy()។ ចំណាំថា OA ខ្ពស់អាចលាក់ថ្នាក់តូចដែលខ្សោយ៖ ត្រូវអាន PA និង UA នៃថ្នាក់នីមួយៗជានិច្ច។
៦.៣.៦. កុំឱ្យចំណុចផ្ទៀងផ្ទាត់ «លួចមើល»¶
អានរូបនេះ
- បំបែកក្រឡាដោយចៃដន្យ៖ ក្រឡាផ្ទៀងផ្ទាត់មានបងប្អូននៅក្នុងពហុកោណបណ្ដុះបណ្ដាល ហើយ OA ឡើងដល់ ៩២%។
- បំបែកពហុកោណមុន (randomColumn លើ FeatureCollection) ផ្ដល់ ៨៥% ជិតភាពត្រឹមត្រូវពិត ៨៣%។
- កុំបំបែកដោយ lt(0.7) និង gte(0.3)៖ ចំណុច ៤០% នឹងនៅក្នុងក្រុមទាំងពីរ។ ត្រូវប្រើ lt(0.7) និង gte(0.7)។
ក្រឡាដែលនៅជិតគ្នាស្រដៀងគ្នាខ្លាំង (spatial autocorrelation)។ ប្រសិនបើអ្នកគូរ ពហុកោណ បណ្ដុះបណ្ដាល ហើយបំបែក ក្រឡា ដោយចៃដន្យ ក្រឡាផ្ទៀងផ្ទាត់នីមួយៗមានបងប្អូននៅក្នុងពហុកោណដដែល ដែល classifier បានរៀនរួច។ OA ដែលបានគឺខ្ពស់ជាងការពិត។ ដំណោះស្រាយ៖
- បំបែក ពហុកោណ ឬចំណុច (randomColumn លើ FeatureCollection) មុន sampleRegions។
- ប្រើចំណុចផ្ទៀងផ្ទាត់ដែលប្រមូលដាច់ដោយឡែក (ឧ. ពីការស្ទង់វាល ឬរូបភាពគុណភាពខ្ពស់)។
- ប្រើកម្រិតដូចគ្នាក្នុង lt() និង gte()។
lt(0.7)ជាមួយgte(0.3)ធ្វើឱ្យចំណុច ៤០% នៅក្នុងក្រុមទាំងពីរ។
៦.៣.៧. កែលម្អការចាត់ថ្នាក់¶
អានរូបនេះ
- ក្រុមរលកមើលឃើញតែបី៖ OA ៦១%។ បន្ថែម NIR និង SWIR៖ ៨៣%។
- សន្ទស្សន៍បន្ថែម ២ ពិន្ទុទៀត ប៉ុន្តែផែនទីយោងនេះបានពីសន្ទស្សន៍ ដូច្នេះការកើនឡើងនេះលំអៀង៖ ក្នុងការងារពិត ត្រូវប្រើយោងឯករាជ្យ។
- ក្នុងលំហាត់ទី៦ អ្នកនឹងបន្ថែម NDVI NDBI MNDWI BSI និងរយៈកម្ពស់ ជម្រាល ពី DEM ទៅ composite។
នៅពេល OA ឬ PA/UA នៃថ្នាក់ណាមួយទាប សូមកែតាមលំដាប់នេះ៖
- អានតារាងកំហុស៖ ថ្នាក់ណាច្រឡំជាមួយថ្នាក់ណា? (ឧ. ដីទទេ ↔ តំបន់សាងសង់)
- បន្ថែមចំណុច នៅកន្លែងដែលច្រឡំ ហើយពិនិត្យចំណុចខុស (ចំណុចស្រែដែលធ្លាក់លើផ្លូវ)។
- បន្ថែមលក្ខណៈ ដែលបែងចែកថ្នាក់ទាំងពីរ៖ SWIR និង NDBI សម្រាប់ដីទទេ/សំណង់ composite វស្សាសម្រាប់ស្រែ/ស្មៅ ជម្រាលសម្រាប់ព្រៃភ្នំ។
- ពិនិត្យភាពសំខាន់នៃលក្ខណៈ៖
print(classifier.explain())ផ្ដល់importanceសម្រាប់លក្ខណៈនីមួយៗ។ - ចុងក្រោយ ទើបកែប៉ារ៉ាម៉ែត្រ classifier។ ការប្ដូរ ៥០ ទៅ ២០០ ដើម ជាទូទៅផ្ដល់តិចជាង ១–២ ពិន្ទុ។
៦.៣.៨. ផ្ទៃ និងការនាំចេញ¶
ដោយប្រើ reducer ជាក្រុមពីមេរៀនទី៤៖
var areas = ee.Image.pixelArea().divide(1e6).addBands(classified).reduceRegion({
reducer: ee.Reducer.sum().group({groupField: 1, groupName: 'landcover'}),
geometry: aoi.geometry(), scale: 10, maxPixels: 1e10, tileScale: 4
});
print('ផ្ទៃ (គម²)', areas.get('groups'));
Export.image.toDrive({image: classified.toByte(), description: 'LULC_2024', folder: 'applied_gis',
region: aoi.geometry(), scale: 10, crs: 'EPSG:32648', maxPixels: 1e10});
Export.table.toDrive({collection: ee.FeatureCollection([ee.Feature(null, {
matrix: cm.array(), oa: cm.accuracy(), kappa: cm.kappa()})]),
description: 'LULC_2024_accuracy', folder: 'applied_gis', fileFormat: 'CSV'});
toByte() ធ្វើឱ្យ GeoTIFF តូច ព្រោះលេខថ្នាក់ ០–២៥៥ សមនឹងមួយបៃ។ ផ្ទៃពីការរាប់ក្រឡា (pixel counting) មានលំអៀង ដែលអាស្រ័យលើកំហុសនៃផែនទី។ សម្រាប់របាយការណ៍ផ្លូវការ អ្នកស្រាវជ្រាវកែផ្ទៃដោយប្រើតារាងកំហុស (area-adjusted estimate) ដែលហួសពីវិសាលភាពនៃមេរៀននេះ ប៉ុន្តែគួរដឹងថាមាន។
៦.៤. ឧទាហរណ៍ដែលបានដោះស្រាយ៖ ផែនទីគម្របដីខេត្តកែប ២០២៤¶
ជំហានទី១៖ តំបន់ និងចំណុចគំរូ¶
យើងប្រើព្រំដែនខេត្ត និងចំណុច GCP ខេត្តកែប ដែលប្រមូលសម្រាប់វគ្គសិក្សានេះកាលពីមុន។ ចំណុចមានថ្នាក់ ០ តំបន់សាងសង់ ១ ដីទទេ ២ ទឹក ៣ រុក្ខជាតិ ៤ ស្រែ និង ៥ ពពក។ ដោយសារយើងលុបពពកមុនធ្វើ composite យើងមិនត្រូវការថ្នាក់ពពកទេ (មើលផ្នែក ៦.៦)។
var kep = ee.FeatureCollection('users/yamsarath168/rupp_wfp_applied_gisrs4drm/kh_province_boundary')
.filter(ee.Filter.eq('Name_EN', 'Kep'));
var gcps = ee.FeatureCollection('users/yamsarath168/rupp_wfp_applied_gisrs4drm/kep_gcps')
.filter(ee.Filter.lt('landcover', 5)); // ដកថ្នាក់ពពកចេញ
print('ចំណុចតាមថ្នាក់', gcps.aggregate_histogram('landcover'));
Map.centerObject(kep, 12);
ជំហានទី២៖ Composite និងលក្ខណៈ¶
function maskS2(img) {
var scl = img.select('SCL');
var ok = scl.neq(3).and(scl.neq(8)).and(scl.neq(9)).and(scl.neq(10));
return img.updateMask(ok).divide(10000);
}
var composite = ee.ImageCollection('COPERNICUS/S2_SR_HARMONIZED')
.filterBounds(kep).filterDate('2024-01-01', '2025-01-01')
.filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 40))
.map(maskS2).median();
var features = addIndices(composite.select(['B2','B3','B4','B8','B11','B12']))
.addBands(terrain).clip(kep);
ជំហានទី៣៖ បំបែក បណ្ដុះបណ្ដាល ចាត់ថ្នាក់¶
var gcp = gcps.randomColumn('random', 42);
var trainGcp = gcp.filter(ee.Filter.lt('random', 0.7));
var validGcp = gcp.filter(ee.Filter.gte('random', 0.7));
var training = features.sampleRegions({collection: trainGcp, properties: ['landcover'], scale: 10, tileScale: 16});
var classifier = ee.Classifier.smileRandomForest({numberOfTrees: 100, seed: 42})
.train({features: training, classProperty: 'landcover', inputProperties: features.bandNames()});
var classified = features.classify(classifier);
Map.addLayer(classified, {min: 0, max: 4, palette: ['red', '926829', '1488ff', 'green', 'fffcbf']}, 'កែប ២០២៤');
ជំហានទី៤៖ វាយតម្លៃ¶
var test = classified.sampleRegions({collection: validGcp, properties: ['landcover'], scale: 10, tileScale: 16});
var cm = test.errorMatrix('landcover', 'classification');
print(cm, 'OA', cm.accuracy(), 'Kappa', cm.kappa());
print('ភាពសំខាន់', ee.Dictionary(classifier.explain().get('importance')));
ជំហានទី៥៖ បកស្រាយ និងផ្ទៃ¶
អាន OA មុន បន្ទាប់មក PA និង UA នៃថ្នាក់នីមួយៗ។ ក្នុងខេត្តកែប ការច្រឡំដែលរំពឹងទុកគឺ ដីទទេ ↔ តំបន់សាងសង់ (ដីចាក់បំពេញ និងឆ្នេរខ្សាច់) និង ស្រែ ↔ រុក្ខជាតិ (ស្រែដែលមានស្មៅ ឬដើមឈើតូចៗ)។ ប្រសិនបើ PA នៃស្រែទាប សូមបន្ថែម composite រដូវវស្សា (ខែកក្កដា–តុលា) ជាលក្ខណៈបន្ថែម ព្រោះស្រែ និងរុក្ខជាតិដទៃខុសគ្នាច្បាស់ជាងនៅពេលនោះ។ រួចគណនាផ្ទៃតាមផ្នែក ៦.៣.៨។
«ផែនទីគម្របដីខេត្តកែប ២០២៤ (Sentinel-2 median · ១២ លក្ខណៈ · Random Forest ១០០ ដើម) មាន OA និង Kappa ដូចបានរាយការណ៍ ដោយវាយតម្លៃលើចំណុចផ្ទៀងផ្ទាត់ ៣០% ដែលមិនបានប្រើក្នុងការបណ្ដុះបណ្ដាល។ ផ្ទៃតាមថ្នាក់ត្រូវបានគណនាដោយ pixelArea។»
អ្វីដែលយើងមិនអាចសន្និដ្ឋាន
OA ពីចំណុចផ្ទៀងផ្ទាត់ដែលមកពីសំណុំដដែលនឹងចំណុចបណ្ដុះបណ្ដាល វាស់ថាម៉ូដែលធ្វើការបានល្អប៉ុណ្ណានៅកន្លែងដែលមនុស្សជ្រើសចំណុច មិនមែននៅគ្រប់កន្លែងទេ។ ផ្ទៃពីការរាប់ក្រឡាក៏មានកំហុស ដែលមិនត្រូវបានកែនៅទីនេះទេ។
៦.៥. សកម្មភាពអនុវត្ត¶
- លំហាត់ទី៦៖ គូរចំណុចគំរូប្រាំថ្នាក់សម្រាប់ខេត្តរបស់អ្នក បណ្ដុះបណ្ដាល Random Forest វាយតម្លៃភាពត្រឹមត្រូវ កែលម្អដោយលក្ខណៈបន្ថែម គណនាផ្ទៃ និងនាំចេញផែនទី។ មើល លំហាត់ទី៦។
- ក្នុងថ្នាក់៖ ក្រុមនីមួយៗរត់ឧទាហរណ៍ខេត្តកែបជាមួយលក្ខណៈខុសគ្នា (ក្រុមរលកតែប៉ុណ្ណោះ · + សន្ទស្សន៍ · + DEM · + composite វស្សា) ហើយប្រៀបធៀប OA និង PA នៃស្រែ។
៦.៦. ការយល់ច្រឡំដែលត្រូវប្រុងប្រយ័ត្ន¶
១. «OA ៩៥% មានន័យថាផែនទីល្អ» ប្រសិនបើ ៨០% នៃចំណុចជាទឹក OA អាចខ្ពស់ ទោះបីស្រែត្រូវបានចាត់ខុសភាគច្រើន។ អាន PA និង UA នៃថ្នាក់នីមួយៗ។
២. «ពពកគួរតែជាថ្នាក់មួយ» ពពកមិនមែនជាគម្របដីទេ។ ត្រូវលុបវាមុនធ្វើ composite។ ប្រសិនបើត្រូវការថ្នាក់ពពក នោះមានន័យថា composite មិនទាន់ស្អាតគ្រប់គ្រាន់ ហើយផ្ទៃនៃថ្នាក់ពិតនឹងត្រូវបានកាត់បន្ថយ។
៣. «ដើមឈើកាន់តែច្រើន ផែនទីកាន់តែល្អ» ពី ៥០ ទៅ ៥០០ ដើម ភាពត្រឹមត្រូវកើនតិចតួច តែការគណនាយឺតជាង។ ចំណុចគំរូ និងលក្ខណៈសំខាន់ជាង។
៤. «ចំណុចផ្ទៀងផ្ទាត់អាចជាក្រឡាជិតចំណុចបណ្ដុះបណ្ដាល» ក្រឡាជិតគ្នាស្រដៀងគ្នា ដូច្នេះការវាយតម្លៃនោះលំអៀង។ បំបែកចំណុច ឬពហុកោណមុន sampleRegions។
៥. «ផែនទីចាត់ថ្នាក់ឆ្នាំពីរ ប្រៀបធៀបគ្នាផ្ទាល់ ផ្ដល់ការផ្លាស់ប្ដូរ» កំហុសនៃផែនទីទាំងពីរបូកបញ្ចូលគ្នា។ ភាពខុសគ្នា ២% អាចជាកំហុសទាំងស្រុង។ ការរកការផ្លាស់ប្ដូរត្រូវការការវាយតម្លៃភាពត្រឹមត្រូវផ្ទាល់ខ្លួន។
៦.៧. សេចក្ដីសង្ខេបមេរៀន¶
ការចាត់ថ្នាក់ក្នុង Earth Engine មានប្រាំបីជំហាន៖ composite លក្ខណៈ ចំណុចគំរូ sampleRegions train classify errorMatrix និងផ្ទៃ/នាំចេញ។ Classifier ឃើញតែតារាងលក្ខណៈ ដូច្នេះការបន្ថែមក្រុមរលក SWIR សន្ទស្សន៍ ទីសណ្ឋាន និងរដូវ ច្រើនតែមានឥទ្ធិពលធំជាងការជ្រើស classifier។ Random Forest បោះឆ្នោតពីដើមឈើច្រើន ដែលដើមនីមួយៗរៀនពីគំរូចៃដន្យ និងលក្ខណៈចៃដន្យ។
ការវាយតម្លៃភាពត្រឹមត្រូវត្រូវប្រើចំណុចដាច់ដោយឡែក ដែលបំបែកមុន sampleRegions ហើយត្រូវរាយការណ៍ OA Kappa PA និង UA។ ផ្ទៃតាមថ្នាក់គណនាដោយ pixelArea និង reducer ជាក្រុម។
គំនិតស្នូលនៃមេរៀន
ផែនទីគម្របដីល្អ មកពីចំណុចគំរូល្អ និងលក្ខណៈដែលបែងចែកថ្នាក់បាន មិនមែនពី classifier ស្មុគស្មាញទេ។ ហើយផែនទីនោះមានតម្លៃ លុះត្រាតែវាមកជាមួយការវាយតម្លៃភាពត្រឹមត្រូវដ៏ស្មោះត្រង់។
៦.៨. ពាក្យគន្លឹះខ្មែរ–អង់គ្លេស¶
| ពាក្យខ្មែរ | ពាក្យអង់គ្លេស | អត្ថន័យខ្លី |
|---|---|---|
| ការចាត់ថ្នាក់ត្រួតពិនិត្យ | Supervised classification | ចាត់ថ្នាក់ដោយរៀនពីចំណុចគំរូ |
| លក្ខណៈ | Feature (input band) | ជួរឈរដែល classifier ប្រើ |
| ចំណុចគំរូ | Training sample · GCP | ចំណុចដែលដឹងថ្នាក់ |
| ព្រៃចៃដន្យ | Random Forest | ដើមឈើសម្រេចចិត្តច្រើន បោះឆ្នោត |
| តារាងកំហុស | Confusion (error) matrix | យោង ធៀបនឹងចាត់ថ្នាក់ |
| ភាពត្រឹមត្រូវសរុប | Overall accuracy (OA) | ភាគរយនៃចំណុចដែលត្រឹមត្រូវ |
| ភាពត្រឹមត្រូវអ្នកផលិត/អ្នកប្រើ | Producer's / User's accuracy | កំហុសលុប / កំហុសបន្ថែម តាមថ្នាក់ |
| ទំនាក់ទំនងលំហ | Spatial autocorrelation | ក្រឡាជិតគ្នាស្រដៀងគ្នា |
៦.៩. សំណួររំលឹក និងវាយតម្លៃ¶
ក. សំណួរយល់ដឹង¶
- រាយជំហានទាំងប្រាំបីនៃការចាត់ថ្នាក់ក្នុង Earth Engine ហើយប្រាប់មុខងារ Earth Engine នៃជំហាននីមួយៗ។
- ហេតុអ្វី Random Forest ជាធម្មតាល្អជាងដើមឈើសម្រេចចិត្តតែមួយ?
- ភាពខុសគ្នារវាង PA និង UA? ផ្ដល់ឧទាហរណ៍ជាមួយថ្នាក់ស្រែ។
- ហេតុអ្វីការបំបែកក្រឡាដោយចៃដន្យពីពហុកោណដដែល បំប៉ោង OA?
- ហេតុអ្វីមិនគួរមានថ្នាក់ពពកក្នុងផែនទីគម្របដី?
ខ. សំណួរអនុវត្តគោលគំនិត¶
- សរសេរកូដបន្ថែម composite រដូវវស្សា (NDVI តែប៉ុណ្ណោះ) ជាលក្ខណៈបន្ថែមឈ្មោះ
NDVI_wet។ - តារាងកំហុសបង្ហាញថា ៣០% នៃចំណុចដីទទេ ត្រូវបានចាត់ជាតំបន់សាងសង់។ ស្នើដំណោះស្រាយបី។
- sampleRegions ត្រឡប់ ៤២០ ជួរ ពីចំណុច ៥០០។ តើមានអ្វីកើតឡើង?
- គណនា OA និង UA នៃថ្នាក់ទី១ ពីតារាងកំហុស [[៤០ ១០] [៥ ៤៥]]។
- ប្រៀបធៀបផែនទីរបស់អ្នកជាមួយ Dynamic World (
GOOGLE/DYNAMICWORLD/V1)៖ តើភាពខុសគ្នានេះប្រាប់អ្វី?
គ. កិច្ចការខ្លី¶
រត់ឧទាហរណ៍ខេត្តកែបពីរដង៖ ម្ដងដោយក្រុមរលកស្ពិចត្រាល់ប្រាំមួយតែប៉ុណ្ណោះ និងម្ដងដោយលក្ខណៈទាំងអស់។ ធ្វើតារាងប្រៀបធៀប OA Kappa និង PA/UA នៃថ្នាក់នីមួយៗ ហើយសរសេរកថាខណ្ឌមួយពន្យល់ថាលក្ខណៈណាជួយថ្នាក់ណា។
កំណត់សម្គាល់សម្រាប់គ្រូបង្រៀន¶
ក. ការបែងចែកពេលវេលា ១៨០ នាទី¶
| សកម្មភាព | ពេលវេលា |
|---|---|
| ស្ថានភាពបើកមេរៀន៖ ខេត្តកែប | ១០ នាទី |
| លំហូរការងារ · លក្ខណៈ | ២៥ នាទី |
| ចំណុចគំរូ និង sampleRegions | ២៥ នាទី |
| Random Forest · ពិសោធន៍ | ៣៥ នាទី |
| ការវាយតម្លៃភាពត្រឹមត្រូវ · spatial autocorrelation | ៣០ នាទី |
| កែលម្អ · ផ្ទៃ និងការនាំចេញ | ២០ នាទី |
| ឧទាហរណ៍ខេត្តកែប | ២០ នាទី |
| សង្ខេប និងណែនាំលំហាត់ | ១៥ នាទី |
| សរុប | ១៨០ នាទី / ៣ ម៉ោង |
ខ. ចំណាំអំពីទិន្នន័យ¶
- Asset
kh_province_boundaryនិងkep_gcpsត្រូវតែចែករំលែកជាសាធារណៈ (Anyone can read) មុនថ្នាក់ចាប់ផ្ដើម។ ប្រសិនបើនិស្សិតឃើញកំហុស «asset not found» ឬ «permission denied» សូមប្រើFAO/GAUL/2015/level1(ADM1_NAME) ជាព្រំដែន ហើយឱ្យនិស្សិតគូរចំណុចដោយខ្លួនឯង។ - ពិសោធន៍ Random Forest ប្រើផែនទីយោងដែលបានពីកម្រិតសន្ទស្សន៍ ដូច្នេះ OA ក្នុងពិសោធន៍ខ្ពស់ជាងការងារពិតបន្តិច។ ប្រាប់និស្សិតអំពីចំណុចនេះ។
គ. ការភ្ជាប់ទៅមេរៀនបន្ទាប់¶
ជំពូកទី២ បានផ្ដល់ឧបករណ៍បីសម្រាប់ការវិភាគទ្រង់ទ្រាយធំ៖ ស្ថិតិតាមតំបន់ ស៊េរីពេលវេលា និងការចាត់ថ្នាក់។ ជំពូកបន្ទាប់អនុវត្តឧបករណ៍ទាំងនេះលើគ្រោះមហន្តរាយ ដែលកម្ពុជាជួបញឹកញាប់បំផុត។ ប៉ុន្តែទឹកជំនន់កើតក្នុងរដូវវស្សា ពេលដែលពពកគ្របដណ្ដប់ ហើយ Sentinel-2 ស្ទើរតែមើលមិនឃើញដី។
តើយើងអាចធ្វើផែនទីទឹកជំនន់ក្រោមពពកបានដោយរបៀបណា?
សំណួរនេះនាំទៅ មេរៀនទី៧៖ ទឹកលើផ្ទៃដី និងទឹកជំនន់ដោយ Sentinel-1។