首页 > 编程语言 >基于线性回归的粮食产量预测(Python代码)

基于线性回归的粮食产量预测(Python代码)

时间:2024-11-16 09:44:17浏览次数:3  
标签:粮食产量 变量 Python train test plt 相关性 线性

一、引言

预测粮食产量在农业规划、食品安全和全球经济稳定等多个方面都具有极其重要的意义,其应用场景也十分广泛。以下是对预测粮食产量的重要性和应用场景的详细介绍:

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

相关文章

  • 网络爬虫 Python 第二课
    BeautifulSoup高级用法:标签查找与筛选:除了简单地通过标签名查找(如 soup.find('div') 查找第一个 div 标签),还可以利用属性来更精准地查找。例如,如果要查找所有 class 属性为 article 的 div 标签,可以使用 soup.find_all('div',class_='article') 。这里注意 cl......
  • (分享源码)计算机毕业设计必看必学 上万套实战教程手把手教学JAVA、PHP,node.js,C++、pyth
    摘要随着计算机科学技术日渐成熟,人们已经深刻认识到了计算机功能的强大,计算机已经进入到了人类社会发展的各个领域,并且发挥着十分重要的作用。通过管理系统在电脑上的应用,人们能更好的管理信息,储存数据。为了能够提供游戏商城的方便性,开发了基于vue的游戏网站。此游戏网站......
  • (分享源码)计算机毕业设计必看必学 上万套实战教程手把手教学JAVA、PHP,node.js,C++、pyth
    摘要随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,招聘网站当然也不能排除在外。招聘网站是以实际运用为开发背景,运用软件工程开发方法,采用互联网技术构建的一个管理系统。整个开发过程首先对软件系统进行需......
  • 线性方程组 入门概念
    解释如下概念入门对比齐次vs非齐次线性vs非线性微分vs求导vs积分方程组vs矩阵乘法齐次线性方程组永远存在零解基础解系vs通解存在非零解↔︎A不满秩r(A)+η的数量=n(x的列有多长)非齐次线性方程组Ax=b的2个解互减,即ξ₁-ξ₂是Ax=0导出组的解Ax=b的......
  • 计算机毕业设计项目推荐,SSM山西能源学院教室管理系统81671(开题答辩+程序定制+全套文案
    摘 要随着科学技术的飞速发展,社会的方方面面、各行各业都在努力与现代的先进技术接轨,通过科技手段来提高自身的优势,山西能源学院教室管理系统当然也不能排除在外。山西能源学院教室管理系统是以实际运用为开发背景,运用软件工程原理和开发方法,采用 SSM技术构建的一个管理系......
  • (免费源码)计算机毕业设计必看必学 原创程序 java、PHP、python、文案全套、毕设成品等
    摘要由于数据库和数据仓库技术的快速发展,停车场管理系统建设越来越向模块化、智能化、自我服务和管理科学化的方向发展。停车场管理系统对处理对象和服务对象,自身的系统结构,处理能力,都将适应技术发展的要求发生重大的变化。停车场管理系统除了具有共享系统的全部功能以外,能......
  • Python 网络爬虫入门教程
    引言网络爬虫(WebCrawler)是一种通过编程从互联网上抓取数据的技术,常用于数据分析、信息采集等任务。Python作为一门功能强大且易于使用的编程语言,拥有丰富的爬虫库和工具,如Requests、BeautifulSoup和Scrapy,使得网络爬虫的开发变得更加高效便捷。本文将以一个简单的实例,介......
  • 电波诡影 Python
    Pythora的天空永远闪烁着诡异的蓝色光芒,似乎有某种未知的能量在星球表面流动。秦煜抬起头,呆望着这片异样的天空已经有一会儿了。透过奇形怪状的植被的缝隙和漂浮的尘雾,几颗星星在闪烁的蓝光背景下若隐若现。自从上次的项目结束后,秦煜总觉得心绪不宁,尤其是在夜晚。空气中弥漫着一......
  • 【python系列】python数据类型之字符串
    1.前言字符串是编程中最常用的数据类型,这章需要针对字符串进行讲解。字符串的定义:字符串(英语:string),是由零个或多个字符组成的有限序列。——Wikipediapython官方文档:https://docs.python.org/zh-cn/3.10/library/stdtypes.html#text-sequence-type-str字符串是由Un......
  • 基于大数据 Python 歌曲筛选爬虫数据分析可视化系统(源码+LW+部署讲解+数据库+ppt)
    !!!!!!!!!选题不知道怎么选不清楚自己适合做哪块内容都可以免费来问我避免后期給自己答辩找麻烦增加难度(部分学校只有一次答辩机会没弄好就延迟毕业了)会持续一直更新下去有问必答一键收藏关注不迷路源码获取:https://pan.baidu.com/s/1aRpOv3f2sdtVYOogQjb8jg?pwd=jf1d提取码:......