第十九讲 XGBoost 二分类模型案例(遥感数据识别玉米与小麦地块)
🌾 案例场景:遥感数据识别玉米与小麦地块
你是一名农业遥感研究者,希望根据遥感指数(如NDVI、EVI、土壤亮度等)对农田进行分类,判断地块是玉米还是小麦。
🧪 步骤 1:模拟数据生成
我们使用 dplyr
和 MASS
生成 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/准确率 + 变量重要性可视化 |
可推广方向 | 其他地类识别、病虫害检测、土壤分类等 |
如果你喜欢这一讲,欢迎点赞收藏并关注,我会持续输出优质内容~