第十九讲 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/准确率 + 变量重要性可视化
可推广方向 其他地类识别、病虫害检测、土壤分类等

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

你可能感兴趣的:(数据挖掘,人工智能,r语言,机器学习,算法,分类)