中科星图(GVE)——使用随机森林方法进行土地分类

目录

简介

函数

gve.Classifier.smileRandomForest(numberOfTrees,variablesPerSplit,minLeafPopulation,bagFraction,maxNodes,seed)

代码

结果


简介

使用随机森林方法进行土地分类的步骤如下:

  1. 数据准备:收集所需的土地分类数据,并对数据进行预处理,包括缺失值处理、数据标准化等。

  2. 特征选择:根据土地特征的重要性选择合适的特征,可以使用特征选择算法如信息增益、方差选择等。

  3. 数据集划分:将数据集划分为训练集和测试集,通常采用70%的数据作为训练集、30%的数据作为测试集。

  4. 随机森林建模:使用训练集数据建立随机森林模型。随机森林是由多个决策树组成的集成学习模型,每个决策树通过对一部分有放回的样本进行训练而构建。

  5. 模型训练:通过训练集数据对随机森林模型进行训练,即对每个决策树进行单独的训练。

  6. 模型预测:使用训练好的随机森林模型对测试集数据进行分类预测。

  7. 模型评估:对预测结果进行评估,可以使用准确率、精确率、召回率等指标衡量模型的性能。

  8. 参数调优:根据模型评估结果,对随机森林模型的参数进行调优,以提高模型的性能。

  9. 模型应用:使用经过调优的随机森林模型对新的土地分类数据进行预测。

需要注意的是,随机森林方法在处理高维数据和大数据集时具有较好的性能,但对于类别不平衡的情况可能存在一定的问题。在实际应用中,可以根据具体需求选择合适的模型和算法进行土地分类。

函数

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}"

相关推荐
ggdpzhk7 分钟前
VUE:基于MVVN的前端js框架
前端·javascript·vue.js
无脑敲代码,bug漫天飞7 分钟前
COR 损失函数
人工智能·机器学习
盼海10 分钟前
排序算法(五)--归并排序
数据结构·算法·排序算法
HPC_fac130520678161 小时前
以科学计算为切入点:剖析英伟达服务器过热难题
服务器·人工智能·深度学习·机器学习·计算机视觉·数据挖掘·gpu算力
小曲曲1 小时前
接口上传视频和oss直传视频到阿里云组件
javascript·阿里云·音视频
学不会•2 小时前
css数据不固定情况下,循环加不同背景颜色
前端·javascript·html
EasyNTS3 小时前
H.264/H.265播放器EasyPlayer.js视频流媒体播放器关于websocket1006的异常断连
javascript·h.265·h.264
网易独家音乐人Mike Zhou4 小时前
【卡尔曼滤波】数据预测Prediction观测器的理论推导及应用 C语言、Python实现(Kalman Filter)
c语言·python·单片机·物联网·算法·嵌入式·iot
活宝小娜5 小时前
vue不刷新浏览器更新页面的方法
前端·javascript·vue.js
程序视点5 小时前
【Vue3新工具】Pinia.js:提升开发效率,更轻量、更高效的状态管理方案!
前端·javascript·vue.js·typescript·vue·ecmascript