农作物损害预测分析

在这篇文章中,将探讨如何使用数据科学机器学习技术来预测农作物的损害情况。将通过简单的分类模型来尝试获得较高的准确率,并从数据集中获得深入的洞察。

目标是确定收获季节的结果,即作物是否健康(存活)、是否因农药而受损,或因其他原因受损。有两个数据集,一个用于训练,一个用于测试。

数据集描述

数据集中包含以下字段:

ID: 唯一标识符 Estimated_Insects_Count: 每平方米估计的昆虫数量 Crop_Type: 作物类型(0,1) Soil_Type: 土壤类型(0,1) Pesticide_Use_Category: 农药使用类型(1-从未使用,2-之前使用过,3-目前正在使用) Number_Doses_Week: 每周剂量数量 Number_Weeks_Used: 使用周数 Number_Weeks_Quit: 停止使用周数 Season: 季节类别(1,2,3) Crop_Damage: 作物损害类别(0=存活,1=其他原因损害,2=农药损害)

导入库和数据集

首先,需要导入必要的库,如NumPy、pandas、matplotlib和seaborn。然后,将数据集从CSV格式加载并转换为panda DataFrame,并检查前五行以分析数据。

数据清洗

在数据清洗阶段,执行以下步骤:

  1. 检查空值:使用dataset.isnull().sum()检查数据集中的空值,发现Number_Weeks_Used变量中有9000个缺失值。
  2. 检查数据类型:检查所有列的数据类型,以查看数据中是否存在任何不一致性。
  3. 检查唯一值:了解列中是否存在唯一值,这将有助于在未来处理中降低维度。
  4. 替换缺失值:由于Number_Weeks_Used列中有9000个缺失值,可以通过数据的众数来替换它们。替换后再次检查空值,发现数据集中没有空值。

探索性数据分析(EDA)

在这个阶段,将进行EDA以获得数据的洞察并熟悉数据。首先,使用info()方法获取信息。

相关性:使用sns.heatmap()检查相关性。从热图中得出的推断:

  • Estimated_Insects_count、Pesticide_use_category和Number_weeks_used与Crop damage正相关。
  • Number_weeks_used与Estimated_Insects_count和Pesticide_use_category正相关。
  • Number_weeks_Quit与Pesticide_use_category和Number_weeks_used高度负相关。

数据可视化:为了收集洞察,数据可视化是必不可少的。

对于单变量,绘制了Crop_Damage的计数图。观察结果:与农药损害相比,其他原因造成的作物损害较少。作物类型0的生存几率比作物类型1高。

现在,为Crop_Damage与作物类型的昆虫数量绘制了计数图。观察结果:

  • 类型2的农药使用起来比类型3的农药更安全。
  • 类型3的农药显示出最多的与农药相关的作物损害。

单变量分析中的另一个图表以收集更多洞察。观察结果:

  • 从图1可以得出结论,直到20-25周,农药损害可以忽略不计。
  • 从图3可以看到,20周后,由于使用农药造成的损害显著增加。

在双变量分析中,绘制了Crop_Damage与Estimated_Insects_Count之间的条形图。从上面的图表中可以清楚地观察到,大多数昆虫攻击发生在作物类型0上。

作物类型与使用周数之间的条形图。观察结果:

  • 与类型1相比,作物类型0更容易受到农药相关和其他损害的影响。
  • 作物类型1的平均农药相关损害持续时间较短。

数据预处理

在数据预处理阶段,执行以下步骤:

现在将使用箱线图检查异常值。在Insect_Count、doses_week和number_weeks_quit列中明显存在一些异常值。为了移除这些异常值,简单地找到每列的平均值,并用它替换异常值。

使用histplot检查数据的偏斜性,并观察到所有数据都呈正态分布。现在,数据集已经准备好输入机器学习模型进行分类分析。

缩放数据集:通常,第一步是丢弃目标变量,然后使用Standard Scaler对数据集进行缩放,使数据呈正态分布。

分割数据集:预处理后,现在将数据分割为训练/测试子集。

评估模型:现在检查了各种分类模型,并计算了精确度、召回率和F1分数等指标。将运行以下模型:

  • 随机森林
  • K最近邻(KNN)
  • 决策树分类器
  • 高斯NB

从初始模型准确率值来看,KNN的表现优于其他模型,准确率为83%。它具有最高的准确率得分和最小的标准差。

现在使用GridSearchCV找到最佳参数,即n_neighbors,范围为(2,30),cv=5,评分为‘accuracy’,为KNN模型找到了n_neighbor=22。

再次运行KNN模型,使用其最佳参数,即n_neighbor=22。

为了检查模型性能,现在将绘制不同的性能指标。

从观察中,发现模型的准确率(~0.84)、精确度和召回率都不错,这表明模型适合预测。

为了获得更好的结果,可以进行超参数调整,这将有助于提高模型的准确率。但总体而言,KNN在所有模型中提供了良好的准确率,因此将其保存为最终模型。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485