目录
简介
使用随机森林方法进行土地分类的步骤如下:
-
数据准备:收集所需的土地分类数据,并对数据进行预处理,包括缺失值处理、数据标准化等。
-
特征选择:根据土地特征的重要性选择合适的特征,可以使用特征选择算法如信息增益、方差选择等。
-
数据集划分:将数据集划分为训练集和测试集,通常采用70%的数据作为训练集、30%的数据作为测试集。
-
随机森林建模:使用训练集数据建立随机森林模型。随机森林是由多个决策树组成的集成学习模型,每个决策树通过对一部分有放回的样本进行训练而构建。
-
模型训练:通过训练集数据对随机森林模型进行训练,即对每个决策树进行单独的训练。
-
模型预测:使用训练好的随机森林模型对测试集数据进行分类预测。
-
模型评估:对预测结果进行评估,可以使用准确率、精确率、召回率等指标衡量模型的性能。
-
参数调优:根据模型评估结果,对随机森林模型的参数进行调优,以提高模型的性能。
-
模型应用:使用经过调优的随机森林模型对新的土地分类数据进行预测。
需要注意的是,随机森林方法在处理高维数据和大数据集时具有较好的性能,但对于类别不平衡的情况可能存在一定的问题。在实际应用中,可以根据具体需求选择合适的模型和算法进行土地分类。
函数
gve.Classifier.smileRandomForest(numberOfTrees,variablesPerSplit,minLeafPopulation,bagFraction,maxNodes,seed)
创建一个空的随机森林分类器
方法参数
- numberOfTrees( number )
创建的决策树数量
- variablesPerSplit( number,optional )
可选参数,每个变量拆分的数量
- minLeafPopulation( number,optional )
可选参数,创建至少包含这些点的节点
- bagFraction( number,optional )
可选参数,每棵树的输入袋比例
- maxNodes( number,optional )
可选参数,每棵树中最大的叶子节点数量
- seed( number,optional )
可选参数,随机种子
返回值: Classifier
代码
javascript
/**
* @File :
* @Time : 2023/08/28
* @Author : GEOVIS Earth Brain
* @Version : 0.1.0
* @Contact : 中国(安徽)自由贸易试验区合肥市高新区望江西路900号中安创谷科技园一期A1楼36层
* @License : (C)Copyright 中科星图数字地球合肥有限公司 版权所有
* @Desc : 对影像使用随机森林算法进行分类
*/
/** */
// 地物分类标签影像
var imgLable = gve.Image("AIRCAS/GLC_FCS30_2020/GLC_FCS30_2020_E115N35");
Map.centerObject(imgLable)
var id = Map.addLayer(imgLable, null, "imgLable");
var label = 'LABLE';
var imgLableRemapped = imgLable.rename(label)
// Sentinel2 待分类影像
var img = gve.Image("S2/L2A/20221107T024919_20221107T050438_T50SNA").select('B.*');
// print("Sentinel2 img",img);
// 获取区域
var ROI = gve.Geometry.Polygon(
[
[
[117.15900037027156, 31.807122313784646],
[117.15900037027156, 31.633066875770748],
[117.65750500894343, 31.633066875770748],
[117.65750500894343, 31.807122313784646]
]
]
);
// 波段采样的数量
var numPoints = 100;
// 分类波段id
var classBand = label;
// 采样区域
var region = ROI;
// 缩放
var scale = 100;
var sample = img.addBands(imgLableRemapped).stratifiedSample(numPoints, classBand, region, scale);
// print('sample',sample)
// 样本数据增加随机值属性,用于划分训练数据和验证数据
var sample = sample.randomColumn();
// 80%样本用于训练,20%样本用于验证
var trainingSample = sample.filter('random<=0.8');
var validationSample = sample.filter('random>0.8');
// 采用欧几里得距离模式训练最小距离分类器
var features = trainingSample;
var classProperty = label;
var inputProperties = img.bandNames();
//gve.Classifier.Cart(maxNodes,minLeafPopulation,maxDepth)
var trainedClassifier = gve.Classifier.smileRandomForest(50).train(features, classProperty, inputProperties);
//gve.Classifier.Cart()
//gve.Classifier.minimumDistance('euclidean', 10)
// print('trainedClassifier',trainedClassifier)
// 打印已训练完的分类器信息
print('Explain of trained classifier', trainedClassifier.explain());
// 获取训练数据的混淆矩阵和整体准确率
var trainedMatrix = trainedClassifier.confusionMatrix();
// print('Training confusion matrix', trainedMatrix);
print('Training overall accuracy', trainedMatrix.accuracy());
// 获取验证数据的混淆矩阵和整体准确率
validationSample = validationSample.classify(trainedClassifier);
// print('validationSample',validationSample)
// errorMatrix是一个混淆矩阵
var validationMatrix = validationSample.errorMatrix(label, 'classification');
// print('Validation confusion matrix', validationMatrix);
print('Validation accuracy', validationMatrix.accuracy());
// 使用分类器对分类
var imgClassified = img.classify(trainedClassifier);
// print("imgClassified",imgClassified)
var classVis = {
band_rendering: {
uniquevalue: {
colortable: {
values: [10, 11, 20, 51, 52, 61, 62, 71, 72, 130, 180, 190, 210],
colors: ['#FFFF64', '#FFFF64', '#AAF0F0', '#4C7300', '#006400', '#00A000',
'#AAC800', '#003C00', '#005000', '#FFB432', '#00DC82', '#C31400', '#0046C8'],
na: "#000000"
}
}
}
};
Map.centerObject(img)
var id1 = Map.addLayer(img, { bands: ['B4', 'B3', 'B2'], min: 100, max: 3500 }, 'img');
Map.centerObject(imgClassified)
var id2 = Map.addLayer(imgClassified, { palette: classVis }, 'Classified');
结果
-
Explain of trained classifier"
-
2024-10-11 11:00:57.769
▶ Object (15 properties)
-
2024-10-11 11:00:57.770
"Training overall accuracy"
-
2024-10-11 11:00:57.770
0.9896680216802168
-
2024-10-11 11:00:57.770
"Validation accuracy"
-
2024-10-11 11:00:57.771
0.01386001386001386
-
2024-10-11 11:02:52.600
"Error: {"message":"参数异常","code":40205}"