一、引言
预测粮食产量在农业规划、食品安全和全球经济稳定等多个方面都具有极其重要的意义,其应用场景也十分广泛。以下是对预测粮食产量的重要性和应用场景的详细介绍:
1.1 预测粮食产量的重要性
(1)农业规划与决策支持:
粮食产量预测为政府和相关机构提供了农业规划的基础数据。通过了解未来的粮食产量,可以制定出更加科学合理的农业政策,如调整种植面积、优化种植结构、推广先进的农业技术等,以提高农业生产效率和粮食产量。同时,粮食产量预测还有助于政府进行农产品进出口的规划,确保国内市场供应充足,同时有效控制进口成本。
(2)粮食安全与风险防控:
粮食是人类生存和发展的基本需求,粮食安全是国家安全的重要组成部分。通过预测粮食产量,可以及时发现潜在的粮食安全风险,如作物病虫害、自然灾害等,从而采取相应的防控措施,确保粮食生产的稳定和安全。在粮食供需紧张的情况下,准确的粮食产量预测还可以为政府提供决策支持,如启动粮食储备、调整粮食价格等,以维护粮食市场的稳定。
1.2 预测粮食产量的应用场景
(1)农业生产管理:
农民可以根据粮食产量预测结果,合理安排耕作计划和种植品种选择。通过选择适宜的作物品种和种植技术,可以最大限度地提高农产品产量和质量,实现农业可持续发展。同时,粮食产量预测还可以帮助农民了解作物的生长情况和潜在风险,从而采取相应的管理措施,如施肥、灌溉、病虫害防治等,以提高作物的抗逆性和产量。
(2)农产品市场调控:
政府和相关机构可以根据粮食产量预测结果,制定农产品市场的调控政策。例如,在粮食产量预期下降的情况下,可以通过增加粮食进口、降低关税等措施来保障国内市场的供应;在粮食产量预期增加的情况下,可以通过调整粮食价格、加强市场监管等措施来维护市场的稳定。
二、处理步骤
2.1 数据预处理
(1)读取数据:与梯度提升树相同,使用`pandas`读取Excel文件。
(2)删除时间列:同样删除时间列。
(3)计算相关性矩阵:利用’corr’方法计算数据集中所有变量之间的相关性矩阵。
(4)绘制热力图:使用’seaborn’库的’heatmap’函数可视化相关性矩阵,帮助识别变量间的相关性。
2.2 特征选择
(1)选择目标变量:确定目标变量,例如“粮食产量”。
(2)提取相关性行:从相关性矩阵中提取目标变量的相关性行。
(3)排序相关性:将相关性行按照相关系数的绝对值降序排序。
(4)选择顶部特征:选择与目标变量相关性最高的前8个特征作为特征集。
2.3 模型训练
(1)划分数据集:与梯度提升树相同,使用’train_test_split’函数划分数据集。
(2)初始化模型:创建’Linear Regression’实例。
(3)训练模型:使用训练集数据调用’fit’方法训练模型。
2.4 模型评估
(1)预测测试集:使用训练好的模型对测试集进行预测。
(2)计算评估指标:计算均方误差(MSE)和R²得分来评估模型性能。
(3)可视化结果:绘制真实值与预测值的散点图,直观比较模型预测的准确性。
三、代码实操
3.1 案例数据
数据来自于国家统计局,分别收集了从2004年-2023年的粮食产量、农作物总播种面积、受灾面积、农业机械总动力、有效灌溉面积、化肥施用折纯量、氮肥施用折纯量、磷肥施用折纯量、钾肥施用折纯量、复合肥施用折纯量、水电建设投资额、水库数、塑料薄膜使用量、农药使用量等指标数据。
3.2 代码
import pandas as pd
import seaborn as sns
import matplotlib.pyplot as plt
from sklearn.model_selection import train_test_split, cross_val_score
from sklearn.linear_model import LinearRegression
from sklearn.metrics import mean_squared_error, r2_score
# 设置matplotlib配置,确保中文可以正确显示
plt.rcParams['font.sans-serif'] = ['SimHei'] # 使用黑体
plt.rcParams['axes.unicode_minus'] = False # 正确显示负号
# 读取Excel文件
file_path = 'C:/Users/qiangge/Desktop/粮食数据.xls'
df = pd.read_excel(file_path)
# 从DataFrame中删除时间列
df.drop('时间', axis=1, inplace=True)
# 计算相关性矩阵
correlation_matrix = df.corr()
# 绘制热力图
plt.figure(figsize=(10, 8))
sns.heatmap(correlation_matrix, annot=True, cmap='coolwarm', fmt=".2f")
plt.title('相关系数矩阵热力图')
plt.show()
# 选择目标变量
target_variable = '粮食产量'
# 提取目标变量的相关性行
target_correlation = correlation_matrix[target_variable]
# 排序相关性
sorted_correlation = target_correlation.sort_values(key=abs, ascending=False)
# 选择顶部特征
top_features = sorted_correlation.drop(target_variable).head(8).index.tolist()
# 打印相关性最高的特征及其相关性系数
print(f"与'{target_variable}'相关性最高的特征变量及其相关性系数:")
for feature in top_features:
if feature != target_variable: # 排除目标变量
correlation_value = sorted_correlation[feature]
print(f"{feature}: {correlation_value:.2f}")
# 准备特征集和目标变量
X = df[top_features] # 选择特征变量
y = df[target_variable] # 目标变量
# 划分训练集和测试集
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=42)
# 初始化线性回归模型
lr = LinearRegression()
# 使用交叉验证计算MSE和R²得分
mse_scores = cross_val_score(lr, X_train, y_train, scoring='neg_mean_squared_error', cv=5)
r2_scores = cross_val_score(lr, X_train, y_train, scoring='r2', cv=5)
# 训练模型
lr.fit(X_train, y_train)
# 预测测试集
y_pred = lr.predict(X_test)
# 计算测试集的MSE和R²得分
mse_test = mean_squared_error(y_test, y_pred)
r2_test = r2_score(y_test, y_pred)
# 计算MSE和R²的平均值
mse_avg = -mse_scores.mean()
r2_avg = r2_scores.mean()
# 输出结果
print(f'交叉验证平均均方误差(MSE): {mse_avg:.2f}')
print(f'交叉验证平均R²得分: {r2_avg:.2f}')
print(f'测试集均方误差(MSE): {mse_test:.2f}')
print(f'测试集R²得分: {r2_test:.2f}')
# 可视化预测结果
plt.figure(figsize=(10, 6))
plt.scatter(y_test, y_pred)
plt.plot([y.min(), y.max()], [y.min(), y.max()], 'k--', lw=2)
plt.xlabel('真实值')
plt.ylabel('预测值')
plt.title('真实值与预测值的比较')
plt.show()
3.3 运行结果
经过相关性分析,可以看到特征变量与目标变量之间的相关性分析如下:
提取的前8个与‘粮食产量’相关性最高的特征变量及其相关系数如下:
3.4 结论
(1)粮食产量预测对于农业规划、政策制定、粮食安全和市场调控等方面至关重要。
(2)通过相关性分析,识别了与粮食产量高度相关的特征变量,如复合肥施用折纯量、有效灌溉面积、农作物总播种面积等。
(3)线性回归模型在测试集上的R²得分为0.94,表明模型能解释94%的变异性,显示出较高的拟合度和准确性。
标签:粮食产量,变量,Python,train,test,plt,相关性,线性 From: https://blog.csdn.net/m0_74136676/article/details/143808952