首页 > 其他分享 >R语言实现基于随机森林的高光谱影像分类

R语言实现基于随机森林的高光谱影像分类

时间:2023-02-17 16:33:43浏览次数:36  
标签:gt fea 光谱 TrainSamp 随机 pavia 训练样本 uni 影像

在Pavia University数据中选取100×100大小的影像和参考数据,选取30个样本作为训练样本,基于随机森林进行分类

library("R.matlab")
library("yaImpute")
library("randomForest")
PATH <- getwd();
setwd(PATH)
# 定义样本数量
Trainnum <- 30
drow <- 100
dcol <- 100
ddim1 <- 103
# 读入高光谱特征数据
pathname1 <- file.path('Data','pavia_univ.mat')
pathname2 <- file.path('Data','pavia_ugt.mat')
pavia_uni_fea <- readMat(pathname1)
pavia_uni_gt <- readMat(pathname2)
# 将list 转为矩阵
pavia_uni_fea <- array(do.call(cbind, pavia_uni_fea),dim = c(10000,ddim1))
# 对影像数据进行pca降维
pavia_uni_fea.pr <- princomp(pavia_uni_fea, scores=T, cor = TRUE)
plot(pavia_uni_fea.pr,type="line")
pca_data <- predict(pavia_uni_fea.pr)
ddim <- 10
pavia_uni_fea <- array(pca_data[,1:ddim], dim = c(100,100,ddim))
# 将参考数据展示出来
pavia_uni_gt <- array(do.call(cbind, pavia_uni_gt ),dim = c(100,100))
image(pavia_uni_gt, col = heat.colors(12))
pavia_uni_feanorm <- array(data = NA, dim = dim(pavia_uni_fea))

# 抽取训练样本
# 找到不是0的索引
pavia_no0 <- which(pavia_uni_gt>0)
# 固定她的返回结果
set.seed(100)
RandomIndex <- sample(pavia_no0, length(pavia_no0))
TrainIndex <- RandomIndex[1:Trainnum]

# 显示训练样本
TrainSamp <- array(data = 0, dim = c(1,10000))
TrainSamp[TrainIndex] <- 1
TrainSamp <- array(TrainSamp,dim = c(100,100))
image(TrainSamp)
# 将训练样本的id转成行列号
xtrain <- ceiling(TrainIndex/drow)
ytrain <- TrainIndex - ((xtrain -1)*drow)
# 这里已经将训练数据和特征定义好了
TrainFea <- array(data = NA, dim = c(Trainnum,ddim))
TrainLabel <- array(data = NA, dim = c(Trainnum,1))
for(i in 1:Trainnum){
TrainFea[i,1:ddim] <- array(data = pavia_uni_fea[TrainIndex[i]],dim = c(1,ddim))
TrainLabel[i] <- array(data = pavia_uni_gt[TrainIndex[i]],dim = c(1,1))
}


# 使用RF进行分类
pavia_uni_fea1 <- array(pavia_uni_fea, dim = c(10000,ddim))
rf <- randomForest(TrainFea, TrainLabel,ntree=500)
pred<-predict(rf,pavia_uni_fea1)
pred <- array(as.numeric(pred),dim = c(100,100))
image(pred, col = heat.colors(12))

标签:gt,fea,光谱,TrainSamp,随机,pavia,训练样本,uni,影像
From: https://blog.51cto.com/u_14682436/6064328

相关文章

  • 【牛客网】明明的随机数
    题目描述明明生成了N个1到500之间的随机整数。请你删去其中重复的数字,即相同的数字只保留一个,把其余相同的数去掉,然后再把这些数从小到大排序,按照排好的顺序输出。数据......
  • 随机森林RF模型超参数的优化:Python实现
      本文介绍基于Python的随机森林(RandomForest,RF)回归代码,以及模型超参数(包括决策树个数与最大深度、最小分离样本数、最小叶子节点样本数、最大分离特征数等)自动优化的代......
  • C++ (伪)随机数生成
    #include<iostream>#include<random>namespacerandom{//从系统获取随机数作为种子std::random_devicerd;//创建种子序列std::seed_seqrr{r......
  • 12.4程序生成随机数的方法
       随机数色子是用来产生随机数的一种工具,每个色子有20面。晃动随机数色子后,出现在正面的数字就是随机数。由于计算机没法去晃动随机数色子,因此程序一般会通过生成类......
  • 机器学习-随机森林
    目录前言原理数学知识随机森林的优缺点优点缺点应用代码前言随机森林(RandomForest)是一种基于决策树的集成学习方法,它通过构建多个决策树来提高预测准确性和稳定性。在本......
  • Python实现随机森林RF并对比自变量的重要性
      本文介绍在Python环境中,实现随机森林(RandomForest,RF)回归与各自变量重要性分析与排序的过程。  其中,关于基于MATLAB实现同样过程的代码与实战,大家可以点击查看MATLA......
  • 随机森林算法相关研究安装
    Ubuntu中ssh、mysql、anaconda相关安装操作SSH服务安装1.安装ssh服务Ubuntu下安装OpenSSHServer是无比轻松的一件事情,需要的命令只有一条:sudoapt-getinstallopenssh......
  • uniGUI学习之随机验证码生成及判断(59)
    效果图:usesAuthenticodeGenerate,ExtCtrls;AuthenticodeGenerate.pasunitAuthenticodeGenerate;interfaceusesSysUtils,Windows,ExtCtrls,Graphics;f......
  • Unreal如何制作随机摆动效果?
    Hello,大家好,今天给大家带来使用UE蓝图制作随机摆动的效果,我是很久不见。为了表现暴风场景,需要有一些参照物,比如随风摇曳的树,吹起来的碎屑,或是一些被吹得呼扇呼扇的垃圾桶......
  • ArcGIS中提取多波段影像中的单个波段
    方法一:BandMath方法二:将band和combination(波段、组合)修改为需要提取的波段,点击确定即可。这个方法通过试验验证可用参考:https://www.cnblogs.com/caoyimingGIS/p/755......