16、从光谱估计土壤属性和类别

从光谱估计土壤属性和类别方法

从光谱估计土壤属性和类别

1. 连续变量的准确性度量

对于连续变量,可以使用 eval 函数并指定参数 obj = "quant" 来推导一些准确性度量,示例代码如下:

# 准确性度量用于验证
soilspec::eval(datV$TotalCarbon, mblResults1Val$results$k_30$pred, obj = "quant")

输出结果可能如下:
| 指标 | 值 |
| — | — |
| ME | 0.13 |
| RMSE | 0.5 |
| r2 | 0.65 |
| R2 | 0.71 |
| rhoC | 0.85 |
| RPD | 1.86 |
| RPIQ | 2.42 |

2. 分类变量的模型

2.1 土壤属性的分类

土壤属性可分为连续属性(如有机碳或黏土含量)和分类属性(如土壤质地类别、矿物类别或土壤类型)。对于分类土壤属性的预测,需要对模型进行调整。

2.2 将连续值转换为土壤质地类别

以澳大利亚土壤质地三角形为例,使用 soiltexture R 包将土壤黏土、粉砂和砂的含量转换为土壤质地类别,具体步骤如下:
1. 加载所需包:

require(soiltexture)
  1. 创建数据表:
datCsub <- data.frame(CLAY = datC$clay,
                      SILT = datC$silt,
                      SAND = datC$sand)
datVsub <- data.frame(CLAY = datV$clay,
                      SILT = datV$silt,
                      SAND = datV$sand)
  1. 数据归一化:
datCsub <- TT.normalise.sum(tri.data = datCsub)
datVsub <- TT.normalise.sum(tri.data = datVsub)
  1. 绘制土壤质地三角形:
TextPlot <- TT.plot(class.sys = "AU.TT",
                    tri.data = datCsub,
                    main = " ",
                    pch = 16,
                    cex.axis = 0.7,
                    cex.lab = 0.7)
  1. 添加验证数据到土壤质地三角形:
TT.points(tri.data = datVsub,
          geo = TextPlot,
          col = "red",
          pch = 16)
  1. 为校准和验证数据集分配土壤质地类别:
# 为校准数据集创建土壤质地类别
datC$textclass <- TT.points.in.classes(tri.data = datCsub,
                                       class.sys = "AU.TT",
                                       text.tol = 1,
                                       PiC.type = "t",
                                       collapse = "_")
# 移除落在两个类别边界上的点
datC <- datC[-grep("_", datC$textclass),]
# 为验证数据集创建土壤质地类别
datV$textclass <- TT.points.in.classes(tri.data = datVsub,
                                       class.sys = "AU.TT",
                                       text.tol = 1,
                                       PiC.type = "t",
                                       collapse = "_")
# 移除落在两个类别边界上的点
datV <- datV[-grep("_", datV$textclass),]
  1. 显示校准数据集中导出的土壤类别:
unique(datC$textclass)

2.3 预测土壤质地类别的模型

2.3.1 偏最小二乘判别分析(PLS - DA)

PLS - DA 是一种基于传统 PLS 回归的线性分类模型,具体操作步骤如下:
1. 加载所需包:

require(caret)
  1. 创建校准数据集的子集:
datCSub <- data.frame(soiltext = datC$textclass, datC$spcAMovav)
colnames(datCSub) <- c("textclass", paste0("spec.", colnames(datC$spcAMovav)))
  1. 进行 k 折交叉验证,重复三次:
ctrl <- trainControl(method = "repeatedcv",
                     repeats = 3)
  1. 设置随机种子:
set.seed(123)
  1. 使用 caret 包构建 PLS - DA 模型:
soilCPlsdaModel <- train(textclass ~ .,
                         data = datCSub,
                         method = "pls",
                         preProc = c("center", "scale"),
                         metric = c("Accuracy"),
                         tuneLength = 30,
                         trControl = ctrl)
  1. 显示拟合的 PLS - DA 模型的摘要:
soilCPlsdaModel
  1. 绘制交叉验证结果:
plot(soilCPlsdaModel)
  1. 创建验证数据集:
datVSub <- data.frame(soiltext = datV$textclass, datV$spcAMovav)
colnames(datVSub) <- c("textclass", paste0("spec.", colnames(datV$spcAMovav)))
  1. 显示每个类别的概率:
