隨機森林是一種基于多個決策樹的集成學習方法,可以用于分類和回歸問題。在gee中可以使用ee.Classifier.smileRandomForest()函數來創建一個隨機森林分類器,并用它來對影像進行分類。
隨機森林分類器有一個重要的屬性,就是可以計算每個特征(或者說波段)的重要性,即該特征對分類結果的貢獻程度。特征重要性可以幫助我們選擇最有效的特征,從而提高分類的準確性和效率。
在本文中,將使用gee平臺上的哨兵二號影像(COPERNICUS/S2)作為數據源,對區域內的土地覆蓋進行分類,并計算并排序每個波段的重要性。具體分類過程可見:
【GEE筆記】在線分類流程,標注樣本點、分類和精度評價
代碼如下:
var geometry = ee.Geometry.Polygon([[[121.81940156260009, 40.92383488850036],[121.81940156260009, 40.73887826797227],[121.99998933115478, 40.73887826797227],[121.99998933115478, 40.92383488850036]]], null, false)// 定義年份和波段列表
var year=2020
var bandlist=['B2','B3','B4','B8','B11','B12']// 定義時間范圍
var start = ee.Date(year+'-4-1');
var finish = ee.Date(year+'-7-1');// 從gee平臺上加載哨兵二號影像,并按照時間、空間和云量進行過濾
var dataset = ee.ImageCollection('COPERNICUS/S2').filterDate(start, finish).filterBounds(geometry).filter(ee.Filter.lt('CLOUDY_PIXEL_PERCENTAGE', 20))// 從影像集中選擇需要的波段
dataset=dataset.select(bandlist);
// 定義RGB波段和顯示范圍
var rgbVis = {min: 0.0,max: 3000,bands: ['B4', 'B3', 'B2'],
};// 將地圖中心定位
Map.centerObject(geometry)
// 打印影像集的信息
print(dataset)// 對影像集進行中值合成,并裁剪到西城區范圍
var image=dataset.median().clip(geometry)
// 在地圖上顯示合成影像
Map.addLayer(image,rgbVis)// 加載樣本數據,包括淡水、海水、建盆、農田、蘆葦、建筑、潭土和草地等八個類別
var sample=danshui.merge(haishui).merge(jianpeng).merge(nongtian).merge(luwie).merge(jianzhu)
.merge(tantu).merge(caodi)// 為樣本數據添加一個隨機數列,用于劃分訓練集和測試集
var withRandom = sample.randomColumn('random');
// 定義訓練集和測試集的比例,大約70%的樣本用于訓練,30%的樣本用于測試
var split = 0.7;
var trainingPartition2 = withRandom.filter(ee.Filter.lt('random', split));
var testingPartition = withRandom.filter(ee.Filter.gte('random', split));// 從合成影像中提取訓練集的像素值,包括波段值和類別標簽
var trainingPartition=image.sampleRegions({collection: trainingPartition2,scale:10,properties: ['Map'],})
// 創建一個隨機森林分類器,使用100棵樹,并用訓練集進行訓練
var classifier = ee.Classifier.smileRandomForest(100).train({features: trainingPartition,classProperty:'Map',// inputProperties :['B4', 'B3', 'B2']
});
// 從分類器的explain()方法中獲取特征重要性的字典
var dict = ee.Dictionary(classifier.explain().get('importance'));
// 打印特征重要性的字典
print('Explain:',dict);
// 將特征重要性的字典轉換為數組,并按照重要性的值進行排序
var tttt=ee.Dictionary(classifier.explain().get('importance')).toArray().toList();
print('重要性排序:',ee.Dictionary(classifier.explain().get('importance')).keys().sort(tttt))// 使用ui.Chart.feature.byProperty()函數,將特征重要性的字典繪制成柱狀圖,并顯示在控制臺中
var variable_importance = ee.Feature(null, ee.Dictionary(dict2).get('importance'));
var chart =
ui.Chart.feature.byProperty(variable_importance)
.setChartType('ColumnChart')
.setOptions({
title: 'Random Forest Variable Importance',
legend: {position: 'none'},
hAxis: {title: 'Bands'},
vAxis: {title: 'Importance'}
});print(chart);
從輸出結果可以看到,B8
波段(近紅外波段)的重要性最高,達到了410.5263331047649
,說明該波段對土地覆蓋分類的影響最大。
通過計算并排序特征重要性,可以對影像進行特征選擇,即只保留最重要的波段,從而減少數據的維度,提高分類的速度和準確性。當然,特征選擇的效果還需要通過分類精度評估來驗證,這是下一步的工作。