当前位置: 首页 > news >正文

第十九讲 XGBoost 二分类模型案例(遥感数据识别玉米与小麦地块)

🌾 案例场景:遥感数据识别玉米与小麦地块

你是一名农业遥感研究者,希望根据遥感指数(如NDVI、EVI、土壤亮度等)对农田进行分类,判断地块是玉米还是小麦。


🧪 步骤 1:模拟数据生成

我们使用 dplyrMASS 生成 500 个样本数据,包含 4 个遥感特征变量与1个类别标签(玉米=1,小麦=0)。

# 加载所需包
library(dplyr)
library(ggplot2)
library(xgboost)
library(caret)

# 设置随机种子
set.seed(123)

# 模拟数据:250个玉米,250个小麦
n <- 250

# 玉米地块(NDVI高,EVI高)
corn <- data.frame(
  NDVI = rnorm(n, mean = 0.75, sd = 0.05),
  EVI = rnorm(n, mean = 0.6, sd = 0.06),
  Brightness = rnorm(n, mean = 0.2, sd = 0.04),
  Texture = rnorm(n, mean = 0.4, sd = 0.05),
  label = 1
)

# 小麦地块(NDVI稍低,亮度稍高)
wheat <- data.frame(
  NDVI = rnorm(n, mean = 0.55, sd = 0.07),
  EVI = rnorm(n, mean = 0.45, sd = 0.06),
  Brightness = rnorm(n, mean = 0.4, sd = 0.03),
  Texture = rnorm(n, mean = 0.35, sd = 0.06),
  label = 0
)

# 合并数据
df <- rbind(corn, wheat)
df$label <- as.factor(df$label)

# 可视化看看分类特征(NDVI vs EVI)
ggplot(df, aes(x = NDVI, y = EVI, color = label)) +
  geom_point(alpha = 0.6) +
  theme_minimal() +
  labs(title = "模拟遥感数据的作物分类分布")

🧠 步骤 2:建模准备

# 划分训练集和测试集
set.seed(42)
trainIndex <- createDataPartition(df$label, p = 0.8, list = FALSE)
train <- df[trainIndex, ]
test <- df[-trainIndex, ]

# 转换为矩阵格式供 XGBoost 使用
train_matrix <- xgb.DMatrix(data = as.matrix(train[, 1:4]), label = as.numeric(train$label) - 1)
test_matrix <- xgb.DMatrix(data = as.matrix(test[, 1:4]), label = as.numeric(test$label) - 1)

🔧 步骤 3:训练 XGBoost 模型

params <- list(
  booster = "gbtree",
  objective = "binary:logistic",
  eval_metric = "auc",
  eta = 0.1,
  max_depth = 4
)

xgb_model <- xgb.train(
  params = params,
  data = train_matrix,
  nrounds = 100,
  watchlist = list(train = train_matrix),
  verbose = 0
)

📊 步骤 4:模型预测与评估

# 预测测试集概率
pred_probs <- predict(xgb_model, test_matrix)

# 二值分类
pred_class <- ifelse(pred_probs > 0.5, 1, 0)

# 混淆矩阵与准确率
confusionMatrix(as.factor(pred_class), as.factor(test$label))

📌 步骤 5:查看特征重要性

importance <- xgb.importance(model = xgb_model)
xgb.plot.importance(importance_matrix = importance)

✅ 总结

模块内容
应用背景玉米与小麦地块识别(遥感特征变量)
技术路线XGBoost 二分类建模
数据形式模拟数据(NDVI, EVI 等)+ 标签
模型结果AUC/准确率 + 变量重要性可视化
可推广方向其他地类识别、病虫害检测、土壤分类等

如果你喜欢这一讲,欢迎点赞收藏并关注,我会持续输出优质内容~

http://www.dtcms.com/a/132239.html

相关文章:

  • HTML:网页的骨架 — 入门详解教程
  • Python heapq模块
  • 【Pandas】pandas DataFrame items
  • AIGC工具平台-建筑平面图3D渲染
  • Android studio Unknown Kotlin JVM target: 21
  • macOS 上使用 Homebrew 安装和配置 frp 客户端
  • 【C++】——lambda表达式
  • 数据资产保护与数据知识产权保护有何不同?
  • JavaScript中的Transferable对象教程
  • 企业级硬盘的测试流程
  • L2TP实验(无图后补)
  • 老旧测试用例生成平台异步任务与用户通知优化
  • OOM问题排查和解决
  • Java工厂模式解析:灵活对象创建的实践指南
  • Java LinkedList深度解析:双向链表的实现艺术与实战指南
  • 【Python爬虫】简单介绍
  • 16bit转8bit的常见方法(图像归一化)
  • 深入理解浏览器的 Cookie:全面解析与实践指南
  • UNITY 屏幕UI自适应
  • Ubuntu下解压ZIP压缩文件出现中文乱码问题的综合解决方案
  • python提升图片清晰度
  • 【学习】对抗训练-WGAN
  • RTT添加一个RTC时钟驱动,以DS1307为例
  • C语言超详细指针知识(三)
  • Java设计模式实战:装饰模式在星巴克咖啡系统中的应用
  • 【JavaScript】二十、电梯导航栏的实现
  • C++之二叉搜索树
  • arcgis几何与游标(1)
  • 【NLP】 自然语言处理笔记
  • Spring-AI-alibaba 结构化输出