目錄
? 項目背景
📦 所用工具
📁 數據字段(模擬)
🧑?💻 代碼實現步驟
🎯 解讀與啟發
🧠 項目拓展建議
? 項目背景
我們使用一個簡化的玉米產量數據集(可模擬實際數據),訓練一個機器學習模型預測玉米產量,并使用 SHAP 值解釋模型的關鍵影響因素。
📦 所用工具
-
Python
-
pandas、scikit-learn
-
xgboost
-
shap
📁 數據字段(模擬)
字段 | 含義 |
---|---|
rainfall | 降雨量(mm) |
temperature | 溫度(℃) |
soil_nitrogen | 土壤氮含量 |
fertilizer | 施肥量 |
yield | 玉米產量(目標變量) |
🧑?💻 代碼實現步驟
# 第一步:導入庫
import pandas as pd
import numpy as np
import shap
import xgboost as xgb
from sklearn.model_selection import train_test_split
import matplotlib.pyplot as plt# 第二步:構造或加載數據
data = pd.DataFrame({'rainfall': np.random.uniform(100, 300, 200),'temperature': np.random.uniform(15, 30, 200),'soil_nitrogen': np.random.uniform(0.5, 2.0, 200),'fertilizer': np.random.uniform(50, 150, 200),
})
# 模擬目標變量
data['yield'] = (0.05 * data['rainfall'] +0.1 * data['temperature'] +0.2 * data['soil_nitrogen'] +0.03 * data['fertilizer'] +np.random.normal(0, 2, 200)
)# 第三步:劃分訓練集與測試集
X = data.drop('yield', axis=1)
y = data['yield']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)# 第四步:訓練模型
model = xgb.XGBRegressor()
model.fit(X_train, y_train)# 第五步:SHAP 值解釋
explainer = shap.Explainer(model)
shap_values = explainer(X_test)# 第六步:可視化解釋
shap.plots.beeswarm(shap_values)
🎯 解讀與啟發
-
使用 SHAP 分析后,發現“soil_nitrogen”與“rainfall”對模型預測影響最大,說明氮含量和降雨量是玉米產量的關鍵變量。
-
利用這類可解釋性分析,有助于科學家與農業管理者構建可信的AI模型,避免“黑箱模型”帶來的誤解與風險。
🧠 項目拓展建議
-
加入 LIME 對比分析;
-
更換模型為隨機森林、LightGBM 等;
-
用真實遙感+氣象數據集訓練,提高實用性。