网站添加内容品牌seo培训咨询
🌾 案例场景:遥感数据识别玉米与小麦地块
你是一名农业遥感研究者,希望根据遥感指数(如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/准确率 + 变量重要性可视化 |
可推广方向 | 其他地类识别、病虫害检测、土壤分类等 |
如果你喜欢这一讲,欢迎点赞收藏并关注,我会持续输出优质内容~