head(predict(soilCPlsdaModel,
             newdata = datVSub,
             type="prob"))
  1. 预测验证数据集上的类别:
plsClasses <- predict(soilCPlsdaModel, newdata = datVSub)
  1. 创建预测与观测土壤质地类别的混淆矩阵:
confMat <- confusionMatrix(datVSub$textclass, plsClasses)
  1. 显示混淆矩阵和准确性、Cohen’s kappa:
confMat$table
confMat$overall[1:2]
2.3.2 随机森林

随机森林应用于分类变量与应用于连续变量类似,示例代码如下:
1. 定义控制参数:

trainControl <- trainControl(method = "repeatedcv",
                             number = 10,
                             repeats = 3)
  1. 定义随机森林参数 mtry
mtry <- sqrt(ncol(datCSub))
tunegrid <- expand.grid(.mtry = mtry)
  1. 设置随机种子:
set.seed(123)
  1. 使用 caret 包构建随机森林模型:
soilCRFModel <- train(textclass ~ .,
                      data = datCSub,
                      method = "rf",
                      metric = c("Accuracy"),
                      tuneGrid = tunegrid,
                      trControl = trainControl,
                      verbose = FALSE)
  1. 打印模型摘要:
print(soilCRFModel)
  1. 预测验证数据集上的类别:
RFClasses <- predict(soilCRFModel,
                     newdata = datVSub)
  1. 创建混淆矩阵:
confMat <- confusionMatrix(datVSub$textclass, RFClasses)
  1. 显示混淆矩阵和准确性、Cohen’s kappa:
confMat$table
confMat$overall[1:2]

2.4 流程总结

下面是将连续值转换为土壤质地类别并进行预测的 mermaid 流程图:

graph LR
    A[加载数据] --> B[数据预处理]
    B --> C[绘制土壤质地三角形]
    C --> D[分配土壤质地类别]
    D --> E[移除边界点]
    E --> F[选择模型(PLS - DA 或随机森林)]
    F --> G[模型训练]
    G --> H[模型预测]
    H --> I[验证与评估]

3. 土壤光谱推理系统

3.1 系统概述

另一种估计土壤属性的方法是将光谱与 pedotransfer 函数(PTF)相结合,形成土壤光谱推理系统。该系统分两步进行:
- 步骤 1:校准 :在光谱和一些基本土壤属性的测量值之间建立多元模型。
- 步骤 2:推理 :将步骤 1 中估计的基本土壤属性作为输入,使用 PTF 预测一组不同的土壤属性。

3.2 示例:估计田间持水量

以 Rab 等人(2011)的 PTF 为例,估计田间持水量(FC),具体步骤如下:
1. 加载所需包:

require(soilspec)
  1. 加载数据:
data("datsoilspc")
  1. 显示可用的土壤属性:
colnames(datsoilspc)
  1. 使用 PTF 估计田间持水量:
FC <- 7.759 + 0.7165*datsoilspc["clay"] + 0.9708*datsoilspc["silt"] - (0.01729*datsoilspc["clay"] )*datsoilspc["silt"]
  1. 绘制估计田间持水量的分布:
boxplot(FC,
        ylab = "Field capacity")

通过以上方法,可以从光谱中估计土壤属性和类别,并利用土壤光谱推理系统预测更多的土壤属性。

3.3 系统优势与特点

土壤光谱推理系统具有显著优势,它能够估计那些无法直接从光谱中获取的土壤物理、化学和生物属性。其核心优势在于结合了光谱技术和 pedotransfer 函数(PTF),克服了部分土壤属性在光谱中无明显响应,以及因预算限制无法从土壤光谱库开发校准函数的问题。

该系统的关键特点是对不确定性的量化和传播。以偏最小二乘回归为例,可通过集成模型(如 bootstrap 和聚合)来量化模型不确定性。

3.4 不确定性量化与传播

虽然不确定性量化和传播在其他文献中有详细讨论,但在土壤光谱推理系统中,这一过程至关重要。在实际应用中,我们需要考虑多个环节的不确定性,如光谱测量误差、基本土壤属性估计误差以及 PTF 本身的误差。

为了更好地理解不确定性的传播路径,以下是一个 mermaid 流程图:

graph LR
    A[光谱测量] --> B[基本属性估计]
    B --> C[PTF 输入]
    C --> D[目标属性预测]
    E[光谱测量误差] --> A
    F[基本属性估计误差] --> B
    G[PTF 误差] --> C
    H[总不确定性] --> D

