基于光谱估算土壤属性和类别
1. 袋装偏最小二乘回归模型预测总碳
在预测土壤总碳含量时,我们使用了袋装偏最小二乘回归模型。通过散点图展示了观测值与预测值的关系。
为了评估模型的准确性,我们使用了
eval
函数,并指定参数
obj = "quant"
来处理连续变量。以下是校准和验证的准确性度量代码:
# 校准的准确性度量
soilspec::eval(datC$TotalCarbon, soilCBagplsPred$predAve, obj = "quant")
##
ME RMSE
r2
R2 rhoC
RPD RPIQ
## 1
0 0.56 0.79 0.86 0.92 2.64 2.04
# 验证的准确性度量
soilspec::eval(datV$TotalCarbon, soilVBagplsPred$predAve, obj = "quant")
##
ME RMSE
r2
R2 rhoC
RPD RPIQ
## 1 0.01
0.5 0.66 0.7 0.86 1.85 2.39
从上述代码的输出结果可以看出,校准和验证的准确性度量指标有所不同。这些指标可以帮助我们评估模型的性能。
2. Cubist模型
2.1 Cubist模型简介
Cubist模型是一种基于决策树思想的数据挖掘工具,它将回归问题转化为分类问题。该模型由一组规则组成,每个规则包含一个线性模型。其形式如下:
Rule 1: [10 cases, mean -0.96, range -1.77 to 0.66, est err 0.27]
if
R880 <= 0.0144
R1610 > -0.921
then
outcome = -4.06 + 1.27 * R540 + 1.61 * R1610
当数据满足规则的条件时,就使用对应的线性函数进行预测。
2.2 构建Cubist模型
以下是构建Cubist模型的代码:
# 加载所需包
require(Cubist)
# 在校准数据集上构建Cubist模型
soilCCubistModel <- cubist(x = datC$spcAMovav, y = datC$TotalCarbon)
# 模型摘要
summary(soilCCubistModel)
模型摘要提供了完整的模型信息,包括规则和变量的使用频率。
2.3 模型预测与准确性评估
使用校准后的Cubist模型对校准和验证数据进行预测,并评估准确性:
# 对校准数据进行预测
soilCCubistPredict <- predict(soilCCubistModel, datC$spcAMovav)
# 对验证数据进行预测
soilVCubistPredict <- predict(soilCCubistModel, datV$spcAMovav)
# 校准的准确性度量
soilspec::eval(datC$TotalCarbon, soilCCubistPredict, obj = "quant")
##
ME RMSE
r2
R2 rhoC
RPD RPIQ
## 1 -0.02 0.27 0.91 0.97 0.98 5.46 4.23
# 验证的准确性度量
soilspec::eval(datV$TotalCarbon, soilVCubistPredict, obj = "quant")
##
ME RMSE
r2
R2 rhoC RPD RPIQ
## 1 0.03 0.39 0.8 0.82 0.92 2.4 3.11
从验证统计数据来看,校准后的Cubist模型的预测效果比PLS模型差。可能是因为部分规则只适用于少数观测值,导致模型过拟合。
2.4 简化Cubist模型
为了避免过拟合,我们简化模型,设置较少的规则:
# 在校准数据集上使用2条规则构建Cubist模型
soilCCubistModel2 <- cubist(x = datC$spcAMovav, y = datC$TotalCarbon,
control = cubistControl(rules = 2))
# 模型摘要
summary(soilCCubistModel)
再次进行预测和准确性评估:
# 对校准数据进行预测
soilCCubist2Predict <- predict(soilCCubistModel2, datC$spcAMovav)
# 对验证数据进行预测
soilVCubist2Predict <- predict(soilCCubistModel2, datV$spcAMovav)
# 校准的准确性度量
soilspec::eval(datC$TotalCarbon, soilCCubist2Predict, obj = "quant")
##
ME RMSE
r2
R2 rhoC
RPD RPIQ
## 1 -0.01
0.4 0.86 0.93 0.96 3.76 2.91
# 验证的准确性度量
soilspec::eval(datV$TotalCarbon, soilVCubist2Predict, obj = "quant")
##
ME RMSE
r2
R2 rhoC
RPD RPIQ
## 1 0.06 0.39 0.79 0.82 0.91 2.38 3.08
简化后的模型在一定程度上改善了过拟合问题。
2.5 可视化重要变量
我们可以根据模型摘要推断哪些波长在模型中是有用的,并进行可视化:
# 绘制作为预测变量的变量
plot(soilCCubistModel$usage[, 3], soilCCubistModel$usage[, 2],
type = "h",
col = "plum",
xlab = "Wavelength /nm",
ylab = "Model usage /%")
# 绘制条件变量(蓝色)
lines(soilCCubistModel$usage[, 3], soilCCubistModel$usage[, 1],
type = "h",
col = "blue")
# 查看哪些变量重要
# 添加到现有图中
par(new = T)
# 添加光谱用于可视化
plot(colnames(datC$spcAMovav), datC$spcAMovav[1, ],
axes = F,
ylim = c(-2, 2),
xlab = " ", ylab = " ",
type = "l",
main = " ",
xlim = c(500, 2450))
3. 随机森林模型
3.1 随机森林模型简介
随机森林(RF)是一种广泛应用于数据科学的算法,它是决策树的集成。与CART模型相比,RF的优势在于其集成方法,通过多个决策树进行预测。
3.2 随机森林模型的调优参数
随机森林有三个调优参数:
-
mtry
:每个自助抽样中随机选择的输入变量数量,范围从1到样本大小。
- 树的数量:需要足够大以稳定袋外误差,一般500棵树就足够。
- 最小节点大小:决定不进行分裂的节点的最小大小,回归默认值为5,分类为1。
3.3 构建随机森林模型
以下是构建随机森林模型的代码:
# 加载所需包
require(randomForest)
# 准备数据,列名不能为数字,在前面添加'spec.'
datCSub <- data.frame(TotalCarbon = datC$TotalCarbon, datC$spcAMovav)
colnames(datCSub) <- c("TotalCarbon", paste0("spec.", colnames(datC$spcAMovav)))
# 运行随机森林算法
soilCRFModel <- randomForest(TotalCarbon ~ .,
data = datCSub,
ntree = 1000,
mtry = 10,
importance = TRUE,
na.action = na.omit)
# 模型摘要
soilCRFModel
3.4 可视化重要变量
随机森林函数保存了解释土壤属性方差的重要变量,我们可以通过两种方法绘制这些重要变量:
# 绘制光谱中最重要的波段
varImpPlot(soilCRFModel,
main = " ")
3.5 模型预测与准确性评估
使用拟合的RF模型对验证集进行预测,并评估准确性:
# 对校准数据进行预测
soilCRFPred <- predict(soilCRFModel, datCSub)
# 准备验证数据
datVSub <- data.frame(TotalCarbon = datV$TotalCarbon, datV$spcAMovav)
colnames(datVSub) <- c("TotalCarbon", paste0("spec.", colnames(datV$spcAMovav)))
# 对验证数据进行预测
soilVRFPred <- predict(soilCRFModel, datVSub)
# 校准的准确性度量
soilspec::eval(datC$TotalCarbon, soilCRFPred, obj = "quant")
##
ME RMSE
r2
R2 rhoC
RPD RPIQ
## 1
0
0.3 0.94 0.96 0.98 5.03 3.89
# 验证的准确性度量
soilspec::eval(datV$TotalCarbon, soilVRFPred, obj = "quant")
##
ME RMSE
r2
R2 rhoC RPD RPIQ
## 1 0.1 0.52 0.57 0.69 0.81 1.8 2.33
4. 基于内存的学习(MBL)
4.1 MBL算法简介
基于内存的学习(MBL)是一种局部校准算法,用于处理复杂的土壤光谱数据集。它将光谱分割成具有相似光谱特征的子集,通过在主成分空间中选择最近邻点来构建局部模型。
4.2 MBL算法的步骤
MBL算法的工作步骤如下:
1. 构建光谱的p维空间,p为主成分的数量。
2. 对于验证数据集中的每个点,从校准样本中选择其k个最近邻。
3. 使用在校准数据集中找到的最近邻光谱为验证数据集中的每个点拟合局部模型。
4.3 构建MBL模型
以下是构建MBL模型的代码:
# 定义邻居序列
k2t <- seq(from = 20, to = 120, by = 10)
# 加载所需包
require(resemble)
# 主成分保留的最大累积解释方差
maxexplvar <- 0.99
# 运行MBL算法
mblResults1 <- mbl(Xr = datC$spcAMovav,
Yr = datC$TotalCarbon,
# 假设不知道测试数据集的总碳含量
Yu = NULL,
Xu = datV$spcAMovav,
diss_method = "pca",
control = mbl_control(validation_type = "NNv"),
diss_usage = "none",
k = k2t,
# 定义"wapls1"的最小和最大成分数量
method = local_fit_wapls(min_pls_c = 4, max_pls_c = 17),
pc_selection = list("cumvar", maxexplvar),
scale = FALSE, center = TRUE)
4.4 模型结果总结与可视化
# 打印模型摘要
mblResults1
# 绘制RMSE与邻居数量的关系
matplot(mblResults1$validation_results$nearest_neighbor_validation$k,
mblResults1$validation_results$nearest_neighbor_validation$rmse,
type = "b",
xlab = "K-neighbours",
ylab = "RMSE",
pch = 1,
col = "dodgerblue")
4.5 选择最优邻居数量
通过上述可视化结果,我们可以选择使RMSE最小的最优邻居数量:
# rmse值
rmseMBL <- mblResults1$validation_results$nearest_neighbor_validation$rmse
# 最小rmse值
minRmseMBL <- min(mblResults1$validation_results$nearest_neighbor_validation$rmse)
# 邻居数量值
neighNumber <- mblResults1$validation_results$nearest_neighbor_validation
# 选择最优邻居数量
optNn <- neighNumber[rmseMBL == minRmseMBL,]$k
4.6 使用实际验证数据进行预测
# 运行MBL算法并指定Yu参数
mblResults1Val <- mbl(Xr = datC$spcAMovav,
Yr = datC$TotalCarbon,
Yu = datV$TotalCarbon,
Xu = datV$spcAMovav,
diss_method = "pca",
control = mbl_control(validation_type = "NNv"),
diss_usage = "none",
k = optNn,
# 定义"wapls1"的最小和最大成分数量
method = local_fit_wapls(min_pls_c = 4, max_pls_c = 17),
pc_selection = list("cumvar", maxexplvar),
scale = FALSE, center = TRUE)
# 绘制验证数据的观测值与预测值
plot(datV$TotalCarbon, mblResults1Val$results$k_30$pred,
xlab = "Observed",
ylab = "Predicted",
xlim = c(0, 12),
ylim = c(0, 12),
pch = 16)
abline(0, 1)
5. 模型比较
| 模型 | 校准ME | 校准RMSE | 校准r2 | 校准R2 | 校准rhoC | 校准RPD | 校准RPIQ | 验证ME | 验证RMSE | 验证r2 | 验证R2 | 验证rhoC | 验证RPD | 验证RPIQ |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 袋装偏最小二乘回归 | 0 | 0.56 | 0.79 | 0.86 | 0.92 | 2.64 | 2.04 | 0.01 | 0.5 | 0.66 | 0.7 | 0.86 | 1.85 | 2.39 |
| Cubist(原) | -0.02 | 0.27 | 0.91 | 0.97 | 0.98 | 5.46 | 4.23 | 0.03 | 0.39 | 0.8 | 0.82 | 0.92 | 2.4 | 3.11 |
| Cubist(简化) | -0.01 | 0.4 | 0.86 | 0.93 | 0.96 | 3.76 | 2.91 | 0.06 | 0.39 | 0.79 | 0.82 | 0.91 | 2.38 | 3.08 |
| 随机森林 | 0 | 0.3 | 0.94 | 0.96 | 0.98 | 5.03 | 3.89 | 0.1 | 0.52 | 0.57 | 0.69 | 0.81 | 1.8 | 2.33 |
| MBL | - | - | - | - | - | - | - | - | - | - | - | - | - | - |
从上述表格可以看出,不同模型在校准和验证阶段的表现各有优劣。在选择模型时,需要综合考虑模型的准确性、复杂度和泛化能力等因素。
6. 总结
本文介绍了几种用于基于光谱估算土壤总碳含量的模型,包括袋装偏最小二乘回归、Cubist、随机森林和基于内存的学习(MBL)。每个模型都有其特点和适用场景。通过对这些模型的比较和分析,我们可以根据具体需求选择最合适的模型来进行土壤属性的预测。同时,在模型构建过程中,需要注意参数的调优和过拟合问题,以提高模型的性能和泛化能力。
7. 各模型特点分析
7.1 袋装偏最小二乘回归模型
-
优点
:通过散点图能直观展示观测值与预测值关系,使用
eval函数评估准确性较为方便。在一定程度上能较好地处理连续变量的预测问题。 - 缺点 :从验证的准确性度量来看,其RMSE等指标表现一般,说明预测的精度可能有待提高。
7.2 Cubist模型
- 优点 :模型由一组规则和线性模型组成,形式相对清晰,可解释性较强。能够将回归问题转化为分类问题处理。通过简化规则可以在一定程度上改善过拟合问题。
- 缺点 :原模型容易出现过拟合,部分规则只适用于少数观测值,导致验证效果不如预期。
7.3 随机森林模型
- 优点 :作为决策树的集成算法,具有较强的处理高维数据的能力。可以通过调优参数来优化模型性能,并且能够保存解释土壤属性方差的重要变量,方便进行变量重要性分析。
- 缺点 :存在过拟合的倾向,在验证阶段的准确性度量指标表现不如校准阶段,泛化能力有待提高。
7.4 基于内存的学习(MBL)模型
- 优点 :能够处理复杂的土壤光谱数据集,通过在主成分空间中选择最近邻点构建局部模型,可处理光谱与土壤属性之间的复杂非线性关系。可以通过优化邻居数量来提高预测准确性。
- 缺点 :算法相对复杂,需要选择合适的相似性度量、主成分数量和邻居数量等参数,参数选择不当可能会影响模型性能。
8. 模型选择建议
根据不同的应用场景和数据特点,我们可以参考以下建议来选择合适的模型:
-
数据维度较低且关系相对简单
:袋装偏最小二乘回归模型可能是一个不错的选择,其操作相对简单,能快速得到预测结果。
-
需要较强的可解释性
:Cubist模型的规则和线性模型形式使其具有较好的可解释性,适合对模型解释有较高要求的场景。但需要注意避免过拟合问题,可通过简化规则来优化。
-
处理高维数据且对变量重要性分析有需求
:随机森林模型能够处理高维数据,并提供变量重要性信息,可用于挖掘数据中的关键因素。但要注意调优参数以提高泛化能力。
-
处理复杂非线性关系的土壤光谱数据
:基于内存的学习(MBL)模型通过局部建模的方式,能够更好地处理复杂的非线性关系。但需要仔细选择参数,如相似性度量、主成分数量和邻居数量等。
9. 模型构建流程总结
以下是各模型构建的主要流程:
graph LR
classDef startend fill:#F5EBFF,stroke:#BE8FED,stroke-width:2px
classDef process fill:#E5F6FF,stroke:#73A6FF,stroke-width:2px
classDef decision fill:#FFF6CC,stroke:#FFBC52,stroke-width:2px
A([开始]):::startend --> B(数据准备):::process
B --> C{选择模型}:::decision
C -->|袋装偏最小二乘回归| D(构建模型):::process
C -->|Cubist| E(构建初始模型):::process
C -->|随机森林| F(准备数据并调优参数):::process
C -->|MBL| G(定义参数和邻居序列):::process
D --> H(评估准确性):::process
E --> I(评估准确性):::process
I --> J{是否过拟合}:::decision
J -->|是| K(简化模型):::process
J -->|否| L(使用模型):::process
K --> I
F --> M(构建模型):::process
M --> N(评估准确性):::process
G --> O(运行MBL算法):::process
O --> P(选择最优邻居数量):::process
P --> Q(使用实际验证数据预测):::process
Q --> R(评估准确性):::process
H --> S([结束]):::startend
L --> S
N --> S
R --> S
10. 未来研究方向
虽然上述模型在基于光谱估算土壤属性和类别方面取得了一定的成果,但仍有一些可以进一步研究的方向:
-
模型融合
:尝试将不同的模型进行融合,发挥各模型的优势,以提高预测的准确性和稳定性。例如,可以将随机森林和MBL模型进行融合,利用随机森林处理高维数据的能力和MBL处理非线性关系的优势。
-
参数优化算法
:针对各模型的参数选择问题,研究更高效的参数优化算法,减少人工调参的工作量,提高模型性能。
-
新数据特征挖掘
:除了现有的光谱数据特征,探索挖掘更多与土壤属性相关的数据特征,如土壤的物理结构、化学组成等,以丰富模型的输入信息,提高预测精度。
11. 总结回顾
本文详细介绍了四种基于光谱估算土壤总碳含量的模型,包括袋装偏最小二乘回归、Cubist、随机森林和基于内存的学习(MBL)。通过对各模型的原理、构建过程、准确性评估和特点分析,我们了解到每个模型都有其适用场景和优缺点。在实际应用中,需要根据数据特点和应用需求选择合适的模型,并注意参数调优和过拟合问题,以提高模型的性能和泛化能力。同时,未来可以通过模型融合、参数优化和新数据特征挖掘等方向进一步提升土壤属性预测的准确性和可靠性。
希望本文能为从事土壤光谱分析和属性预测的相关人员提供有价值的参考,帮助他们更好地选择和应用合适的模型进行土壤属性的估算和分类。
基于光谱估算土壤属性的多种模型对比
超级会员免费看
711

被折叠的 条评论
为什么被折叠?



