当前位置: 首页 > 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/准确率 + 变量重要性可视化
可推广方向其他地类识别、病虫害检测、土壤分类等

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

相关文章:

  • 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压缩文件出现中文乱码问题的综合解决方案
  • 湘江半程马拉松赛女配速员“跑崩”,晕倒在终点?组委会回应
  • 钱理群|直面衰老与死亡
  • 马上评|治理“龟速车”,也是一次驾驶文明的升级
  • 中宣部等十部门联合印发《新时代职业道德建设实施纲要》
  • 上海明天有雷雨、大风,下周气温在春日舒适区间
  • 陈杨梅:为爸爸寻我19年没有放弃而感动,回家既紧张又期待