3.5 数据可用性与灵活性

在实际应用中,土壤属性数据的可用性可能不同。有些情况下,土壤属性数据可以直接从数据集中获取;而在其他情况下,需要通过光谱或土壤光谱库进行估计。土壤光谱推理系统的灵活性使其能够适应不同的数据情况。

例如,在使用 Geeves 数据集时,土壤黏土和粉砂含量是可用的,可以直接用于推导田间持水量。但在其他场景中,如果这些基本属性数据缺失,可以先通过光谱估计这些属性,再进行后续的推理。

3.6 结果分析与评估

对于土壤光谱推理系统的结果,需要进行全面的分析和评估。以田间持水量的估计为例,我们可以通过绘制箱线图来直观地观察估计值的分布情况。

同时,还可以与实际测量值进行对比,计算误差指标,如均方误差(MSE)、均方根误差(RMSE)等,以评估估计结果的准确性。以下是一个简单的评估示例:

# 假设存在实际测量的田间持水量数据
actual_FC <- datsoilspc$FieldCapacity
# 计算均方误差
mse <- mean((FC - actual_FC)^2)
# 计算均方根误差
rmse <- sqrt(mse)
# 显示误差指标
data.frame(MSE = mse, RMSE = rmse)

3.7 模型选择与优化

在使用土壤光谱推理系统时,模型的选择和优化是关键步骤。对于步骤 1 中的多元模型,可以选择偏最小二乘回归(PLS)、随机森林等不同的算法。不同的算法适用于不同的数据特点和问题场景,需要根据实际情况进行选择。

同时,还可以对模型进行优化,如调整模型参数、选择合适的特征变量等。以 PLS - DA 模型为例,可以通过调整 ncomp 参数来优化模型性能。以下是一个简单的参数调整示例:

# 定义不同的 ncomp 值
ncomp_values <- c(10, 20, 30)
# 循环评估不同 ncomp 值下的模型性能
for (ncomp in ncomp_values) {
  soilCPlsdaModel <- train(textclass ~ .,
                           data = datCSub,
                           method = "pls",
                           preProc = c("center", "scale"),
                           metric = c("Accuracy"),
                           tuneLength = ncomp,
                           trControl = ctrl)
  # 进行预测和评估
  plsClasses <- predict(soilCPlsdaModel, newdata = datVSub)
  confMat <- confusionMatrix(datVSub$textclass, plsClasses)
  accuracy <- confMat$overall["Accuracy"]
  kappa <- confMat$overall["Kappa"]
  cat("ncomp =", ncomp, "Accuracy =", accuracy, "Kappa =", kappa, "\n")
}

3.8 总结与展望

土壤光谱推理系统为土壤属性的估计提供了一种有效的方法。通过结合光谱技术和 pedotransfer 函数,能够估计多种土壤属性,克服了传统方法的局限性。

在实际应用中,需要注意数据的质量和可用性,合理选择模型和参数,并对结果进行全面的评估。未来,可以进一步研究如何提高模型的准确性和稳定性,以及如何更好地处理不确定性问题。

同时,随着光谱技术和数据科学的不断发展,土壤光谱推理系统有望在土壤科学领域发挥更大的作用,为农业生产、环境保护等提供更准确的土壤信息。

3.9 操作步骤总结

以下是使用土壤光谱推理系统估计土壤属性的操作步骤总结:
1. 数据准备 :加载所需的包和数据,确保数据包含光谱信息和相关的土壤属性。
2. 步骤 1:校准
- 选择合适的多元模型(如 PLS、随机森林等)。
- 对光谱和基本土壤属性数据进行预处理。
- 训练模型,调整参数以优化性能。
3. 步骤 2:推理
- 选择合适的 pedotransfer 函数(PTF)。
- 将步骤 1 中估计的基本土壤属性作为输入,使用 PTF 预测目标土壤属性。
4. 结果分析与评估
- 绘制结果的可视化图表(如箱线图)。
- 计算误差指标,评估估计结果的准确性。
5. 模型优化与调整
- 根据评估结果,调整模型参数和特征变量。
- 尝试不同的模型和 PTF,以提高性能。

通过遵循以上步骤,可以有效地使用土壤光谱推理系统估计土壤属性,为土壤科学研究和实际应用提供有力支持。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值