第53.5讲 | 小项目实战:用 SHAP 值表明农作物产量预测模子 [特殊字符][特殊字符]

[复制链接]
发表于 2025-9-21 22:08:54 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
目次
✅ 项目配景
📦 所用工具
📁 数据字段(模仿)
🧑‍💻 代码实现步骤
🎯 解读与开导
🧠 项目拓展建议


✅ 项目配景

我们使用一个简化的玉米产量数据集(可模仿现实数据),练习一个呆板学习模子预测玉米产量,并使用 SHAP 值表明模子的关键影响因素。
📦 所用工具



  • Python
  • pandas、scikit-learn
  • xgboost
  • shap
📁 数据字段(模仿)

字段寄义rainfall降雨量(mm)temperature温度(℃)soil_nitrogen土壤氮含量fertilizer施肥量yield玉米产量(目标变量)
🧑‍💻 代码实现步骤

  1. # 第一步:导入库
  2. import pandas as pd
  3. import numpy as np
  4. import shap
  5. import xgboost as xgb
  6. from sklearn.model_selection import train_test_split
  7. import matplotlib.pyplot as plt
  8. # 第二步:构造或加载数据
  9. data = pd.DataFrame({
  10.     'rainfall': np.random.uniform(100, 300, 200),
  11.     'temperature': np.random.uniform(15, 30, 200),
  12.     'soil_nitrogen': np.random.uniform(0.5, 2.0, 200),
  13.     'fertilizer': np.random.uniform(50, 150, 200),
  14. })
  15. # 模拟目标变量
  16. data['yield'] = (
  17.     0.05 * data['rainfall'] +
  18.     0.1 * data['temperature'] +
  19.     0.2 * data['soil_nitrogen'] +
  20.     0.03 * data['fertilizer'] +
  21.     np.random.normal(0, 2, 200)
  22. )
  23. # 第三步:划分训练集与测试集
  24. X = data.drop('yield', axis=1)
  25. y = data['yield']
  26. X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
  27. # 第四步:训练模型
  28. model = xgb.XGBRegressor()
  29. model.fit(X_train, y_train)
  30. # 第五步:SHAP 值解释
  31. explainer = shap.Explainer(model)
  32. shap_values = explainer(X_test)
  33. # 第六步:可视化解释
  34. shap.plots.beeswarm(shap_values)
复制代码

🎯 解读与开导



  • 使用 SHAP 分析后,发现“soil_nitrogen”与“rainfall”对模子预测影响最大,分析氮含量和降雨量是玉米产量的关键变量。
  • 利用这类可表明性分析,有助于科学家与农业管理者构建可信的AI模子,克制“黑箱模子”带来的误解与风险。

🧠 项目拓展建议


  • 参加 LIME 对比分析;
  • 更换模子为随机森林、LightGBM 等;
  • 用真实遥感+情形数据集练习,进步实用性。


回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表